import {AbstractFactory} from './AbstractFactory' import {DependencyKey, DependencyRequirement, PropertyDependency} from '../types' import {Collection} from '../../util' /** * A factory whose token is produced by calling a function. * * @example * ```typescript * let i = 0 * const fact = new ClosureFactory('someName', () => { * i += 1 * return i * 2 * }) * * fact.produce([], []) // => 2 * fact.produce([], []) // => 4 * ``` */ export class ClosureFactory extends AbstractFactory { constructor( protected readonly name: DependencyKey, protected readonly token: () => T, ) { super(token) } produce(): any { return this.token() } match(something: unknown): boolean { return something === this.name } getDependencyKeys(): Collection { return new Collection() } getInjectedProperties(): Collection { return new Collection() } }