di-tory
Version:
Compose applications with dependency injection
60 lines (59 loc) • 2.54 kB
JavaScript
;
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;