UNPKG

@difizen/mana-syringe

Version:

42 lines (41 loc) 1.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AutoFactoryOption = exports.AutoFactoryMeta = void 0; exports.autoFactory = autoFactory; exports.toAutoFactory = void 0; var _core = require("../core"); var _decorator = require("../decorator"); var _sideOption = require("../side-option"); var AutoFactoryOption = exports.AutoFactoryOption = _core.Syringe.defineToken('AutoFactoryOption'); var AutoFactoryMeta = exports.AutoFactoryMeta = _core.Syringe.defineToken('AutoFactoryMeta', { multiple: false }); function autoFactory() { return function (target) { var AutoFactoryToken = Symbol(); Reflect.defineMetadata(AutoFactoryMeta, AutoFactoryToken, target); (0, _decorator.transient)()(target); (0, _sideOption.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); }; } var toAutoFactory = exports.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; };