packages/colonizers-core/lib/game-objects/collections/queryable-collection.js
'use strict';
class QueryableCollection {
constructor(clauses) {
this.items = [];
this.clauses = clauses;
}
push(item) {
if (Array.isArray(item)) {
this.items.push.apply(this, item);
} else {
this.items.push(item);
}
}
forEach(callback, thisArg) {
this.items.forEach(callback, thisArg);
}
map(map, thisArg) {
return this.items.map(map, thisArg);
}
filter(filter, thisArg) {
return this.items.filter(filter, thisArg);
}
all() {
return this.items;
}
getById(id) {
return this.items.find(item => item.id === id);
}
query(options) {
var q = this.items;
this.clauses.forEach(function(clause) {
if (clause.valid(options)) {
q = clause.filter(options, q);
}
});
return q;
}
}
module.exports = QueryableCollection;