@kaokei/di 1.0.25 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +46 -15
  2. package/dist/index.cjs.js +230 -329
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.cjs.min.js +2 -2
  5. package/dist/index.cjs.min.js.map +1 -1
  6. package/dist/index.cjs.runtime.js +218 -310
  7. package/dist/index.cjs.runtime.js.map +1 -1
  8. package/dist/index.cjs.runtime.min.js +2 -2
  9. package/dist/index.cjs.runtime.min.js.map +1 -1
  10. package/dist/index.esm.js +230 -327
  11. package/dist/index.esm.js.map +1 -1
  12. package/dist/index.esm.min.js +3 -3
  13. package/dist/index.esm.min.js.map +1 -1
  14. package/dist/index.esm.runtime.js +218 -299
  15. package/dist/index.esm.runtime.js.map +1 -1
  16. package/dist/index.esm.runtime.min.js +3 -3
  17. package/dist/index.esm.runtime.min.js.map +1 -1
  18. package/dist/index.iife.js +230 -329
  19. package/dist/index.iife.js.map +1 -1
  20. package/dist/index.iife.min.js +3 -3
  21. package/dist/index.iife.min.js.map +1 -1
  22. package/dist/src/Injector.d.ts +142 -131
  23. package/dist/src/Injector.d.ts.map +1 -1
  24. package/dist/src/constants.d.ts +16 -17
  25. package/dist/src/constants.d.ts.map +1 -1
  26. package/dist/src/decorator.d.ts +41 -41
  27. package/dist/src/decorator.d.ts.map +1 -1
  28. package/dist/src/errors/CircularDependencyError.d.ts +5 -5
  29. package/dist/src/errors/CircularDependencyError.d.ts.map +1 -1
  30. package/dist/src/errors/InjectFailedError.d.ts +5 -5
  31. package/dist/src/errors/InjectFailedError.d.ts.map +1 -1
  32. package/dist/src/errors/ProviderNotValidError.d.ts +5 -5
  33. package/dist/src/errors/ProviderNotValidError.d.ts.map +1 -1
  34. package/dist/src/errors/TokenNotFoundError.d.ts +5 -5
  35. package/dist/src/errors/TokenNotFoundError.d.ts.map +1 -1
  36. package/dist/src/errors/index.d.ts +4 -4
  37. package/dist/src/errors/index.d.ts.map +1 -1
  38. package/dist/src/forwardRef.d.ts +6 -6
  39. package/dist/src/forwardRef.d.ts.map +1 -1
  40. package/dist/src/index.d.ts +7 -7
  41. package/dist/src/index.d.ts.map +1 -1
  42. package/dist/src/utils.d.ts +3 -2
  43. package/dist/src/utils.d.ts.map +1 -1
  44. package/package.json +38 -37
  45. package/CHANGELOG.md +0 -128
  46. package/dist/src/types/index.d.ts +0 -2
  47. package/dist/src/types/index.d.ts.map +0 -1
@@ -1,58 +1,38 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
-
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
3
2
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
4
-
5
3
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
6
-
7
4
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
8
-
9
5
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
10
-
11
6
  function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
12
-
13
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
14
-
15
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
-
17
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
-
19
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
20
-
21
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
22
-
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
11
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
23
12
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
24
-
25
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
26
-
13
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
27
14
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
28
-
29
15
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
30
-
31
16
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
32
-
33
17
  function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
34
-
35
- function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
36
-
18
+ function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
37
19
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
38
-
39
- function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
40
-
41
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
42
-
43
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
44
-
45
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
46
-
20
+ function _isNativeFunction(fn) { try { return Function.toString.call(fn).indexOf("[native code]") !== -1; } catch (e) { return typeof fn === "function"; } }
21
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
22
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
23
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
24
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
25
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
47
26
  /**
48
27
  * @kaokei/di
49
28
  * Tiny di library depend on typescript and reflect-metadata
50
29
  *
51
- * @version 1.0.25
30
+ * @version 2.0.0
52
31
  * @author kaokei
53
32
  * @license MIT
54
33
  * @link https://github.com/kaokei/di
55
34
  */
