ts-ioc-container
Version:
Typescript IoC container
43 lines (42 loc) • 1.42 kB
JavaScript
;
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.resolveByClass(Target, options));
}
static fromValue(value) {
return new Provider(() => value);
}
static fromKey(key) {
return new Provider((c) => c.resolveOne(key));
}
argsFn = () => [];
checkAccess = () => true;
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: isLazy }) {
const resolveDependency = () => this.resolveDependency(container, { args: [...this.argsFn(container, ...args), ...args] });
return isLazy ? (0, utils_1.lazyProxy)(resolveDependency) : resolveDependency();
}
setAccessPredicate(predicate) {
this.checkAccess = predicate;
return this;
}
setArgs(argsFn) {
this.argsFn = argsFn;
return this;
}
hasAccess(options) {
return this.checkAccess(options);
}
}
exports.Provider = Provider;