UNPKG

ts-ioc-container

Version:
50 lines (49 loc) 1.47 kB
import { Is } from '../utils'; import { isProviderPipe, registerPipe } from './ProviderPipe'; export const args = (...extraArgs) => registerPipe((p) => p.setArgs(() => extraArgs)); export const argsFn = (fn) => registerPipe((p) => p.setArgs(fn)); export const resolveByArgs = (s, ...deps) => deps.map((d) => { if (Is.injectBuilder(d)) { return d.resolve(s); } if (Is.constructor(d)) { return s.resolveClass(d); } return d; }); export const scopeAccess = (predicate) => registerPipe((p) => p.setAccessPredicate(predicate)); export const lazy = () => registerPipe((p) => p.lazy()); export class ProviderDecorator { decorated; constructor(decorated) { this.decorated = decorated; } setAccessPredicate(predicate) { this.decorated.setAccessPredicate(predicate); return this; } hasAccess(options) { return this.decorated.hasAccess(options); } resolve(container, options) { return this.decorated.resolve(container, options); } pipe(...mappers) { const fns = mappers.map((m) => { if (isProviderPipe(m)) { return m.mapProvider.bind(m); } return m; }); this.decorated = this.decorated.pipe(...fns); return this; } setArgs(argsFn) { this.decorated.setArgs(argsFn); return this; } lazy() { this.decorated.lazy(); return this; } }