UNPKG

ts-ioc-container

Version:
34 lines (33 loc) 1.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveArgs = exports.toInjectFn = exports.inject = void 0; exports.isInjectBuilder = isInjectBuilder; const metadata_1 = require("../metadata"); const utils_1 = require("../utils"); const HookContext_1 = require("../hooks/HookContext"); const inject = (fn) => (target, propertyKey, parameterIndex) => { (0, metadata_1.setParameterMetadata)((0, HookContext_1.hookMetaKey)(propertyKey), (0, exports.toInjectFn)(fn))(utils_1.Is.instance(target) ? target.constructor : target, propertyKey, parameterIndex); }; exports.inject = inject; function isInjectBuilder(fn) { return 'resolve' in fn && typeof fn['resolve'] === 'function'; } const toInjectFn = (target) => { if (typeof target === 'object' && isInjectBuilder(target)) { return (s) => target.resolve(s); } if (utils_1.Is.constructor(target)) { return (scope) => scope.resolveClass(target); } if (utils_1.Is.dependencyKey(target)) { return (scope) => scope.resolveOne(target); } return target; }; exports.toInjectFn = toInjectFn; const resolveArgs = (Target, methodName) => { const argsFns = getInjectFns(Target, methodName); return (scope, ...deps) => (0, utils_1.fillEmptyIndexes)(argsFns, deps.map(utils_1.constant)).map((fn) => fn(scope)); }; exports.resolveArgs = resolveArgs; const getInjectFns = (Target, methodName) => (0, metadata_1.getParameterMetadata)((0, HookContext_1.hookMetaKey)(methodName), Target);