UNPKG

di-tory

Version:

Compose applications with dependency injection

37 lines (36 loc) 1.63 kB
"use strict"; 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;