ts-ioc-container
Version:
Typescript IoC container
22 lines (21 loc) • 1.19 kB
JavaScript
;
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);