UNPKG

di-tory

Version:

Compose applications with dependency injection

60 lines (59 loc) 2.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const create_module_js_1 = require("./create-module.js"); const decorate_resolvers_js_1 = require("./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 ? (0, decorate_resolvers_js_1.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 (0, decorate_resolvers_js_1.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 ? (0, decorate_resolvers_js_1.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 (0, decorate_resolvers_js_1.createMethodResolvers)(implementation))); return self; }, init(initializer) { state.initializers = initializer; return self; }, create(params = {}) { return (0, create_module_js_1.createModule)(privateResolvers, publicResolvers, state.initializers, params); }, }; buildersState.set(self, state); // eslint-disable-next-line @typescript-eslint/no-explicit-any return self; }; exports.default = Module;