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