UNPKG

di-tory

Version:

Compose applications with dependency injection

31 lines (30 loc) 1.26 kB
import { propertyKeys } from './objects.js'; import Scope from './scope.js'; export const decorateResolver = (resolver, scope) => { const newResolver = (injection, params) => resolver(injection, params); newResolver.scope = scope; Object.defineProperty(newResolver, 'name', { value: `${scope}::${resolver.name}`, }); return newResolver; }; export const decorateResolvers = (resolvers, scope) => { const newResolvers = {}; for (const key of propertyKeys(resolvers)) { newResolvers[key] = decorateResolver(resolvers[key], scope); } return newResolvers; }; const createMethodResolver = (method) => (self) => (...args) => method(self, ...args); export const createMethodResolvers = (implementation) => { const newImplementation = {}; for (const key of 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.module}`; } return newImplementation; };