@tsclean/core
Version:
Plugin for API Rest Full development, based on Clean Architecture, IoC and Dependency Injection.
57 lines • 9.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.InstanceLinksHost = void 0;
const unknown_element_1 = require("../../errors/exceptions/unknown-element");
const shared_utils_1 = require("../../utils/shared.utils");
class InstanceLinksHost {
constructor(container) {
this.container = container;
this.instanceLinks = new Map();
this.initialize();
}
get(token, options = {}) {
const instanceLinksForGivenToken = this.instanceLinks.get(token);
if (!instanceLinksForGivenToken) {
throw new unknown_element_1.UnknownElementException(this.getInstanceNameByToken(token));
}
if (options.each) {
return instanceLinksForGivenToken;
}
const instanceLink = options.moduleId
? instanceLinksForGivenToken.find(item => item.moduleId === options.moduleId)
: instanceLinksForGivenToken[instanceLinksForGivenToken.length - 1];
if (!instanceLink) {
throw new unknown_element_1.UnknownElementException(this.getInstanceNameByToken(token));
}
return instanceLink;
}
initialize() {
const modules = this.container.getModules();
modules.forEach(moduleRef => {
const { providers, injectables, controllers } = moduleRef;
providers.forEach((wrapper, token) => this.addLink(wrapper, token, moduleRef, 'providers'));
injectables.forEach((wrapper, token) => this.addLink(wrapper, token, moduleRef, 'injectables'));
controllers.forEach((wrapper, token) => this.addLink(wrapper, token, moduleRef, 'controllers'));
});
}
addLink(wrapper, token, moduleRef, collectionName) {
const instanceLink = {
moduleId: moduleRef.id,
wrapperRef: wrapper,
collection: moduleRef[collectionName],
token
};
const existingLinks = this.instanceLinks.get(token);
if (!existingLinks) {
this.instanceLinks.set(token, [instanceLink]);
}
else {
existingLinks.push(instanceLink);
}
}
getInstanceNameByToken(token) {
return (0, shared_utils_1.isFunction)(token) ? token === null || token === void 0 ? void 0 : token.name : token;
}
}
exports.InstanceLinksHost = InstanceLinksHost;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UtbGlua3MtaG9zdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlL2luamVjdG9yL2luc3RhbmNlLWxpbmtzLWhvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkVBQWlGO0FBSWpGLDJEQUFxRDtBQWFyRCxNQUFhLGlCQUFpQjtJQUc1QixZQUE4QixTQUF1QjtRQUF2QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBRnBDLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQXFDLENBQUE7UUFHM0UsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFPRCxHQUFHLENBQ0QsS0FBcUIsRUFDckIsVUFBaUQsRUFBRTtRQUVuRCxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRWhFLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSx5Q0FBdUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN2RSxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBTywwQkFBMEIsQ0FBQTtRQUNuQyxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVE7WUFDbkMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQzNDO1lBQ0gsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLDBCQUEwQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUVyRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxJQUFJLHlDQUF1QixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQTtJQUNyQixDQUFDO0lBRU8sVUFBVTtRQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFBO1FBQzNDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDMUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsU0FBUyxDQUFBO1lBQ3pELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FDckQsQ0FBQTtZQUNELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FDdkQsQ0FBQTtZQUNELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FDdkQsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLE9BQU8sQ0FDYixPQUF3QixFQUN4QixLQUF3QixFQUN4QixTQUFpQixFQUNqQixjQUE4QjtRQUU5QixNQUFNLFlBQVksR0FBaUI7WUFDakMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ3RCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxTQUFTLENBQUMsY0FBYyxDQUFDO1lBQ3JDLEtBQUs7U0FDTixDQUFBO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDbkQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUE7UUFDL0MsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQUUsS0FBcUI7UUFDbkQsT0FBTyxJQUFBLHlCQUFVLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFFLEtBQWtCLGFBQWxCLEtBQUssdUJBQUwsS0FBSyxDQUFlLElBQUksQ0FBQyxDQUFDLENBQUUsS0FBZ0IsQ0FBQTtJQUMxRSxDQUFDO0NBQ0Y7QUE3RUQsOENBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVW5rbm93bkVsZW1lbnRFeGNlcHRpb24gfSBmcm9tICcuLi8uLi9lcnJvcnMvZXhjZXB0aW9ucy91bmtub3duLWVsZW1lbnQnXG5pbXBvcnQgeyBDb250YWluZXJJb0MgfSBmcm9tICcuL2NvbnRhaW5lcidcbmltcG9ydCB7IEluc3RhbmNlV3JhcHBlciB9IGZyb20gJy4vaW5zdGFuY2Utd3JhcHBlcidcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gJy4vbW9kdWxlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3NoYXJlZC51dGlscydcbmltcG9ydCB7IEluc3RhbmNlVG9rZW5UeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9pbmplY3Rpb24tdG9rZW4nXG5cbnR5cGUgSG9zdENvbGxlY3Rpb24gPSAncHJvdmlkZXJzJyB8ICdjb250cm9sbGVycycgfCAnaW5qZWN0YWJsZXMnXG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFuY2VMaW5rPFQgPSBhbnk+IHtcbiAgdG9rZW46IEluc3RhbmNlVG9rZW5UeXBlXG4gIHdyYXBwZXJSZWY6IEluc3RhbmNlV3JhcHBlcjxUPlxuICBjb2xsZWN0aW9uOiBNYXA8YW55LCBJbnN0YW5jZVdyYXBwZXI+XG4gIG1vZHVsZUlkOiBzdHJpbmdcbn1cblxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTGlua3NIb3N0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUxpbmtzID0gbmV3IE1hcDxJbnN0YW5jZVRva2VuVHlwZSwgSW5zdGFuY2VMaW5rW10+KClcblxuICBjb25zdHJ1Y3RvciAocHJpdmF0ZSByZWFkb25seSBjb250YWluZXI6IENvbnRhaW5lcklvQykge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpXG4gIH1cblxuICBnZXQ8VCA9IGFueT4odG9rZW46IEluamVjdGlvblRva2VuKTogSW5zdGFuY2VMaW5rPFQ+XG4gIGdldDxUID0gYW55PihcbiAgICB0b2tlbjogSW5qZWN0aW9uVG9rZW4sXG4gICAgb3B0aW9ucz86IHsgbW9kdWxlSWQ/OiBzdHJpbmc7IGVhY2g/OiBib29sZWFuIH1cbiAgKTogSW5zdGFuY2VMaW5rPFQ+IHwgQXJyYXk8SW5zdGFuY2VMaW5rPFQ+PlxuICBnZXQ8VCA9IGFueT4gKFxuICAgIHRva2VuOiBJbmplY3Rpb25Ub2tlbixcbiAgICBvcHRpb25zOiB7IG1vZHVsZUlkPzogc3RyaW5nOyBlYWNoPzogYm9vbGVhbiB9ID0ge31cbiAgKTogSW5zdGFuY2VMaW5rPFQ+IHwgQXJyYXk8SW5zdGFuY2VMaW5rPFQ+PiB7XG4gICAgY29uc3QgaW5zdGFuY2VMaW5rc0ZvckdpdmVuVG9rZW4gPSB0aGlzLmluc3RhbmNlTGlua3MuZ2V0KHRva2VuKVxuXG4gICAgaWYgKCFpbnN0YW5jZUxpbmtzRm9yR2l2ZW5Ub2tlbikge1xuICAgICAgdGhyb3cgbmV3IFVua25vd25FbGVtZW50RXhjZXB0aW9uKHRoaXMuZ2V0SW5zdGFuY2VOYW1lQnlUb2tlbih0b2tlbikpXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZWFjaCkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlTGlua3NGb3JHaXZlblRva2VuXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VMaW5rID0gb3B0aW9ucy5tb2R1bGVJZFxuICAgICAgPyBpbnN0YW5jZUxpbmtzRm9yR2l2ZW5Ub2tlbi5maW5kKFxuICAgICAgICAgIGl0ZW0gPT4gaXRlbS5tb2R1bGVJZCA9PT0gb3B0aW9ucy5tb2R1bGVJZFxuICAgICAgICApXG4gICAgICA6IGluc3RhbmNlTGlua3NGb3JHaXZlblRva2VuW2luc3RhbmNlTGlua3NGb3JHaXZlblRva2VuLmxlbmd0aCAtIDFdXG5cbiAgICBpZiAoIWluc3RhbmNlTGluaykge1xuICAgICAgdGhyb3cgbmV3IFVua25vd25FbGVtZW50RXhjZXB0aW9uKHRoaXMuZ2V0SW5zdGFuY2VOYW1lQnlUb2tlbih0b2tlbikpXG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZUxpbmtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZSAoKSB7XG4gICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuY29udGFpbmVyLmdldE1vZHVsZXMoKVxuICAgIG1vZHVsZXMuZm9yRWFjaChtb2R1bGVSZWYgPT4ge1xuICAgICAgY29uc3QgeyBwcm92aWRlcnMsIGluamVjdGFibGVzLCBjb250cm9sbGVycyB9ID0gbW9kdWxlUmVmXG4gICAgICBwcm92aWRlcnMuZm9yRWFjaCgod3JhcHBlciwgdG9rZW4pID0+XG4gICAgICAgIHRoaXMuYWRkTGluayh3cmFwcGVyLCB0b2tlbiwgbW9kdWxlUmVmLCAncHJvdmlkZXJzJylcbiAgICAgIClcbiAgICAgIGluamVjdGFibGVzLmZvckVhY2goKHdyYXBwZXIsIHRva2VuKSA9PlxuICAgICAgICB0aGlzLmFkZExpbmsod3JhcHBlciwgdG9rZW4sIG1vZHVsZVJlZiwgJ2luamVjdGFibGVzJylcbiAgICAgIClcbiAgICAgIGNvbnRyb2xsZXJzLmZvckVhY2goKHdyYXBwZXIsIHRva2VuKSA9PlxuICAgICAgICB0aGlzLmFkZExpbmsod3JhcHBlciwgdG9rZW4sIG1vZHVsZVJlZiwgJ2NvbnRyb2xsZXJzJylcbiAgICAgIClcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRMaW5rIChcbiAgICB3cmFwcGVyOiBJbnN0YW5jZVdyYXBwZXIsXG4gICAgdG9rZW46IEluc3RhbmNlVG9rZW5UeXBlLFxuICAgIG1vZHVsZVJlZjogTW9kdWxlLFxuICAgIGNvbGxlY3Rpb25OYW1lOiBIb3N0Q29sbGVjdGlvblxuICApIHtcbiAgICBjb25zdCBpbnN0YW5jZUxpbms6IEluc3RhbmNlTGluayA9IHtcbiAgICAgIG1vZHVsZUlkOiBtb2R1bGVSZWYuaWQsXG4gICAgICB3cmFwcGVyUmVmOiB3cmFwcGVyLFxuICAgICAgY29sbGVjdGlvbjogbW9kdWxlUmVmW2NvbGxlY3Rpb25OYW1lXSxcbiAgICAgIHRva2VuXG4gICAgfVxuICAgIGNvbnN0IGV4aXN0aW5nTGlua3MgPSB0aGlzLmluc3RhbmNlTGlua3MuZ2V0KHRva2VuKVxuICAgIGlmICghZXhpc3RpbmdMaW5rcykge1xuICAgICAgdGhpcy5pbnN0YW5jZUxpbmtzLnNldCh0b2tlbiwgW2luc3RhbmNlTGlua10pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0aW5nTGlua3MucHVzaChpbnN0YW5jZUxpbmspXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbnN0YW5jZU5hbWVCeVRva2VuICh0b2tlbjogSW5qZWN0aW9uVG9rZW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHRva2VuKSA/ICh0b2tlbiBhcyBGdW5jdGlvbik/Lm5hbWUgOiAodG9rZW4gYXMgc3RyaW5nKVxuICB9XG59XG4iXX0=