35
+
56
36
  var DI = function (exports) {
57
37
  'use strict';
58
38
 
@@ -61,8 +41,6 @@ var DI = function (exports) {
61
41
  DESIGN_PROPERTY_TYPE: 'design:type',
62
42
  // ts自带的类的构造函数的参数的类型信息的key
63
43
  DESIGN_PARAM_TYPES: 'design:paramtypes',
64
- // 记录构造函数原始的类型数据的key,其实就是转存了DESIGN_PARAM_TYPES对应的数据
65
- SERVICE_PARAM_TYPES: 'service:paramtypes',
66
44
  // 记录构造函数参数装饰器对应的数据的key
67
45
  SERVICE_INJECTED_PARAMS: 'service:injected:params',
68
46
  // 记录实例属性装饰器对应的数据的key
@@ -83,36 +61,35 @@ var DI = function (exports) {
83
61
  CONSTRUCTED: Symbol('constructed'),
84
62
  MERGED: Symbol('merged')
85
63
  };
86
- /**
87
- * 这里记录不同的装饰器的参数的含义
88
- *
89
- * class decorator:
90
- * 只有一个参数:构造函数
91
- * property decorator:
92
- * 静态属性:构造函数, 属性名
93
- * 实例属性:原型, 属性名
94
- * parameter decorator:
95
- * 构造函数参数:构造函数, undefined, 0
96
- * 普通函数参数:原型, 方法名, 0
97
- * 静态函数参数:构造函数, 方法名, 0
98
- * method decorator:
99
- * 静态方法:构造函数, 方法名, 属性描述符
100
- * 实例方法:原型, 方法名, 属性描述符
101
- * accessor decorator:
102
- * 静态访问器:构造函数, 方法名, 属性描述符
103
- * 实例访问器:原型, 方法名, 属性描述符
104
- */
105
64
 
106
- /**
107
- * 创建装饰器的高阶函数
108
- * 装饰器的通用逻辑就是通过Reflect记录到全局的Map中
109
- * 所以可以抽象出一个通用逻辑,这里需要注意对Inject装饰器有特殊判断
110
- *
111
- * @param {(string | symbol)} decoratorKey 代表某个装饰器的名称
112
- * @param {*} [defaultValue] 该装饰器函数的默认参数
113
- * @return {*} 一个装饰器
65
+ /**
66
+ * 这里记录不同的装饰器的参数的含义
67
+ *
68
+ * class decorator:
69
+ * 只有一个参数:构造函数
70
+ * property decorator:
71
+ * 静态属性:构造函数, 属性名
72
+ * 实例属性:原型, 属性名
73
+ * parameter decorator:
74
+ * 构造函数参数:构造函数, undefined, 0
75
+ * 普通函数参数:原型, 方法名, 0
76
+ * 静态函数参数:构造函数, 方法名, 0
77
+ * method decorator:
78
+ * 静态方法:构造函数, 方法名, 属性描述符
79
+ * 实例方法:原型, 方法名, 属性描述符
80
+ * accessor decorator:
81
+ * 静态访问器:构造函数, 方法名, 属性描述符
82
+ * 实例访问器:原型, 方法名, 属性描述符
83
+ */
84
+ /**
85
+ * 创建装饰器的高阶函数
86
+ * 装饰器的通用逻辑就是通过Reflect记录到全局的Map中
87
+ * 所以可以抽象出一个通用逻辑,这里需要注意对Inject装饰器有特殊判断
88
+ *
89
+ * @param {(string | symbol)} decoratorKey 代表某个装饰器的名称
90
+ * @param {*} [defaultValue] 该装饰器函数的默认参数
91
+ * @return {*} 一个装饰器
114
92
  */
115
-
116
93
  function createDecorator(decoratorKey, defaultValue) {
117
94
  // 因为装饰器本身作为一个函数是有参数的,此处的decoratorValue就是实际使用装饰器的实参
118
95
  return function (decoratorValue) {
@@ -122,22 +99,22 @@ var DI = function (exports) {
122
99
  // 如果target是原型,targetKey是属姓名,index是undefined
123
100
  return function (target, targetKey, index) {
124
101
  // 如果index是number,那么代表是构造函数的参数的装饰器
125
- var isParameterDecorator = typeof index === 'number'; // 统一把装饰器数据绑定到构造函数上,后续获取数据比较方便
126
-
127
- var Ctor = isParameterDecorator ? target : target.constructor; // 如果是构造函数的参数装饰器,取参数位置下标,否则取实例属性的属性名
128
-
129
- var key = isParameterDecorator ? index : targetKey; // 区分构造函数的参数装饰器和实例属性的装饰器
102
+ var isParameterDecorator = typeof index === 'number';
103
+ // 统一把装饰器数据绑定到构造函数上,后续获取数据比较方便
104
+ var Ctor = isParameterDecorator ? target : target.constructor;
105
+ // 如果是构造函数的参数装饰器,取参数位置下标,否则取实例属性的属性名
106
+ var key = isParameterDecorator ? index : targetKey;
107
+ // 区分构造函数的参数装饰器和实例属性的装饰器
130
108
  // 分别记录到全局Map的不同位置,metadataKey不一样
131
-
132
- var metadataKey = isParameterDecorator ? DECORATOR_KEYS.SERVICE_INJECTED_PARAMS : DECORATOR_KEYS.SERVICE_INJECTED_PROPS; // 这里是一个大对象,对应的key是metadataKey
109
+ var metadataKey = isParameterDecorator ? DECORATOR_KEYS.SERVICE_INJECTED_PARAMS : DECORATOR_KEYS.SERVICE_INJECTED_PROPS;
110
+ // 这里是一个大对象,对应的key是metadataKey
133
111
  // 所以全局Map中有两个不同的metadataKey,以及对应的数据对象
134
112
  // 如果是构造函数参数装饰器,这个对象中的key是参数位置下标
135
113
  // 如果是实例属性装饰器,这个对象中的key是属性名
136
-
137
- var paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, Ctor) || {}; // 每个参数或者实例属性都可以有多个装饰器
114
+ var paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, Ctor) || {};
115
+ // 每个参数或者实例属性都可以有多个装饰器
138
116
  // 所以paramsOrPropertiesMetadata这个大对象的每个key对应的value都是一个数组
139
117
  // 该数组中的每一个元素是一个对象,保存着每一个装饰器的数据
140
-
141
118
  var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key] || [];
142
119
  var metadata = {
143
120
  // 装饰器的名称
@@ -146,7 +123,6 @@ var DI = function (exports) {
146
123
  // 很多装饰器具有默认值,可以不提供实参,而是使用默认值
147
124
  value: decoratorValue === void 0 ? defaultValue : decoratorValue
148
125
  };
149
-
150
126
  if (!isParameterDecorator) {
151
127
  if (decoratorKey === DECORATOR_KEYS.INJECT) {
152
128
  if (decoratorValue === void 0) {
@@ -155,125 +131,93 @@ var DI = function (exports) {
155
131
  metadata.value = Reflect.getMetadata(DECORATOR_KEYS.DESIGN_PROPERTY_TYPE, target, targetKey);
156
132
  }
157
133
  }
158
- } // 把当前装饰器的数据对象放到数组中
159
-
160
-
161
- paramOrPropertyMetadata.push(metadata); // 关联这个数组和对应的key
162
-
163
- paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata; // 再把整个大对象放到全局Map中
164
-
134
+ }
135
+ // 把当前装饰器的数据对象放到数组中
136
+ paramOrPropertyMetadata.push(metadata);
137
+ // 关联这个数组和对应的key
138
+ paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata;
139
+ // 再把整个大对象放到全局Map中
165
140
  Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, Ctor);
166
141
  };
167
142
  };
168
- } // 可以使用在类构造函数的参数中和类的实例属性中
169
-
170
-
171
- var Inject = createDecorator(DECORATOR_KEYS.INJECT); // 指定只在当前injector中寻找服务
172
-
173
- var Self = createDecorator(DECORATOR_KEYS.SELF, true); // 指定跳过当前injector寻找服务
174
-
175
- var Skip = createDecorator(DECORATOR_KEYS.SKIP_SELF, true); // 指定服务是可选的,找不到服务时返回undefined,否则抛出异常
143
+ }
144
+ // 可以使用在类构造函数的参数中和类的实例属性中
145
+ var Inject = createDecorator(DECORATOR_KEYS.INJECT);
146
+ // 指定只在当前injector中寻找服务
147
+ var Self = createDecorator(DECORATOR_KEYS.SELF, true);
148
+ // 指定跳过当前injector寻找服务
149
+ var Skip = createDecorator(DECORATOR_KEYS.SKIP_SELF, true);
150
+ // 指定服务是可选的,找不到服务时返回undefined,否则抛出异常
176
151
  // 其实应该说是默认情况下找不到服务时,会抛出异常,除非明确指定是optional的
