UNPKG

ioc-lite

Version:

IoC Container library which helps to keep inversion of control principle by using DI pattern for javascript/typescript projects

46 lines 1.7 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.IoCContainer = void 0; const data_resource_1 = __importDefault(require("./resources/data.resource")); const class_resource_1 = __importDefault(require("./resources/class.resource")); class IoCContainer { constructor() { this._resources = new Map(); } has(name) { return this._resources.has(name); } _resolveResourceDependency(resourceName, dependencyName) { if (this.has(dependencyName)) { return this._resources.get(dependencyName).resolve(); } throw new Error(`Can't find dependency '${String(dependencyName)}' for '${String(resourceName)}' resource`); } _registerResource(name, resource) { if (this.has(name)) { throw new Error(`${String(name)} resource is already registered in the container!`); } this._resources.set(name, resource); } register(name, entity) { const resource = new data_resource_1.default(entity); this._registerResource(name, resource); return this; } registerClass(name, service) { const resource = new class_resource_1.default(service, this._resolveResourceDependency.bind(this, name)); this._registerResource(name, resource); return this; } resolve(name) { if (this.has(name)) { return this._resources.get(name).resolve(); } return null; } } exports.IoCContainer = IoCContainer; //# sourceMappingURL=ioc-container.js.map