UNPKG

@furystack/inject

Version:
43 lines 1.68 kB
import { hasInjectableOptions } from './injectable.js'; import { getInjectorReference } from './with-injector-reference.js'; export const InjectableDependencyList = Symbol('InjectableDependencyList'); export const getDependencyList = (ctor) => { const existing = ctor[InjectableDependencyList]; if (existing && existing instanceof Set) { return existing; } const newSet = new Set(); Object.assign(ctor, { [InjectableDependencyList]: newSet }); return newSet; }; const addDependency = (ctor, dependency) => { const list = getDependencyList(ctor); list.add(dependency); }; export const Injected = (injectable) => (target, propertyKey) => { const hasMeta = hasInjectableOptions(injectable); // The provided injectable is a constructor if (hasMeta) { addDependency(target.constructor, injectable); Object.defineProperty(target.constructor.prototype, propertyKey, { set() { throw new Error(`Injected property '${target.constructor.name}.${propertyKey.toString()}' is read-only`); }, get() { return getInjectorReference(this).getInstance(injectable); }, }); } else { // The provided injectable is a getter function Object.defineProperty(target.constructor.prototype, propertyKey, { set() { throw new Error(`Injected property '${target.constructor.name}.${propertyKey.toString()}' is read-only`); }, get() { return injectable.call(this, getInjectorReference(this)); }, }); } }; //# sourceMappingURL=injected.js.map