UNPKG

ts-ioc-container

Version:
49 lines (48 loc) 1.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Provider = void 0; const utils_1 = require("../utils"); const ProviderPipe_1 = require("./ProviderPipe"); class Provider { resolveDependency; static fromClass(Target) { return new Provider((container, options) => container.resolveClass(Target, options)); } static fromValue(value) { return new Provider(() => value); } static fromKey(key) { return new Provider((c) => c.resolveOne(key)); } argsFn = () => []; checkAccess = () => true; isLazy = false; constructor(resolveDependency) { this.resolveDependency = resolveDependency; } pipe(...mappers) { const fns = mappers.map((m) => ((0, ProviderPipe_1.isProviderPipe)(m) ? m.mapProvider.bind(m) : m)); return (0, utils_1.pipe)(...fns)(this); } resolve(container, { args = [], lazy } = {}) { return (0, utils_1.toLazyIf)(() => this.resolveDependency(container, { args: [...this.argsFn(container, ...args), ...args], }), lazy ?? this.isLazy); } setAccessPredicate(predicate) { this.checkAccess = predicate; return this; } lazy() { this.isLazy = true; return this; } setArgs(argsFn) { this.argsFn = argsFn; return this; } hasAccess(options) { return this.checkAccess(options); } } exports.Provider = Provider;