@wocker/core
Version:
Core of the Wocker
54 lines (53 loc) • 1.81 kB
JavaScript
;
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;