UNPKG

ts-ioc-container

Version:
22 lines (21 loc) 1.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveArgs = exports.toInjectFn = exports.inject = void 0; 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))((0, utils_1.isInstance)(target) ? target.constructor : target, propertyKey, parameterIndex); }; exports.inject = inject; function isInjectBuilder(fn) { return 'resolve' in fn && typeof fn['resolve'] === 'function'; } const toInjectFn = (fn) => isInjectBuilder(fn) ? (scope) => fn.resolve(scope) : fn; 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);