tsioc
Version:
tsioc is AOP, Ioc container, via typescript decorator
298 lines (296 loc) • 10.2 kB
JavaScript
;
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