di-tory
Version:
Compose applications with dependency injection
37 lines (36 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createMethodResolvers = exports.decorateResolvers = exports.decorateResolver = void 0;
const objects_js_1 = require("./objects.js");
const scope_js_1 = require("./scope.js");
const decorateResolver = (resolver, scope) => {
const newResolver = (injection, params) => resolver(injection, params);
newResolver.scope = scope;
Object.defineProperty(newResolver, 'name', {
value: `${scope}::${resolver.name}`,
});
return newResolver;
};
exports.decorateResolver = decorateResolver;
const decorateResolvers = (resolvers, scope) => {
const newResolvers = {};
for (const key of (0, objects_js_1.propertyKeys)(resolvers)) {
newResolvers[key] = (0, exports.decorateResolver)(resolvers[key], scope);
}
return newResolvers;
};
exports.decorateResolvers = decorateResolvers;
const createMethodResolver = (method) => (self) => (...args) => method(self, ...args);
const createMethodResolvers = (implementation) => {
const newImplementation = {};
for (const key of (0, objects_js_1.propertyKeys)(implementation)) {
const method = implementation[key];
if (typeof method !== 'function') {
throw new Error(`Expected ${String(key)} to be a function, but got ${typeof method}`);
}
newImplementation[key] = createMethodResolver(method); // eslint-disable-line @typescript-eslint/no-explicit-any
newImplementation[key].scope = `!${scope_js_1.default.module}`;
}
return newImplementation;
};
exports.createMethodResolvers = createMethodResolvers;