@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.
- package/lib/domain/Container.d.ts +2 -3
- package/lib/domain/Provider.d.ts +3 -0
- package/lib/index.js +149 -87
- package/lib/index.js.map +1 -1
- package/lib/index.modern.js +149 -87
- package/lib/index.modern.js.map +1 -1
- package/lib/interfaces/RegistrySettings.d.ts +6 -2
- package/lib/interfaces/ResolvedInvokeOptions.d.ts +12 -0
- package/lib/interfaces/index.d.ts +1 -0
- package/lib/registries/GlobalProviders.d.ts +5 -1
- package/lib/services/InjectorService.d.ts +23 -1
- package/package.json +3 -3
|
@@ -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
|
|
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):
|
|
34
|
+
getProvider<T extends Provider = Provider>(token: TokenProvider): T | undefined;
|
|
36
35
|
/**
|
|
37
36
|
* Get all providers registered in the injector container.
|
|
38
37
|
*
|
package/lib/domain/Provider.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1680
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
1840
|
+
_classPrivateFieldLooseBase(this, _cache)[_cache].set(token, this.resolve(token, locals, options));
|
|
1819
1841
|
|
|
1820
1842
|
if (provider.isAsync()) {
|
|
1821
|
-
|
|
1822
|
-
|
|
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
|
-
|
|
1855
|
-
|
|
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
|
-
|
|
1870
|
-
|
|
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
|
-
|
|
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
|
-
} =
|
|
2243
|
+
} = resolvedOpts;
|
|
2184
2244
|
|
|
2185
2245
|
if (provider) {
|
|
2186
|
-
GlobalProviders.onInvoke(provider, locals,
|
|
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
|