UNPKG

di-tory

Version:

Compose applications with dependency injection

58 lines (57 loc) 2.33 kB
import { createModule } from './create-module.js'; import { createMethodResolvers, decorateResolvers, } from './decorate-resolvers.js'; const buildersState = new WeakMap(); const Module = () => { const privateResolvers = {}; const publicResolvers = {}; const state = { privateResolvers, publicResolvers, initializers: null, }; const self = { private(resolvers, scope) { if (state.initializers != null) { throw new Error('Cannot extend initialized module'); } Object.defineProperties(privateResolvers, Object.getOwnPropertyDescriptors(scope != null ? decorateResolvers(resolvers, scope) : resolvers)); return self; }, privateImpl(implementation) { if (state.initializers != null) { throw new Error('Cannot extend initialized module'); } Object.defineProperties(privateResolvers, Object.getOwnPropertyDescriptors( // eslint-disable-next-line @typescript-eslint/no-explicit-any createMethodResolvers(implementation))); return self; }, public(resolvers, scope) { if (state.initializers != null) { throw new Error('Cannot extend initialized module'); } Object.defineProperties(publicResolvers, Object.getOwnPropertyDescriptors(scope != null ? decorateResolvers(resolvers, scope) : resolvers)); return self; }, publicImpl(implementation) { if (state.initializers != null) { throw new Error('Cannot extend initialized module'); } Object.defineProperties(publicResolvers, Object.getOwnPropertyDescriptors( // eslint-disable-next-line @typescript-eslint/no-explicit-any createMethodResolvers(implementation))); return self; }, init(initializer) { state.initializers = initializer; return self; }, create(params = {}) { return createModule(privateResolvers, publicResolvers, state.initializers, params); }, }; buildersState.set(self, state); // eslint-disable-next-line @typescript-eslint/no-explicit-any return self; }; export default Module;