177
-
178
152
  var Optional = createDecorator(DECORATOR_KEYS.OPTIONAL, true);
179
- /**
180
- * 表明服务可注入
181
- * 主要工作就是收集构造函数的参数类型信息
182
- *
183
- * @export
184
- * @return {*}
153
+ /**
154
+ * 表明服务可注入
155
+ * 主要工作就是收集构造函数的参数类型信息
156
+ *
157
+ * @export
158
+ * @return {*}
185
159
  */
186
-
187
160
  function Injectable() {
188
161
  return function (target) {
189
162
  // 标记这个类可以注入
190
- Reflect.defineMetadata(DECORATOR_KEYS.INJECTABLE, true, target); // 获取ts编译器默认的类型数据
191
- // 经过测试,如果是基本类型string、number、boolean,那么会变成相对应的构造函数String,Number,Boolean
192
- // 如果只是指定了interface类型,那么会变成Object构造函数
193
-
194
- var types = Reflect.getMetadata(DECORATOR_KEYS.DESIGN_PARAM_TYPES, target) || []; // 存储构造函数的类型信息
195
- // 这里只是转存了一下数据,并没有特殊逻辑
196
-
197
- Reflect.defineMetadata(DECORATOR_KEYS.SERVICE_PARAM_TYPES, types, target);
163
+ Reflect.defineMetadata(DECORATOR_KEYS.INJECTABLE, true, target);
198
164
  return target;
199
165
  };
200
166
  }
201
-
202
167
  function has(obj, key) {
203
168
  return obj && Object.prototype.hasOwnProperty.call(obj, key);
204
169
  }
205
-
206
170
  function merge(target, source) {
207
171
  for (var key in source) {
208
172
  if (has(source, key)) {
209
173
  target[key] = source[key];
210
174
  }
211
175
  }
212
-
213
176
  return target;
214
177
  }
215
-
178
+ function isInjectableToken(token) {
179
+ return typeof token === 'function' && Reflect.getMetadata(DECORATOR_KEYS.INJECTABLE, token);
180
+ }
216
181
  function forwardRef(fn) {
217
182
  fn.__forward_ref__ = forwardRef;
218
183
  return fn;
219
184
  }
220
-
221
185
  function isForwardRef(fn) {
222
186
  return typeof fn === 'function' && has(fn, '__forward_ref__') && fn.__forward_ref__ === forwardRef;
223
187
  }
224
-
225
188
  function resolveForwardRef(type) {
226
189
  return isForwardRef(type) ? type() : type;
227
190
  }
