@difizen/mana-syringe
Version:
42 lines (41 loc) • 1.42 kB
JavaScript
;
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;
};