tsioc
Version:
tsioc is AOP, Ioc container, via typescript decorator
136 lines (134 loc) • 5.72 kB
JavaScript
;
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("./providers/index");
var index_2 = require("../utils/index");
var index_3 = require("./decorators/index");
var ProviderMatcher = /** @class */ (function () {
function ProviderMatcher(container) {
this.container = container;
}
ProviderMatcher.prototype.toProviderMap = function () {
var _this = this;
var providers = [];
for (var _i = 0; _i < arguments.length; _i++) {
providers[_i] = arguments[_i];
}
if (providers.length === 1 && index_1.isProviderMap(providers[0])) {
return providers[0];
}
var map = this.container.resolve(index_1.ProviderMap);
providers.forEach(function (p, index) {
if (index_2.isUndefined(p) || index_2.isNull(p)) {
return;
}
if (index_1.isProviderMap(p)) {
map.copy(p);
}
else if (p instanceof index_1.Provider) {
if (p instanceof index_1.ParamProvider) {
if (!p.type && index_2.isNumber(p.index)) {
map.add(p.index, function () {
var providers = [];
for (var _i = 0; _i < arguments.length; _i++) {
providers[_i] = arguments[_i];
}
return p.resolve.apply(p, [_this.container].concat(providers));
});
}
else {
map.add(p.type, function () {
var providers = [];
for (var _i = 0; _i < arguments.length; _i++) {
providers[_i] = arguments[_i];
}
return p.resolve.apply(p, [_this.container].concat(providers));
});
}
}
else {
map.add(p.type, function () {
var providers = [];
for (var _i = 0; _i < arguments.length; _i++) {
providers[_i] = arguments[_i];
}
return p.resolve.apply(p, [_this.container].concat(providers));
});
}
}
else {
if (index_2.isBaseObject(p)) {
Object.keys(p).forEach(function (name) {
if (!index_2.isUndefined(p[name])) {
if (index_2.isClass(p[name])) {
map.add(name, p[name]);
}
else if (index_2.isFunction(p[name]) || index_2.isString(p[name])) {
map.add(name, function () { return p[name]; });
}
else {
map.add(name, p[name]);
}
}
});
}
else if (index_2.isFunction(p)) {
map.add(name, function () { return p; });
}
else {
map.add(index, p);
}
}
});
return map;
};
ProviderMatcher.prototype.matchProviders = function (params) {
var providers = [];
for (var _i = 1; _i < arguments.length; _i++) {
providers[_i - 1] = arguments[_i];
}
return this.match(params, this.toProviderMap.apply(this, providers));
};
ProviderMatcher.prototype.match = function (params, providers) {
var _this = this;
var map = this.container.resolve(index_1.ProviderMap);
if (!params.length) {
return map;
}
params.forEach(function (param, index) {
if (!param.name) {
return;
}
if (providers.has(param.name)) {
map.add(param.name, providers.get(param.name));
}
else if (index_2.isToken(param.type)) {
if (providers.has(param.type)) {
map.add(param.name, providers.get(param.type));
}
else if (_this.container.has(param.type)) {
map.add(param.name, param.type);
}
}
else if (providers.has(index)) {
map.add(param.name, providers.get(index));
}
});
return map;
};
ProviderMatcher = __decorate([
index_3.NonePointcut(),
__metadata("design:paramtypes", [Object])
], ProviderMatcher);
return ProviderMatcher;
}());
exports.ProviderMatcher = ProviderMatcher;
//# sourceMappingURL=../sourcemaps/core/ProviderMatcher.js.map