UNPKG

@chubbyts/chubbyts-dic-config

Version:

Dependency injection container creation by config, inspired by laminas-config.

62 lines (61 loc) 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createContainerByConfigFactory = void 0; const container_1 = require("@chubbyts/chubbyts-dic/dist/container"); const addServices = (concreteContainer, services) => { services.forEach((service, name) => { concreteContainer.set(name, () => { return service; }); }); }; const addFactories = (concreteContainer, factories) => { factories.forEach((factory, name) => { concreteContainer.set(name, (container) => { return factory(container, name); }); }); }; const addAliases = (concreteContainer, aliases) => { aliases.forEach((target, name) => { concreteContainer.set(name, (container) => { return container.get(target); }); }); }; const addDelegators = (concreteContainer, delegators, services, aliases) => { delegators.forEach((delegatorList, name) => { if (services.has(name) || aliases.get(name)) { return; } delegatorList.forEach((delegator) => { concreteContainer.set(name, (container, previous) => { if (!previous) { throw new Error('Missing previous'); } return delegator(container, name, () => { return previous(container); }); }); }); }); }; const createContainerByConfigFactory = (config) => { return (concreteContainer = (0, container_1.createContainer)()) => { concreteContainer.set('config', (0, container_1.createParameter)(config)); const dependencies = config.dependencies; if (undefined === dependencies) { return concreteContainer; } const services = dependencies.services || new Map(); const factories = dependencies.factories || new Map(); const aliases = dependencies.aliases || new Map(); const delegators = dependencies.delegators || new Map(); addServices(concreteContainer, services); addFactories(concreteContainer, factories); addAliases(concreteContainer, aliases); addDelegators(concreteContainer, delegators, services, aliases); return concreteContainer; }; }; exports.createContainerByConfigFactory = createContainerByConfigFactory;