UNPKG

tsioc

Version:

tsioc is AOP, Ioc container, via typescript decorator

136 lines (134 loc) 5.72 kB
"use strict"; 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