UNPKG

@difizen/mana-syringe

Version:

34 lines 1.13 kB
import { Syringe } from "../core"; import { transient } from "../decorator"; import { registerSideOption } from "../side-option"; export var AutoFactoryOption = Syringe.defineToken('AutoFactoryOption'); export var AutoFactoryMeta = Syringe.defineToken('AutoFactoryMeta', { multiple: false }); export function autoFactory() { return function (target) { var AutoFactoryToken = Symbol(); Reflect.defineMetadata(AutoFactoryMeta, AutoFactoryToken, target); transient()(target); registerSideOption({ token: AutoFactoryToken, useFactory: function useFactory(ctx) { return function (option) { var child = ctx.container.createChild(); child.register({ token: AutoFactoryOption, useValue: option }); return child.get(target); }; } }, target); }; } export var toAutoFactory = function toAutoFactory(target) { var factoryToken = Reflect.getOwnMetadata(AutoFactoryMeta, target); if (!factoryToken) { throw new Error("Cannot find factory token for ".concat(target.constructor.name)); } return factoryToken; };