UNPKG

tsioc

Version:

tsioc is AOP, Ioc container, via typescript decorator

298 lines (296 loc) 10.2 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var index_1 = require("../../utils/index"); var index_2 = require("../decorators/index"); /** * provider, to dynamic resovle instance of params in run time. * * @export * @class Provider */ var Provider = /** @class */ (function () { function Provider(type, value) { this.type = type; this.value = value; } Provider_1 = Provider; /** * resolve provider value. * * @template T * @param {IContainer} container * @param {Providers[]} providers * @returns {T} * @memberof Provider */ Provider.prototype.resolve = function (container) { var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } if (index_1.isUndefined(this.value)) { return container.has(this.type) ? container.resolve.apply(container, [this.type].concat(providers)) : null; } else { return this.value; // isFunction(this.value) ? this.value(container) : this.value; } }; /** * create provider. * * @static * @param {Token<any>} type * @param {(any)} value * @returns Provider * @memberof Provider */ Provider.create = function (type, value) { return new Provider_1(type, value); }; /** * create extends provider. * * @static * @param {Token<any>} token * @param {(any)} value * @param {Express2<any, ExtendsProvider, void>} [extendsTarget] * @returns {ExtendsProvider} * @memberof Provider */ Provider.createExtends = function (token, value, extendsTarget) { return new ExtendsProvider(token, value, extendsTarget); }; /** * create custom provider. * * @static * @param {Token<any>} [type] * @param {ToInstance<any>} [toInstance] * @param {*} [value] * @returns {CustomProvider} * @memberof Provider */ Provider.createCustom = function (type, toInstance, value) { return new CustomProvider(type, toInstance, value); }; /** * create invoked provider. * * @static * @param {Token<any>} token * @param {string} method * @param {(any)} [value] * @returns {InvokeProvider} * @memberof Provider */ Provider.createInvoke = function (token, method, value) { return new InvokeProvider(token, method, value); }; /** * create param provider. * * @static * @param {Token<any>} token * @param {(any)} value * @param {number} [index] * @param {string} [method] * @returns {ParamProvider} * @memberof Provider */ Provider.createParam = function (token, value, index, method) { return new ParamProvider(token, value, index, method); }; /** * create async param provider. * * @static * @param {(string | string[])} files * @param {Token<any>} token * @param {number} [index] * @param {string} [method] * @param {(any)} [value] * @returns {AsyncParamProvider} * @memberof Provider */ Provider.createAsyncParam = function (files, token, index, method, value) { return new AsyncParamProvider(files, token, index, method, value); }; Provider = Provider_1 = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, Object]) ], Provider); return Provider; var Provider_1; }()); exports.Provider = Provider; var CustomProvider = /** @class */ (function (_super) { __extends(CustomProvider, _super); function CustomProvider(type, toInstance, value) { var _this = _super.call(this, type, value) || this; _this.toInstance = toInstance; return _this; } CustomProvider.prototype.resolve = function (container) { var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } if (this.toInstance) { return this.toInstance.apply(this, [container].concat(providers)); } return _super.prototype.resolve.apply(this, [container].concat(providers)); }; CustomProvider = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, Function, Object]) ], CustomProvider); return CustomProvider; }(Provider)); exports.CustomProvider = CustomProvider; /** * InvokeProvider * * @export * @class InvokeProvider * @extends {Provider} */ var InvokeProvider = /** @class */ (function (_super) { __extends(InvokeProvider, _super); function InvokeProvider(type, method, value) { var _this = _super.call(this, type, value) || this; _this.method = method; return _this; } InvokeProvider.prototype.resolve = function (container) { var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } if (this.method) { return container.syncInvoke.apply(container, [this.type, this.method].concat(providers)); } return _super.prototype.resolve.apply(this, [container].concat(providers)); }; InvokeProvider = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, String, Object]) ], InvokeProvider); return InvokeProvider; }(Provider)); exports.InvokeProvider = InvokeProvider; /** * param provider. * * @export * @interface ParamProvider */ var ParamProvider = /** @class */ (function (_super) { __extends(ParamProvider, _super); function ParamProvider(token, value, index, method) { var _this = _super.call(this, token, method, value) || this; _this.index = index; return _this; } ParamProvider.prototype.resolve = function (container) { var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } return _super.prototype.resolve.apply(this, [container].concat(providers)); }; ParamProvider = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, Object, Number, String]) ], ParamProvider); return ParamProvider; }(InvokeProvider)); exports.ParamProvider = ParamProvider; /** * Provider enable exntends target with provider in dynamic. * * @export * @class ExtendsProvider * @extends {Provider} */ var ExtendsProvider = /** @class */ (function (_super) { __extends(ExtendsProvider, _super); function ExtendsProvider(token, value, extendsTarget) { var _this = _super.call(this, token, value) || this; _this.extendsTarget = extendsTarget; return _this; } ExtendsProvider.prototype.resolve = function (container) { var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } return _super.prototype.resolve.apply(this, [container].concat(providers)); }; ExtendsProvider.prototype.extends = function (target) { if (index_1.isObject(target) && index_1.isFunction(this.extendsTarget)) { this.extendsTarget(target, this); } }; ExtendsProvider = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, Object, Function]) ], ExtendsProvider); return ExtendsProvider; }(Provider)); exports.ExtendsProvider = ExtendsProvider; /** * async param provider. * async load source file and execution as param value. * * @export * @interface AsyncParamProvider * @extends {ParamProvider} */ var AsyncParamProvider = /** @class */ (function (_super) { __extends(AsyncParamProvider, _super); function AsyncParamProvider(files, token, index, method, value) { var _this = _super.call(this, token, value, index, method) || this; _this.files = files; return _this; } AsyncParamProvider.prototype.resolve = function (container) { var _this = this; var providers = []; for (var _i = 1; _i < arguments.length; _i++) { providers[_i - 1] = arguments[_i]; } var buider = container.get(index_1.symbols.IContainerBuilder); return buider.loadModule(container, { files: this.files }) .then(function () { return _super.prototype.resolve.apply(_this, [container].concat(providers)); }); }; AsyncParamProvider = __decorate([ index_2.NonePointcut(), __metadata("design:paramtypes", [Object, Object, Number, String, Object]) ], AsyncParamProvider); return AsyncParamProvider; }(ParamProvider)); exports.AsyncParamProvider = AsyncParamProvider; //# sourceMappingURL=../../sourcemaps/core/providers/Provider.js.map