import of from UnitJS.Fun; import {compare, of, proj} from UnitJS.Fun; function Table(itemMaker, sortCriterion) { var items = {}; return { get: get, getAll: getAll, insert: insert, insertAll: insertAll, remove: remove }; function get(key) { return items[key]; } function getAll(criterion) { return Object.keys(items) .map(of(items)) .filter(criterion || function() {return true;}) .sort(compare(proj(sortCriterion))); } function insert(key, value) { items[key] = itemMaker(key, value); } function insertAll(itemsByKey) { for(var key in itemsByKey) { insert(key, itemsByKey[key]); } } function remove(key) { delete items[key]; } } return { make: Table }