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.

51 lines (50 loc) 1.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toSingleAlias = exports.SingleAliasToken = void 0; const InjectionToken_1 = require("./InjectionToken"); class SingleAliasToken extends InjectionToken_1.InjectionToken { token; _getArgsFn; _isLazy; constructor(token, { getArgsFn = () => [], isLazy = false } = {}) { super(); this.token = token; this._getArgsFn = getArgsFn; this._isLazy = isLazy; } select(fn) { return (s) => fn(this.resolve(s)); } resolve(s, { args = [], lazy } = {}) { return s.resolveOneByAlias(this.token, { args: this._getArgsFn(s, { args }), lazy: this._isLazy || lazy, }); } bindTo(r) { r.bindToAlias(this.token); } args(...newArgs) { const parentFn = this._getArgsFn; return new SingleAliasToken(this.token, { getArgsFn: (s, opts) => [...parentFn(s, opts), ...newArgs], isLazy: this._isLazy, }); } argsFn(fn) { const parentFn = this._getArgsFn; return new SingleAliasToken(this.token, { getArgsFn: (s, opts) => [...parentFn(s, opts), ...fn(s)], isLazy: this._isLazy, }); } lazy() { return new SingleAliasToken(this.token, { getArgsFn: this._getArgsFn, isLazy: true, }); } } exports.SingleAliasToken = SingleAliasToken; const toSingleAlias = (token) => new SingleAliasToken(token); exports.toSingleAlias = toSingleAlias;