UNPKG

@wocker/core

Version:
54 lines (53 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Container = void 0; const cli_1 = require("@kearisp/cli"); const InstanceWrapper_1 = require("./InstanceWrapper"); const ModuleWrapper_1 = require("./ModuleWrapper"); const env_1 = require("../env"); class Container { constructor() { this.modules = new Map(); this.globalProviders = new Map(); const cliWrapper = new InstanceWrapper_1.InstanceWrapper(new ModuleWrapper_1.ModuleWrapper(this, null), cli_1.Cli); this.globalProviders.set(cli_1.Cli, cliWrapper); } addModule(type, module) { this.modules.set(type, module); } hasModule(type) { return this.modules.has(type); } getModule(type) { const module = this.modules.get(type); if (!module) { throw new Error("Module not found"); } return module; } addProvider(type, wrapper) { const token = typeof type !== "string" ? Reflect.getMetadata(env_1.INJECT_TOKEN_METADATA, type) || type : type; this.globalProviders.set(token, wrapper); } getProvider(type) { const token = typeof type !== "string" ? Reflect.getMetadata(env_1.INJECT_TOKEN_METADATA, type) || type : type; return this.globalProviders.get(token); } replace(type, provider) { const token = typeof type !== "string" ? Reflect.getMetadata(env_1.INJECT_TOKEN_METADATA, type) || type : type; const wrapper = this.globalProviders.get(token); if (wrapper) { wrapper.replace(provider); } this.modules.forEach((moduleRef) => { moduleRef.replace(token, provider); }); } } exports.Container = Container;