@tsed/di 6.86.1 → 6.87.2

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.
@@ -1,9 +1,8 @@
1
1
  import type { IProvider } from "../interfaces/IProvider";
2
2
  import type { ProviderType } from "./ProviderType";
3
3
  import type { TokenProvider } from "../interfaces/TokenProvider";
4
- import { LocalsContainer } from "./LocalsContainer";
5
4
  import { Provider } from "./Provider";
6
- export declare class Container extends LocalsContainer<Provider> {
5
+ export declare class Container extends Map<TokenProvider, Provider> {
7
6
  /**
8
7
  *
9
8
  * @param token
@@ -32,7 +31,7 @@ export declare class Container extends LocalsContainer<Provider> {
32
31
  * @returns {T} Returns the element associated with the specified key or undefined if the key can't be found in the Map object.
33
32
  * @param token
34
33
  */
35
- getProvider(token: TokenProvider): Provider | undefined;
34
+ getProvider<T extends Provider = Provider>(token: TokenProvider): T | undefined;
36
35
  /**
37
36
  * Get all providers registered in the injector container.
38
37
  *
@@ -4,6 +4,9 @@ import { ProviderScope } from "./ProviderScope";
4
4
  import { ProviderType } from "./ProviderType";
5
5
  export declare class Provider<T = any> implements IProvider<T> {
6
6
  type: ProviderType | any;
7
+ /**
8
+ * @deprecated Use injector.get(provider.token) instead.
9
+ */
7
10
  instance: T;
8
11
  deps: TokenProvider[];
9
12
  imports: any[];
package/lib/index.js CHANGED
@@ -286,11 +286,11 @@ class GlobalProviderRegistry extends Map {
286
286
  return this;
287
287
  }
288
288
 
289
- onInvoke(provider, locals, deps) {
289
+ onInvoke(provider, locals, options) {
290
290
  const settings = _classPrivateFieldLooseBase(this, _settings)[_settings].get(provider.type);
291
291
 
292
292
  if (settings != null && settings.onInvoke) {
293
- settings.onInvoke(provider, locals, deps);
293
+ settings.onInvoke(provider, locals, options);
294
294
  }
295
295
  }
296
296
 
@@ -359,76 +359,16 @@ class GlobalProviderRegistry extends Map {
359
359
 
360
360
  const GlobalProviders = new GlobalProviderRegistry();
361
361
 
362
- class LocalsContainer extends Map {
363
- /**
364
- * Emit an event to all service. See service [lifecycle hooks](/docs/services.md#lifecycle-hooks).
365
- * @param eventName The event name to emit at all services.
366
- * @param args List of the parameters to give to each services.
367
- * @returns {Promise<any[]>} A list of promises.
368
- */
369
- async emit(eventName, ...args) {
370
- for (const handler of this.getListeners(eventName)) {
371
- await handler(...args);
372
- }
373
- }
374
- /**
375
- * @param eventName
376
- * @param value
377
- * @param args
378
- */
379
-
380
-
381
- alter(eventName, value, ...args) {
382
- for (const handler of this.getListeners(eventName)) {
383
- value = handler(value, ...args);
384
- }
385
-
386
- return value;
387
- }
388
- /**
389
- * @param eventName
390
- * @param value
391
- * @param args
392
- */
393
-
394
-
395
- async alterAsync(eventName, value, ...args) {
396
- for (const handler of this.getListeners(eventName)) {
397
- value = handler(value, ...args);
398
- }
399
-
400
- return value;
401
- }
402
-
403
- toArray() {
404
- return [...this.values()];
405
- }
406
-
407
- async destroy() {
408
- await this.emit("$onDestroy");
409
- this.clear();
410
- }
411
-
412
- getListeners(event) {
413
- return this.toArray().reduce((listeners, instance) => {
414
- if (typeof instance === "object" && instance && event in instance) {
415
- return listeners.concat(instance[event].bind(instance));
416
- }
417
-
418
- return listeners;
419
- }, []);
420
- }
421
-
422
- }
423
-
424
- class Container extends LocalsContainer {
362
+ class Container extends Map {
425
363
  /**
426
364
  *
427
365
  * @param token
428
366
  * @param settings
429
367
  */
430
368
  add(token, settings = {}) {
431
- const provider = GlobalProviders.has(token) ? GlobalProviders.get(token).clone() : new Provider(token);
369
+ var _GlobalProviders$get;
370
+
371
+ const provider = ((_GlobalProviders$get = GlobalProviders.get(token)) == null ? void 0 : _GlobalProviders$get.clone()) || new Provider(token);
432
372
  Object.assign(provider, settings);
433
373
  return super.set(token, provider);
434
374
  }
@@ -480,7 +420,13 @@ class Container extends LocalsContainer {
480
420
 
481
421
 
482
422
  getProviders(type) {
483
- return Array.from(this).filter(([_, provider]) => type ? provider.type === type : true).map(([_, provider]) => provider);
423
+ return [...this].reduce((providers, [_, provider]) => {
424
+ if (provider.type === type || !type) {
425
+ return [...providers, provider];
426
+ }
427
+
428
+ return providers;
429
+ }, []);
484
430
  }
485
431
 
486
432
  addProviders(container) {
@@ -503,6 +449,68 @@ exports.InjectablePropertyType = void 0;
503
449
  InjectablePropertyType["INTERCEPTOR"] = "interceptor";
504
450
  })(exports.InjectablePropertyType || (exports.InjectablePropertyType = {}));
505
451
 
452
+ class LocalsContainer extends Map {
453
+ /**
454
+ * Emit an event to all service. See service [lifecycle hooks](/docs/services.md#lifecycle-hooks).
455
+ * @param eventName The event name to emit at all services.
456
+ * @param args List of the parameters to give to each services.
457
+ * @returns {Promise<any[]>} A list of promises.
458
+ */
459
+ async emit(eventName, ...args) {
460
+ for (const handler of this.getListeners(eventName)) {
461
+ await handler(...args);
462
+ }
463
+ }
464
+ /**
465
+ * @param eventName
466
+ * @param value
467
+ * @param args
468
+ */
469
+
470
+
471
+ alter(eventName, value, ...args) {
472
+ for (const handler of this.getListeners(eventName)) {
473
+ value = handler(value, ...args);
474
+ }
475
+
476
+ return value;
477
+ }
478
+ /**
479
+ * @param eventName
480
+ * @param value
481
+ * @param args
482
+ */
483
+
484
+
485
+ async alterAsync(eventName, value, ...args) {
486
+ for (const handler of this.getListeners(eventName)) {
487
+ value = handler(value, ...args);
488
+ }
489
+
490
+ return value;
491
+ }
492
+
493
+ toArray() {
494
+ return [...this.values()];
495
+ }
496
+
497
+ async destroy() {
498
+ await this.emit("$onDestroy");
499
+ this.clear();
500
+ }
501
+
502
+ getListeners(event) {
503
+ return this.toArray().reduce((listeners, instance) => {
504
+ if (typeof instance === "object" && instance && event in instance) {
505
+ return listeners.concat(instance[event].bind(instance));
506
+ }
507
+
508
+ return listeners;
509
+ }, []);
510
+ }
511
+
512
+ }
513
+
506
514
  class ContextLogger {
507
515
  constructor(logger$1, {
508
516
  id,
@@ -1647,6 +1655,8 @@ class DIConfiguration {
1647
1655
 
1648
1656
  }
1649
1657
 
1658
+ var _cache;
1659
+
1650
1660
  var InjectorService_1;
1651
1661
  /**
1652
1662
  * This service contain all services collected by `@Service` or services declared manually with `InjectorService.factory()` or `InjectorService.service()`.
@@ -1670,14 +1680,19 @@ var InjectorService_1;
1670
1680
  * ```
1671
1681
  */
1672
1682
 
1673
- exports.InjectorService = InjectorService_1 = class InjectorService extends Container {
1683
+ exports.InjectorService = InjectorService_1 = (_cache = /*#__PURE__*/_classPrivateFieldLooseKey("cache"), class InjectorService extends Container {
1674
1684
  constructor() {
1675
1685
  super();
1686
+ Object.defineProperty(this, _cache, {
1687
+ writable: true,
1688
+ value: void 0
1689
+ });
1676
1690
  this.settings = new DIConfiguration();
1677
1691
  this.logger = console;
1678
1692
  this.resolvedConfiguration = false;
1679
- const provider = this.addProvider(InjectorService_1).getProvider(InjectorService_1);
1680
- provider.instance = this;
1693
+ _classPrivateFieldLooseBase(this, _cache)[_cache] = new LocalsContainer();
1694
+
1695
+ _classPrivateFieldLooseBase(this, _cache)[_cache].set(InjectorService_1, this);
1681
1696
  }
1682
1697
 
1683
1698
  get resolvers() {
@@ -1700,6 +1715,7 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1700
1715
  * Clone a provider from GlobalProviders and the given token. forkProvider method build automatically the provider if the instance parameter ins't given.
1701
1716
  * @param token
1702
1717
  * @param settings
1718
+ * @deprecated
1703
1719
  */
1704
1720
 
1705
1721
 
@@ -1710,7 +1726,9 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1710
1726
 
1711
1727
  const provider = this.getProvider(token);
1712
1728
  Object.assign(provider, settings);
1713
- provider.instance = this.invoke(token);
1729
+
1730
+ _classPrivateFieldLooseBase(this, _cache)[_cache].set(token, this.invoke(token));
1731
+
1714
1732
  return provider;
1715
1733
  }
1716
1734
  /**
@@ -1719,7 +1737,7 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1719
1737
 
1720
1738
 
1721
1739
  toArray() {
1722
- return super.toArray().map(provider => provider.instance);
1740
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].toArray();
1723
1741
  }
1724
1742
  /**
1725
1743
  * Get a service or factory already constructed from his symbol or class.
@@ -1768,7 +1786,7 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1768
1786
 
1769
1787
 
1770
1788
  has(token) {
1771
- return super.has(core.getClassOrSymbol(token)) && this.get(token) !== undefined;
1789
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].get(token) !== undefined;
1772
1790
  }
1773
1791
  /**
1774
1792
  * Invoke the class and inject all services that required by the class constructor.
@@ -1808,18 +1826,22 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1808
1826
 
1809
1827
  if (!provider || options.rebuild) {
1810
1828
  instance = this.resolve(token, locals, options);
1811
- this.hasProvider(token) && (this.getProvider(token).instance = instance);
1829
+
1830
+ if (this.hasProvider(token)) {
1831
+ _classPrivateFieldLooseBase(this, _cache)[_cache].set(token, instance);
1832
+ }
1833
+
1812
1834
  return instance;
1813
1835
  }
1814
1836
 
1815
1837
  switch (this.scopeOf(provider)) {
1816
1838
  case exports.ProviderScope.SINGLETON:
1817
1839
  if (!this.has(token)) {
1818
- provider.instance = this.resolve(token, locals, options);
1840
+ _classPrivateFieldLooseBase(this, _cache)[_cache].set(token, this.resolve(token, locals, options));
1819
1841
 
1820
1842
  if (provider.isAsync()) {
1821
- provider.instance.then(instance => {
1822
- provider.instance = instance;
1843
+ _classPrivateFieldLooseBase(this, _cache)[_cache].get(token).then(instance => {
1844
+ _classPrivateFieldLooseBase(this, _cache)[_cache].set(token, instance);
1823
1845
  });
1824
1846
  }
1825
1847
  }
@@ -1851,8 +1873,10 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1851
1873
  await this.invoke(provider.token, locals);
1852
1874
  }
1853
1875
 
1854
- if (provider.instance) {
1855
- locals.set(provider.token, provider.instance);
1876
+ const instance = _classPrivateFieldLooseBase(this, _cache)[_cache].get(provider.token);
1877
+
1878
+ if (instance !== undefined) {
1879
+ locals.set(provider.token, instance);
1856
1880
  }
1857
1881
  }
1858
1882
  }
@@ -1866,8 +1890,10 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
1866
1890
  this.invoke(provider.token, locals);
1867
1891
  }
1868
1892
 
1869
- if (provider.instance !== undefined) {
1870
- locals.set(provider.token, provider.instance);
1893
+ const instance = _classPrivateFieldLooseBase(this, _cache)[_cache].get(provider.token);
1894
+
1895
+ if (instance !== undefined) {
1896
+ locals.set(provider.token, instance);
1871
1897
  }
1872
1898
  }
1873
1899
 
@@ -2140,6 +2166,41 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
2140
2166
 
2141
2167
  return instance;
2142
2168
  }
2169
+ /**
2170
+ * Emit an event to all service. See service [lifecycle hooks](/docs/services.md#lifecycle-hooks).
2171
+ * @param eventName The event name to emit at all services.
2172
+ * @param args List of the parameters to give to each services.
2173
+ * @returns {Promise<any[]>} A list of promises.
2174
+ */
2175
+
2176
+
2177
+ async emit(eventName, ...args) {
2178
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].emit(eventName, ...args);
2179
+ }
2180
+ /**
2181
+ * @param eventName
2182
+ * @param value
2183
+ * @param args
2184
+ */
2185
+
2186
+
2187
+ alter(eventName, value, ...args) {
2188
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].alter(eventName, value, ...args);
2189
+ }
2190
+ /**
2191
+ * @param eventName
2192
+ * @param value
2193
+ * @param args
2194
+ */
2195
+
2196
+
2197
+ async alterAsync(eventName, value, ...args) {
2198
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].alterAsync(eventName, value, ...args);
2199
+ }
2200
+
2201
+ async destroy() {
2202
+ await _classPrivateFieldLooseBase(this, _cache)[_cache].destroy();
2203
+ }
2143
2204
 
2144
2205
  ensureProvider(token) {
2145
2206
  if (!this.hasProvider(token) && GlobalProviders.has(token)) {
@@ -2150,9 +2211,7 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
2150
2211
  }
2151
2212
 
2152
2213
  getInstance(token) {
2153
- var _super$get;
2154
-
2155
- return (_super$get = super.get(core.getClassOrSymbol(token))) == null ? void 0 : _super$get.instance;
2214
+ return _classPrivateFieldLooseBase(this, _cache)[_cache].get(core.getClassOrSymbol(token));
2156
2215
  }
2157
2216
  /**
2158
2217
  * Invoke a class method and inject service.
@@ -2174,16 +2233,19 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
2174
2233
 
2175
2234
 
2176
2235
  resolve(target, locals, options = {}) {
2236
+ const resolvedOpts = this.mapInvokeOptions(target, locals, options);
2177
2237
  const {
2178
2238
  token,
2179
2239
  deps,
2180
2240
  construct,
2181
2241
  imports,
2182
2242
  provider
2183
- } = this.mapInvokeOptions(target, locals, options);
2243
+ } = resolvedOpts;
2184
2244
 
2185
2245
  if (provider) {
2186
- GlobalProviders.onInvoke(provider, locals, deps);
2246
+ GlobalProviders.onInvoke(provider, locals, _extends({}, resolvedOpts, {
2247
+ injector: this
2248
+ }));
2187
2249
  }
2188
2250
 
2189
2251
  let instance;
@@ -2292,7 +2354,7 @@ exports.InjectorService = InjectorService_1 = class InjectorService extends Cont
2292
2354
  };
2293
2355
  }
2294
2356
 
2295
- };
2357
+ });
2296
2358
  exports.InjectorService = InjectorService_1 = tslib.__decorate([Injectable({
2297
2359
  scope: exports.ProviderScope.SINGLETON,
2298
2360
  global: true