factory-map
Version:
Extension of ECMAScript 6 Map to provide default values where no key exists.
35 lines (34 loc) • 1.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
class FactoryMap extends Map {
constructor(iterableOrDefaultValueFactory, defaultValueFactory) {
const isFunctionOrUndefined = (f) => iterableOrDefaultValueFactory === undefined || typeof iterableOrDefaultValueFactory === 'function';
if (isFunctionOrUndefined(iterableOrDefaultValueFactory)) {
if (iterableOrDefaultValueFactory && defaultValueFactory) {
throw new Error('Unexpected constructor params');
}
super();
this.factory = iterableOrDefaultValueFactory;
}
else {
super(iterableOrDefaultValueFactory);
this.factory = defaultValueFactory;
}
}
get(key, defaultValueFactory) {
let r = super.get(key);
if (r === undefined) {
if (defaultValueFactory) {
r = defaultValueFactory(key);
}
else if (this.factory) {
r = this.factory(key);
}
if (r !== undefined) {
super.set(key, r);
}
}
return r;
}
}
exports.FactoryMap = FactoryMap;