UNPKG

@chubbyts/chubbyts-dic

Version:

Dependency injection container (DIC), PSR-11 inspired.

54 lines (53 loc) 1.64 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createParameter = exports.createContainer = void 0; const createWrapperFactory = (newFactory, existingFactory) => { return (container) => newFactory(container, existingFactory); }; const createContainer = () => { const storedFactories = new Map(); const storedServices = new Map(); const sets = (factories) => { factories.forEach((factory, id) => { set(id, factory); }); }; const set = (id, factory) => { storedServices.delete(id); storedFactories.set(id, createWrapperFactory(factory, storedFactories.get(id))); }; const get = (id) => { if (!storedServices.has(id)) { storedServices.set(id, create(id)); } return storedServices.get(id); }; const has = (id) => storedFactories.has(id); const container = { sets, set, get, has, }; const create = (id) => { const factoryById = storedFactories.get(id); if (!factoryById) { throw new Error(`There is no service with id "${id}"`); } try { return factoryById(container); } catch (e) { const error = new Error(`Could not create service with id "${id}"`); // eslint-disable-next-line functional/immutable-data error.cause = e; throw error; } }; return container; }; exports.createContainer = createContainer; const createParameter = (value) => { return () => value; }; exports.createParameter = createParameter;