inversify
Version:
A powerful and lightweight inversion of control container for JavaScript and Node.js apps powered by TypeScript.
105 lines (104 loc) • 3.92 kB
JavaScript
import * as ERROR_MSGS from '../constants/error_msgs';
import { isClonable } from '../utils/clonable';
var Lookup = (function () {
function Lookup() {
this._map = new Map();
}
Lookup.prototype.getMap = function () {
return this._map;
};
Lookup.prototype.add = function (serviceIdentifier, value) {
if (serviceIdentifier === null || serviceIdentifier === undefined) {
throw new Error(ERROR_MSGS.NULL_ARGUMENT);
}
if (value === null || value === undefined) {
throw new Error(ERROR_MSGS.NULL_ARGUMENT);
}
var entry = this._map.get(serviceIdentifier);
if (entry !== undefined) {
entry.push(value);
}
else {
this._map.set(serviceIdentifier, [value]);
}
};
Lookup.prototype.get = function (serviceIdentifier) {
if (serviceIdentifier === null || serviceIdentifier === undefined) {
throw new Error(ERROR_MSGS.NULL_ARGUMENT);
}
var entry = this._map.get(serviceIdentifier);
if (entry !== undefined) {
return entry;
}
else {
throw new Error(ERROR_MSGS.KEY_NOT_FOUND);
}
};
Lookup.prototype.remove = function (serviceIdentifier) {
if (serviceIdentifier === null || serviceIdentifier === undefined) {
throw new Error(ERROR_MSGS.NULL_ARGUMENT);
}
if (!this._map.delete(serviceIdentifier)) {
throw new Error(ERROR_MSGS.KEY_NOT_FOUND);
}
};
Lookup.prototype.removeIntersection = function (lookup) {
var _this = this;
this.traverse(function (serviceIdentifier, value) {
var lookupActivations = lookup.hasKey(serviceIdentifier) ? lookup.get(serviceIdentifier) : undefined;
if (lookupActivations !== undefined) {
var filteredValues = value.filter(function (lookupValue) {
return !lookupActivations.some(function (moduleActivation) { return lookupValue === moduleActivation; });
});
_this._setValue(serviceIdentifier, filteredValues);
}
});
};
Lookup.prototype.removeByCondition = function (condition) {
var _this = this;
var removals = [];
this._map.forEach(function (entries, key) {
var updatedEntries = [];
for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
var entry = entries_1[_i];
var remove = condition(entry);
if (remove) {
removals.push(entry);
}
else {
updatedEntries.push(entry);
}
}
_this._setValue(key, updatedEntries);
});
return removals;
};
Lookup.prototype.hasKey = function (serviceIdentifier) {
if (serviceIdentifier === null || serviceIdentifier === undefined) {
throw new Error(ERROR_MSGS.NULL_ARGUMENT);
}
return this._map.has(serviceIdentifier);
};
Lookup.prototype.clone = function () {
var copy = new Lookup();
this._map.forEach(function (value, key) {
value.forEach(function (b) { return copy.add(key, isClonable(b) ? b.clone() : b); });
});
return copy;
};
Lookup.prototype.traverse = function (func) {
this._map.forEach(function (value, key) {
func(key, value);
});
};
Lookup.prototype._setValue = function (serviceIdentifier, value) {
if (value.length > 0) {
this._map.set(serviceIdentifier, value);
}
else {
this._map.delete(serviceIdentifier);
}
};
return Lookup;
}());
export { Lookup };