UNPKG

ts-ioc-container

Version:

Fast, lightweight TypeScript dependency injection container with a clean API, scoped lifecycles, decorators, tokens, hooks, lazy injection, customizable providers, and no global container objects.

39 lines (38 loc) 1.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHookContextFactory = exports.createHookContext = exports.HookContext = void 0; const proxy_1 = require("../utils/proxy"); const MetadataInjector_1 = require("../injector/MetadataInjector"); class HookContext { scope; methodName; instance; initialArgs = []; constructor(instance, scope, methodName) { this.scope = scope; this.methodName = methodName; this.instance = (0, proxy_1.isProxy)(instance) ? (0, proxy_1.getProxyTarget)(instance) : instance; } resolveArgs(...args) { return (0, MetadataInjector_1.resolveArgs)(this.instance.constructor, this.methodName)(this.scope, { args: [...this.initialArgs, ...args], }); } invokeMethod({ args = this.resolveArgs() } = {}) { // @ts-ignore return this.instance[this.methodName](...args); } setProperty(fn) { // @ts-ignore this.instance[this.methodName] = fn.resolve(this.scope); } setInitialArgs(...args) { this.initialArgs = args; return this; } } exports.HookContext = HookContext; const createHookContext = (Target, scope, methodName = 'constructor') => new HookContext(Target, scope, methodName); exports.createHookContext = createHookContext; const createHookContextFactory = ({ args = [] } = {}) => (Target, scope, methodName) => (0, exports.createHookContext)(Target, scope, methodName).setInitialArgs(...args); exports.createHookContextFactory = createHookContextFactory;