228
-
229
191
  var CircularDependencyError = /*#__PURE__*/function (_Error) {
230
192
  _inherits(CircularDependencyError, _Error);
231
-
232
193
  var _super = _createSuper(CircularDependencyError);
233
-
234
194
  function CircularDependencyError(provider, options) {
235
195
  var _this;
236
-
237
196
  _classCallCheck(this, CircularDependencyError);
238
-
239
197
  _this = _super.call(this);
240
-
241
198
  _defineProperty(_assertThisInitialized(_this), "name", 'CIRCULAR_DEPENDENCY_ERROR');
242
-
243
199
  _defineProperty(_assertThisInitialized(_this), "message", _this.name);
244
-
245
200
  var tokenArr = [provider.provide];
246
201
  var currentProvider = options === null || options === void 0 ? void 0 : options.provider;
247
-
248
202
  while (currentProvider && currentProvider.provide) {
249
203
  tokenArr.push(currentProvider.provide);
250
204
  currentProvider = currentProvider.parent;
251
205
  }
252
-
253
206
  var tokenListText = tokenArr.join(' <-- ');
254
207
  _this.message = "CIRCULAR DEPENDENCY DETECTED. PLEASE FIX IT MANUALLY. \n ".concat(tokenListText);
255
208
  return _this;
256
209
  }
257
-
258
- return CircularDependencyError;
210
+ return _createClass(CircularDependencyError);
259
211
  }( /*#__PURE__*/_wrapNativeSuper(Error));
260
-
261
212
  var InjectFailedError = /*#__PURE__*/function (_Error2) {
262
213
  _inherits(InjectFailedError, _Error2);
263
-
264
214
  var _super2 = _createSuper(InjectFailedError);
265
-
266
215
  function InjectFailedError(injectMeta, ClassName, key, paramType) {
267
216
  var _this2;
268
-
269
217
  _classCallCheck(this, InjectFailedError);
270
-
271
218
  _this2 = _super2.call(this);
272
-
273
219
  _defineProperty(_assertThisInitialized(_this2), "name", 'INJECT_FAILED_ERROR');
274
-
275
220
  _defineProperty(_assertThisInitialized(_this2), "message", _this2.name);
276
-
277
221
  if (paramType) {
278
222
  // 是构造函数的参数装饰器
279
223
  if (injectMeta && injectMeta.value === Object) {
@@ -289,178 +233,162 @@ var DI = function (exports) {
289
233
  _this2.message = "CAN NOT USE OBJECT AS INJECTION TOKEN. PROPERTY ".concat(key, " OF CLASS ").concat(ClassName, ".");
290
234
  }
291
235
  }
292
-
293
236
  return _this2;
294
237
  }
295
-
296
- return InjectFailedError;
238
+ return _createClass(InjectFailedError);
297
239
  }( /*#__PURE__*/_wrapNativeSuper(Error));
298
-
299
240
  var ProviderNotValidError = /*#__PURE__*/function (_Error3) {
300
241
  _inherits(ProviderNotValidError, _Error3);
301
-
302
242
  var _super3 = _createSuper(ProviderNotValidError);
303
-
304
243
  function ProviderNotValidError(provider) {
305
244
  var _this3;
306
-
307
245
  _classCallCheck(this, ProviderNotValidError);
308
-
309
246
  _this3 = _super3.call(this);
310
-
311
247
  _defineProperty(_assertThisInitialized(_this3), "name", 'PROVIDER_NOT_VALID_ERROR');
312
-
313
248
  _defineProperty(_assertThisInitialized(_this3), "message", _this3.name);
314
-
315
249
  _this3.message = "PROVIDER NOT VALID. ".concat(provider);
316
250
  return _this3;
317
251
  }
318
-
319
- return ProviderNotValidError;
252
+ return _createClass(ProviderNotValidError);
320
253
  }( /*#__PURE__*/_wrapNativeSuper(Error));
321
-
322
254
  var TokenNotFoundError = /*#__PURE__*/function (_Error4) {
323
255
  _inherits(TokenNotFoundError, _Error4);
324
-
325
256
  var _super4 = _createSuper(TokenNotFoundError);
326
-
327
257
  function TokenNotFoundError(token) {
328
258
  var _this4;
329
-
330
259
  _classCallCheck(this, TokenNotFoundError);
331
-
332
260
  _this4 = _super4.call(this);
333
-
334
261
  _defineProperty(_assertThisInitialized(_this4), "name", 'TOKEN_NOT_FOUND_ERROR');
335
-
336
262
  _defineProperty(_assertThisInitialized(_this4), "message", _this4.name);
337
-
338
263
  _this4.message = "TOKEN IS NOT A INJECTABLE CLASS OR SKIP OUT OF ROOT INJECTOR. YOU CAN USE @Optional DECORATOR TO IGNORE THIS ERROR IF THIS SERVICE IS OPTIONAL. ".concat(token);
339
264
  return _this4;
340
265
  }
341
-
342
- return TokenNotFoundError;
266
+ return _createClass(TokenNotFoundError);
343
267
  }( /*#__PURE__*/_wrapNativeSuper(Error));
344
-
345
268
  var NOOP = function NOOP(n) {
346
269
  return n;
347
- }; // 第一步:准备构造函数的依赖对象
270
+ };
271
+ // 第一步:准备构造函数的依赖对象
348
272
  // 第二步:通过构造函数来获取服务的实例对象
349
273
  // 第三步:补充@Inject注入的实例属性
350
274
  // 第四步:执行constructed方法
351
-
352
-
353
275
  var Injector = /*#__PURE__*/function () {
354
276
  function Injector() {
355
277
  var providers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
356
278
  var parent = arguments.length > 1 ? arguments[1] : undefined;
357
279
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
358
-
359
280
  _classCallCheck(this, Injector);
360
-
361
281
  _defineProperty(this, "parent", void 0);
362
-
363
282
  _defineProperty(this, "providerMap", new Map());
364
-
283
+ // <token, provider>
365
284
  _defineProperty(this, "beforeCacheHook", void 0);
366
-
367
285
  _defineProperty(this, "mergePropertyHook", void 0);
368
-
369
286
  // 引用父级Injector
370
- this.parent = parent; // 在把服务实例放到缓存中之前,可以调用这个钩子让服务响应化
371
-
372
- this.beforeCacheHook = options.beforeCacheHook || NOOP; // 在注入实例属性时,需要把属性merge到服务实例对象上,合并过程需要保持响应式
373
-
287
+ this.parent = parent;
288
+ // 在把服务实例放到缓存中之前,可以调用这个钩子让服务响应化
289
+ this.beforeCacheHook = options.beforeCacheHook || NOOP;
290
+ // 在注入实例属性时,需要把属性merge到服务实例对象上,合并过程需要保持响应式
374
291
  this.mergePropertyHook = options.mergePropertyHook || merge;
375
292
  this.addProviders(providers);
376
293
  }
377
-
294
+ /**
295
+ * 如果没有parent则是root injector
296
+ */
378
297
  _createClass(Injector, [{
298
+ key: "isRootInjector",
299
+ value: function isRootInjector() {
300
+ return !this.parent;
301
+ }
302
+ /**
303
+ * 如果没有指定当前token是可选的,则抛出异常
304
+ * @param token
305
+ * @param options
306
+ */
307
+ }, {
308
+ key: "checkTokenNotFoundError",
309
+ value: function checkTokenNotFoundError(token, options) {
310
+ if (!options.optional) {
311
+ throw new TokenNotFoundError(token);
312
+ }
313
+ }
314
+ }, {
379
315
  key: "get",
380
316
  value: function get(token) {
381
317
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
382
-
383
318
  if (options.skip) {
319
+ // 优先判断skip,是因为可以实现三种不同的组合
320
+ // 1. 只有skip
321
+ // 1. 只有self
322
+ // 1. 同时有skip和self
384
323
  if (this.parent) {
324
+ // 最多只能跳过一次,虽然也可以将skip设为number类型,从而可以控制跳过的次数,但是没有必要
385
325
  return this.parent.get(token, _objectSpread(_objectSpread({}, options), {}, {
386
326
  skip: false
387
327
  }));
388
328
  } else {
389
- if (!options.optional) {
390
- throw new TokenNotFoundError(token);
391
- }
329
+ this.checkTokenNotFoundError(token, options);
392
330
  }
393
331
  } else if (options.self) {
394
332
  if (this.providerMap.has(token)) {
395
333
  var provider = this.providerMap.get(token);
396
-
397
- if (provider.status === SERVICE_STATUS.INITING) {
398
- throw new CircularDependencyError(provider, options);
399
- }
400
-
401
334
  return this.getServiceByProvider(provider, options);
402
- } else if (!this.parent && typeof token === 'function' && Reflect.getMetadata(DECORATOR_KEYS.INJECTABLE, token)) {
403
- // 如果当前Injector已经是根Injector
404
- // 就必须要考虑self的限制
335
+ } else if (this.isRootInjector() && isInjectableToken(token)) {
336
+ // 这里的场景是 useRootService(Token, {self: true})
337
+ // 应该不会有人这样写代码,这里只是为了代码逻辑的完整性
338
+ // 正常业务代码只需要写 useRootService(Token) 即可
405
339
  var _provider = this.getProviderByToken(token);
406
-
407
340
  return this.getServiceByProvider(_provider, options);
408
341
  } else {
409
- if (!options.optional) {
410
- throw new TokenNotFoundError(token);
411
- }
342
+ this.checkTokenNotFoundError(token, options);
412
343
  }
413
344
  } else if (this.providerMap.has(token)) {
414
345
  var _provider2 = this.providerMap.get(token);
415
-
416
- if (_provider2.status === SERVICE_STATUS.INITING) {
417
- throw new CircularDependencyError(_provider2, options);
418
- }
419
-
420
346
  return this.getServiceByProvider(_provider2, options);
421
347
  } else if (this.parent) {
422
348
  return this.parent.get(token, options);
423
- } else if (typeof token === 'function' && Reflect.getMetadata(DECORATOR_KEYS.INJECTABLE, token)) {
349
+ } else if (isInjectableToken(token)) {
350
+ // 这里代表是root injector
351
+ // 这里的意思代表所有Injectable Class都可以自动在root injector中实例化
352
+ // 不再需要手动调用declareRootProviders这个方法
353
+ // 当然declareRootProviders这个方法有其他使用场景,比如不是以Class作为token
424
354
  var _provider3 = this.getProviderByToken(token);
425
-
426
355
  return this.getServiceByProvider(_provider3, options);
427
356
  } else {
428
- if (!options.optional) {
429
- throw new TokenNotFoundError(token);
430
- }
357
+ this.checkTokenNotFoundError(token, options);
431
358
  }
432
359
  }
433
- /**
434
- * 如果token对应的provider不存在
435
- * 那么就创建一个
436
- * 调用该方法之前需要保证token对应的provider已经存在或者token本身是一个可注入的类
437
- *
438
- * @param {*} token
439
- * @return {*}
440
- * @memberof Injector
360
+ /**
361
+ * 如果token对应的provider不存在
362
+ * 那么就创建一个
363
+ * 目前来看这个方法只是针对root injector使用,属于兜底策略
364
+ * 调用该方法之前需要保证token对应的provider已经存在或者token本身是一个可注入的类
365
+ *
366
+ * @param {*} token
367
+ * @return {*}
368
+ * @memberof Injector
441
369
  */
442
-
443
370
  }, {
444
371
  key: "getProviderByToken",
445
372
  value: function getProviderByToken(token) {
446
373
  if (!this.providerMap.has(token)) {
447
374
  this.addProvider(token);
448
375
  }
449
-
450
376
  return this.providerMap.get(token);
451
377
  }
452
- /**
453
- * 通过provider直接获取service实例
454
- *
455
- * @param {*} provider
456
- * @param {*} options
457
- * @return {*}
458
- * @memberof Injector
378
+ /**
379
+ * 通过provider直接获取service实例
380
+ *
381
+ * @param {*} provider
382
+ * @param {*} options
383
+ * @return {*}
384
+ * @memberof Injector
459
385
  */
460
-
461
386
  }, {
462
387
  key: "getServiceByProvider",
463
388
  value: function getServiceByProvider(provider, options) {
389
+ if (provider.status === SERVICE_STATUS.INITING) {
390
+ throw new CircularDependencyError(provider, options);
391
+ }
464
392
  if ('useCacheValue' in provider) {
465
393
  return provider.useCacheValue;
466
394
  } else if ('useValue' in provider) {
@@ -475,14 +403,13 @@ var DI = function (exports) {
475
403
  throw new ProviderNotValidError(provider);
476
404
  }
477
405
  }
478
- /**
479
- * 通过useValue获取服务实例
480
- *
481
- * @param {*} provider
482
- * @return {*}
483
- * @memberof Injector
406
+ /**
407
+ * 通过useValue获取服务实例
408
+ *
409
+ * @param {*} provider
410
+ * @return {*}
411
+ * @memberof Injector
484
412
  */
485
-
486
413
  }, {
487
414
  key: "getServiceUseValueWithProvider",
488
415
  value: function getServiceUseValueWithProvider(provider) {
@@ -490,69 +417,66 @@ var DI = function (exports) {
490
417
  provider.useCacheValue = cacheValue;
491
418
  return cacheValue;
492
419
  }
493
- /**
494
- * 通过useClass获取服务实例
495
- *
496
- * @param {*} provider
497
- * @param {*} options
498
- * @return {*}
499
- * @memberof Injector
420
+ /**
421
+ * 通过useClass获取服务实例
422
+ *
423
+ * @param {*} provider
424
+ * @param {*} options
425
+ * @return {*}
426
+ * @memberof Injector
500
427
  */
501
-
502
428
  }, {
503
429
  key: "getServiceUseClassWithProvider",
504
430
  value: function getServiceUseClassWithProvider(provider, options) {
505
- provider.parent = options.provider;
506
431
  provider.status = SERVICE_STATUS.INITING;
432
+ provider.parent = options.provider;
507
433
  var ClassName = provider.useClass;
508
434
  var params = this.getContructorParameters(ClassName, provider);
509
435
  var cacheValue = this.beforeCacheHook(_construct(ClassName, _toConsumableArray(params)));
436
+ // 实例化成功,此时不会再有死循环问题
510
437
  provider.useCacheValue = cacheValue;
511
438
  provider.status = SERVICE_STATUS.CONSTRUCTED;
512
439
  var properties = this.getInjectProperties(ClassName, provider);
513
440
  this.mergePropertyHook(cacheValue, properties);
514
- provider.status = SERVICE_STATUS.MERGED;
515
441
  provider.parent = void 0;
442
+ provider.status = SERVICE_STATUS.MERGED;
516
443
  return cacheValue;
517
444
  }
518
- /**
519
- * 通过useExisting获取服务实例
520
- *
521
- * @param {*} provider
522
- * @param {*} options
523
- * @return {*}
524
- * @memberof Injector
445
+ /**
446
+ * 通过useExisting获取服务实例
447
+ *
448
+ * @param {*} provider
449
+ * @param {*} options
450
+ * @return {*}
451
+ * @memberof Injector
525
452
  */
526
-
527
453
  }, {
528
454
  key: "getServiceUseExistingWithProvider",
529
455
  value: function getServiceUseExistingWithProvider(provider, options) {
530
- provider.parent = options.provider;
531
456
  provider.status = SERVICE_STATUS.INITING;
457
+ provider.parent = options.provider;
532
458
  var cacheValue = this.get(provider.useExisting, _objectSpread(_objectSpread({}, options), {}, {
533
459
  provider: provider
534
460
  }));
535
461
  provider.useCacheValue = cacheValue;
536
- provider.status = SERVICE_STATUS.CONSTRUCTED;
537
462
  provider.parent = void 0;
463
+ provider.status = SERVICE_STATUS.CONSTRUCTED;
538
464
  return cacheValue;
539
465
  }
540
- /**
541
- * 通过useFactory获取服务实例
542
- *
543
- * @param {*} provider
544
- * @param {*} options
545
- * @return {*}
546
- * @memberof Injector
466
+ /**
467
+ * 通过useFactory获取服务实例
468
+ *
469
+ * @param {*} provider
470
+ * @param {*} options
471
+ * @return {*}
472
+ * @memberof Injector
547
473
  */
548
-
549
474
  }, {
550
475
  key: "getServiceUseFactoryWithProvider",
551
476
  value: function getServiceUseFactoryWithProvider(provider, options) {
552
477
  var _this5 = this;
553
-
554
- provider.parent = options.provider;
555
478
  provider.status = SERVICE_STATUS.INITING;
479
+ provider.parent = options.provider;
556
480
  var deps = provider.deps || [];
557
481
  var args = deps.map(function (dep) {
558
482
  return _this5.get(dep, {
@@ -562,137 +486,123 @@ var DI = function (exports) {
562
486
  var serviceValue = provider.useFactory.apply(provider, _toConsumableArray(args));
563
487
  var cacheValue = this.beforeCacheHook(serviceValue);
564
488
  provider.useCacheValue = cacheValue;
565
- provider.status = SERVICE_STATUS.CONSTRUCTED;
566
489
  provider.parent = void 0;
490
+ provider.status = SERVICE_STATUS.CONSTRUCTED;
567
491
  return cacheValue;
568
492
  }
569
- /**
570
- * 获取构造函数的参数-返回数组
571
- *
572
- * @param {*} ClassName
573
- * @param {*} provider
574
- * @return {*}
575
- * @memberof Injector
493
+ /**
494
+ * 获取构造函数的参数-返回数组
495
+ *
496
+ * @param {*} ClassName
497
+ * @param {*} provider
498
+ * @return {*}
499
+ * @memberof Injector
576
500
  */
577
-
578
501
  }, {
579
502
  key: "getContructorParameters",
580
503
  value: function getContructorParameters(ClassName, provider) {
581
504
  var _this6 = this;
582
-
583
505
  var params = this.getContructorParametersMetas(ClassName);
584
506
  var result = params.map(function (meta) {
585
- return _this6.get(meta.key, _objectSpread(_objectSpread({}, meta.value), {}, {
507
+ return _this6.get(meta.provide, _objectSpread(_objectSpread({}, meta.value), {}, {
586
508
  provider: provider
587
509
  }));
588
510
  });
589
511
  return result;
590
512
  }
591
- /**
592
- * 获取构造函数的参数的装饰器元数据
593
- *
594
- * @param {*} ClassName
595
- * @return {*}
596
- * @memberof Injector
513
+ /**
514
+ * 获取构造函数的参数的装饰器元数据
515
+ *
516
+ * @param {*} ClassName
517
+ * @return {*}
518
+ * @memberof Injector
597
519
  */
598
-
599
520
  }, {
600
521
  key: "getContructorParametersMetas",
601
522
  value: function getContructorParametersMetas(ClassName) {
602
523
  // 构造函数的参数的类型数据-原始数据-是一个数组
603
- var params = Reflect.getMetadata(DECORATOR_KEYS.SERVICE_PARAM_TYPES, ClassName) || []; // 构造函数的参数的类型数据-通过@Inject等装饰器实现-是一个对象-key是数字-对应第几个参数的类型数据
604
-
524
+ var params = Reflect.getMetadata(DECORATOR_KEYS.DESIGN_PARAM_TYPES, ClassName) || [];
525
+ // 构造函数的参数的类型数据-通过@Inject等装饰器实现-是一个对象-key是数字-对应第几个参数的类型数据
605
526
  var propertiesMetadatas = Reflect.getMetadata(DECORATOR_KEYS.SERVICE_INJECTED_PARAMS, ClassName) || {};
606
527
  return params.map(function (paramType, index) {
607
528
  // 查找当前index对应的参数有没有使用装饰器
608
- var propertyMetadatas = propertiesMetadatas[index] || []; // 查找装饰器列表中有没有@Inject装饰器的数据
609
-
529
+ var propertyMetadatas = propertiesMetadatas[index] || [];
530
+ // 查找装饰器列表中有没有@Inject装饰器的数据
610
531
  var injectMeta = propertyMetadatas.find(function (meta) {
611
532
  return meta.key === DECORATOR_KEYS.INJECT;
612
533
  });
613
-
614
534
  if (injectMeta && injectMeta.value === Object || !injectMeta && paramType === Object) {
615
535
  // 构造函数的参数可以不使用@Inject,但是一定不能是interface
616
536
  throw new InjectFailedError(injectMeta, ClassName, index, paramType);
617
- } // 把装饰器列表收集为对象,并且排除掉@Inject
618
-
619
-
537
+ }
538
+ // 把装饰器列表收集为对象,并且排除掉@Inject
620
539
  var options = propertyMetadatas.reduce(function (acc, meta) {
621
540
  if (meta.key !== DECORATOR_KEYS.INJECT) {
622
541
  acc[meta.key] = meta.value;
623
542
  }
624
-
625
543
  return acc;
626
544
  }, {});
627
545
  return {
628
- key: resolveForwardRef(injectMeta && injectMeta.value) || paramType,
546
+ key: index,
547
+ provide: resolveForwardRef(injectMeta && injectMeta.value) || paramType,
629
548
  value: options
630
549
  };
631
550
  });
632
551
  }
633
- /**
634
- * 获取注入的实例属性-返回对象
635
- *
636
- * @param {*} ClassName
637
- * @param {*} provider
638
- * @return {*}
639
- * @memberof Injector
552
+ /**
553
+ * 获取注入的实例属性-返回对象
554
+ *
555
+ * @param {*} ClassName
556
+ * @param {*} provider
557
+ * @return {*}
558
+ * @memberof Injector
640
559
  */
641
-
642
560
  }, {
643
561
  key: "getInjectProperties",
644
562
  value: function getInjectProperties(ClassName, provider) {
645
563
  var _this7 = this;
646
-
647
564
  var metas = this.getInjectPropertiesMetas(ClassName);
648
565
  var properties = {};
649
566
  metas.forEach(function (meta) {
650
567
  var _meta$value;
651
-
652
568
  var property = _this7.get(meta.provide, _objectSpread(_objectSpread({}, meta.value), {}, {
653
569
  provider: provider
654
570
  }));
655
-
656
571
  if (!(property === void 0 && (_meta$value = meta.value) !== null && _meta$value !== void 0 && _meta$value.optional)) {
657
572
  properties[meta.key] = property;
658
573
  }
659
574
  });
660
575
  return properties;
661
576
  }
662
- /**
663
- * 获取注入属性的装饰器数据
664
- *
665
- * @param {*} ClassName
666
- * @return {*}
667
- * @memberof Injector
577
+ /**
578
+ * 获取注入属性的装饰器数据
579
+ *
580
+ * @param {*} ClassName
581
+ * @return {*}
582
+ * @memberof Injector
668
583
  */
669
-
670
584
  }, {
671
585
  key: "getInjectPropertiesMetas",
672
586
  value: function getInjectPropertiesMetas(ClassName) {
673
587
  // 获取注入属性的metas-类型是Recors<string, Array>
674
588
  var propertiesMetadatas = Reflect.getMetadata(DECORATOR_KEYS.SERVICE_INJECTED_PROPS, ClassName) || {};
675
589
  var propertiesMetas = [];
676
-
677
590
  for (var key in propertiesMetadatas) {
678
591
  if (has(propertiesMetadatas, key)) {
679
592
  // 当前key属性对应的所有的装饰器
680
- var propertyMetadatas = propertiesMetadatas[key]; // 当前key属性对应的@Inject装饰器的数据
681
-
593
+ var propertyMetadatas = propertiesMetadatas[key];
594
+ // 当前key属性对应的@Inject装饰器的数据
682
595
  var injectMeta = propertyMetadatas.find(function (meta) {
683
596
  return meta.key === DECORATOR_KEYS.INJECT;
684
597
  });
685
-
686
598
  if (!injectMeta || injectMeta.value === Object) {
687
599
  // 属性一定要手动指定@Inject
688
600
  throw new InjectFailedError(injectMeta, ClassName, key);
689
601
  }
690
-
691
602
  var options = propertyMetadatas.reduce(function (acc, meta) {
692
603
  if (meta.key !== DECORATOR_KEYS.INJECT) {
693
604
  acc[meta.key] = meta.value;
694
605
  }
695
-
696
606
  return acc;
697
607
  }, {});
698
608
  propertiesMetas.push({
@@ -702,32 +612,28 @@ var DI = function (exports) {
702
612
  });
703
613
  }
704
614
  }
705
-
706
615
  return propertiesMetas;
707
616
  }
708
- /**
709
- * 把providers数组转换成map,避免后续的遍历
710
- *
711
- * @param {any[]} providers
712
- * @memberof Injector
617
+ /**
618
+ * 把providers数组转换成map,避免后续的遍历
619
+ *
620
+ * @param {any[]} providers
621
+ * @memberof Injector
713
622
  */
714
-
715
623
  }, {
716
624
  key: "addProviders",
717
625
  value: function addProviders(providers) {
718
626
  var _this8 = this;
719
-
720
627
  providers.forEach(function (provider) {
721
628
  _this8.addProvider(provider);
722
629
  });
723
630
  }
724
- /**
725
- * 添加新的provider
726
- *
727
- * @param {*} provider
728
- * @memberof Injector
631
+ /**
632
+ * 添加新的provider
633
+ *
634
+ * @param {*} provider
635
+ * @memberof Injector
729
636
  */
730
-
731
637
  }, {
732
638
  key: "addProvider",
733
639
  value: function addProvider(provider) {
@@ -740,12 +646,11 @@ var DI = function (exports) {
740
646
  });
741
647
  }
742
648
  }
743
- /**
744
- * 释放当前Injector中的所有服务实例
745
- *
746
- * @memberof Injector
649
+ /**
650
+ * 释放当前Injector中的所有服务实例
651
+ *
652
+ * @memberof Injector
747
653
  */
748
-
749
654
  }, {
750
655
  key: "dispose",
751
656
  value: function dispose() {
@@ -762,10 +667,8 @@ var DI = function (exports) {
762
667
  this.parent = null;
763
668
  }
764
669
  }]);
765
-
766
670
  return Injector;
767
671
  }();
768
-
769
672
  exports.CircularDependencyError = CircularDependencyError;
770
673
  exports.DECORATOR_KEYS = DECORATOR_KEYS;
771
674
  exports.Inject = Inject;
@@ -782,11 +685,9 @@ var DI = function (exports) {
782
685
  exports.forwardRef = forwardRef;
783
686
  exports.has = has;
784
687
  exports.isForwardRef = isForwardRef;
688
+ exports.isInjectableToken = isInjectableToken;
785
689
  exports.merge = merge;
786
690
  exports.resolveForwardRef = resolveForwardRef;
787
- Object.defineProperty(exports, '__esModule', {
788
- value: true
789
- });
790
691
  return exports;
791
692
  }({});
792
693
  //# sourceMappingURL=index.iife.js.map