@tsed/di 6.69.3 → 6.71.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.
@@ -1,9 +1,7 @@
1
- import { isClass, classOf, Store, nameOf, getEnumerableKeys, Enumerable, NotEnumerable, Type, getClassOrSymbol, StoreSet, decoratorTypeOf, UnsupportedDecoratorType, DecoratorTypes, Metadata, useDecorators, isString, getConstructorArgNames, proxyDelegation, setValue, getValue, deepMerge, deepClone, ancestorsOf, prototypeOf, isPromise, isInheritedFrom, isFunction, Env, normalizePath, isArray } from '@tsed/core';
2
- import { __decorate, __metadata } from 'tslib';
1
+ import { getClassOrSymbol, Store, isClass, classOf, nameOf, StoreSet, decoratorTypeOf, UnsupportedDecoratorType, DecoratorTypes, Metadata, useDecorators, isString, getConstructorArgNames, proxyDelegation, setValue, getValue, deepMerge, deepClone, ancestorsOf, prototypeOf, isPromise, isInheritedFrom, isFunction, Env } from '@tsed/core';
3
2
  import { levels, Logger, $log } from '@tsed/logger';
3
+ import { __decorate, __metadata } from 'tslib';
4
4
  import chalk from 'chalk';
5
- import globby from 'globby';
6
- import { resolve } from 'path';
7
5
 
8
6
  const INJECTABLE_PROP = "DI:INJECTABLE_PROP";
9
7
  const DI_PARAMS = "DI:PARAMS";
@@ -77,26 +75,44 @@ var ProviderType;
77
75
  ProviderType["MIDDLEWARE"] = "middleware";
78
76
  })(ProviderType || (ProviderType = {}));
79
77
 
78
+ var _provide = /*#__PURE__*/_classPrivateFieldLooseKey("provide");
79
+
80
+ var _store = /*#__PURE__*/_classPrivateFieldLooseKey("store");
81
+
82
+ var _tokenStore = /*#__PURE__*/_classPrivateFieldLooseKey("tokenStore");
83
+
80
84
  class Provider {
81
- constructor(token) {
85
+ constructor(token, options = {}) {
86
+ Object.defineProperty(this, _provide, {
87
+ writable: true,
88
+ value: void 0
89
+ });
90
+ Object.defineProperty(this, _store, {
91
+ writable: true,
92
+ value: void 0
93
+ });
94
+ Object.defineProperty(this, _tokenStore, {
95
+ writable: true,
96
+ value: void 0
97
+ });
82
98
  this.type = ProviderType.PROVIDER;
83
- this.injectable = true;
84
99
  this.provide = token;
85
100
  this.useClass = token;
101
+ Object.assign(this, options);
86
102
  }
87
103
 
88
104
  get token() {
89
- return this._provide;
105
+ return _classPrivateFieldLooseBase(this, _provide)[_provide];
90
106
  }
91
107
 
92
108
  get provide() {
93
- return this._provide;
109
+ return _classPrivateFieldLooseBase(this, _provide)[_provide];
94
110
  }
95
111
 
96
112
  set provide(value) {
97
113
  if (value) {
98
- this._provide = isClass(value) ? classOf(value) : value;
99
- this._tokenStore = this._store = Store.from(value);
114
+ _classPrivateFieldLooseBase(this, _provide)[_provide] = getClassOrSymbol(value);
115
+ _classPrivateFieldLooseBase(this, _tokenStore)[_tokenStore] = _classPrivateFieldLooseBase(this, _store)[_store] = Store.from(value);
100
116
  }
101
117
  }
102
118
 
@@ -112,7 +128,7 @@ class Provider {
112
128
  set useClass(value) {
113
129
  if (isClass(value)) {
114
130
  this._useClass = classOf(value);
115
- this._store = Store.from(value);
131
+ _classPrivateFieldLooseBase(this, _store)[_store] = Store.from(value);
116
132
  }
117
133
  }
118
134
 
@@ -125,7 +141,7 @@ class Provider {
125
141
  }
126
142
 
127
143
  get store() {
128
- return this._store;
144
+ return _classPrivateFieldLooseBase(this, _store)[_store];
129
145
  }
130
146
  /**
131
147
  * Get the scope of the provider.
@@ -164,7 +180,7 @@ class Provider {
164
180
  }
165
181
 
166
182
  get(key) {
167
- return this.store.get(key) || this._tokenStore.get(key);
183
+ return this.store.get(key) || _classPrivateFieldLooseBase(this, _tokenStore)[_tokenStore].get(key);
168
184
  }
169
185
 
170
186
  isAsync() {
@@ -172,13 +188,7 @@ class Provider {
172
188
  }
173
189
 
174
190
  clone() {
175
- const provider = new (classOf(this))(this.token);
176
- getEnumerableKeys(this).forEach(key => {
177
- if (this[key] !== undefined) {
178
- provider[key] = this[key];
179
- }
180
- });
181
- return provider;
191
+ return new (classOf(this))(_classPrivateFieldLooseBase(this, _provide)[_provide], this);
182
192
  }
183
193
 
184
194
  toString() {
@@ -187,38 +197,6 @@ class Provider {
187
197
 
188
198
  }
189
199
 
190
- __decorate([Enumerable(), __metadata("design:type", Object)], Provider.prototype, "type", void 0);
191
-
192
- __decorate([Enumerable(), __metadata("design:type", Boolean)], Provider.prototype, "injectable", void 0);
193
-
194
- __decorate([Enumerable(), __metadata("design:type", Object)], Provider.prototype, "instance", void 0);
195
-
196
- __decorate([Enumerable(), __metadata("design:type", Array)], Provider.prototype, "deps", void 0);
197
-
198
- __decorate([Enumerable(), __metadata("design:type", Array)], Provider.prototype, "imports", void 0);
199
-
200
- __decorate([Enumerable(), __metadata("design:type", Function)], Provider.prototype, "useFactory", void 0);
201
-
202
- __decorate([Enumerable(), __metadata("design:type", Function)], Provider.prototype, "useAsyncFactory", void 0);
203
-
204
- __decorate([Enumerable(), __metadata("design:type", Object)], Provider.prototype, "useValue", void 0);
205
-
206
- __decorate([NotEnumerable(), __metadata("design:type", Object)], Provider.prototype, "_provide", void 0);
207
-
208
- __decorate([NotEnumerable(), __metadata("design:type", Type)], Provider.prototype, "_useClass", void 0);
209
-
210
- __decorate([NotEnumerable(), __metadata("design:type", Object)], Provider.prototype, "_instance", void 0);
211
-
212
- __decorate([NotEnumerable(), __metadata("design:type", Store)], Provider.prototype, "_store", void 0);
213
-
214
- __decorate([NotEnumerable(), __metadata("design:type", Store)], Provider.prototype, "_tokenStore", void 0);
215
-
216
- __decorate([Enumerable(), __metadata("design:type", Type), __metadata("design:paramtypes", [Type])], Provider.prototype, "useClass", null);
217
-
218
- __decorate([Enumerable(), __metadata("design:type", String), __metadata("design:paramtypes", [String])], Provider.prototype, "scope", null);
219
-
220
- __decorate([Enumerable(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object])], Provider.prototype, "configuration", null);
221
-
222
200
  var _settings = /*#__PURE__*/_classPrivateFieldLooseKey("settings");
223
201
 
224
202
  class GlobalProviderRegistry extends Map {
@@ -285,9 +263,7 @@ class GlobalProviderRegistry extends Map {
285
263
  return super.delete(getClassOrSymbol(key));
286
264
  }
287
265
 
288
- createRegistry(type, model, options = {
289
- injectable: true
290
- }) {
266
+ createRegistry(type, model, options = {}) {
291
267
  const defaultOptions = this.getRegistrySettings(type);
292
268
  options = Object.assign(defaultOptions, _extends({}, options, {
293
269
  model
@@ -298,6 +274,14 @@ class GlobalProviderRegistry extends Map {
298
274
  return this;
299
275
  }
300
276
 
277
+ onInvoke(provider, locals, deps) {
278
+ const settings = _classPrivateFieldLooseBase(this, _settings)[_settings].get(provider.type);
279
+
280
+ if (settings != null && settings.onInvoke) {
281
+ settings.onInvoke(provider, locals, deps);
282
+ }
283
+ }
284
+
301
285
  getRegistrySettings(target) {
302
286
  let type = "provider";
303
287
 
@@ -312,13 +296,13 @@ class GlobalProviderRegistry extends Map {
312
296
  }
313
297
 
314
298
  return _classPrivateFieldLooseBase(this, _settings)[_settings].get(type) || {
315
- model: Provider,
316
- injectable: true
299
+ model: Provider
317
300
  };
318
301
  }
319
302
 
320
303
  createRegisterFn(type) {
321
304
  return (provider, instance) => {
305
+ // istanbul ignore next
322
306
  if (!provider.provide) {
323
307
  provider = {
324
308
  provide: provider
@@ -333,15 +317,6 @@ class GlobalProviderRegistry extends Map {
333
317
  this.merge(provider.provide, provider);
334
318
  };
335
319
  }
336
- /**
337
- * @deprecated
338
- */
339
- // istanbul ignore next
340
-
341
-
342
- getRegistry(target) {
343
- return this;
344
- }
345
320
  /**
346
321
  *
347
322
  * @param key
@@ -671,6 +646,11 @@ class ContextLogger {
671
646
  }
672
647
 
673
648
  const _excluded$1 = ["id", "injector", "logger", "ignoreLog"];
649
+
650
+ var _container = /*#__PURE__*/_classPrivateFieldLooseKey("container");
651
+
652
+ var _injector = /*#__PURE__*/_classPrivateFieldLooseKey("injector");
653
+
674
654
  class DIContext extends Map {
675
655
  constructor(_ref) {
676
656
  let {
@@ -686,14 +666,18 @@ class DIContext extends Map {
686
666
  * Date when request have been handled by the server. @@RequestLogger@@ use this date to log request duration.
687
667
  */
688
668
 
669
+ Object.defineProperty(this, _container, {
670
+ writable: true,
671
+ value: void 0
672
+ });
673
+ Object.defineProperty(this, _injector, {
674
+ writable: true,
675
+ value: void 0
676
+ });
689
677
  this.dateStart = new Date();
690
- /**
691
- * The request container used by the Ts.ED DI. It contain all services annotated with `@Scope(ProviderScope.REQUEST)`
692
- */
693
-
694
- this.container = new LocalsContainer();
678
+ _classPrivateFieldLooseBase(this, _container)[_container] = new LocalsContainer();
695
679
  this.id = id;
696
- injector && (this.injector = injector);
680
+ injector && (_classPrivateFieldLooseBase(this, _injector)[_injector] = injector);
697
681
  this.logger = new ContextLogger(logger, _extends({}, options, {
698
682
  dateStart: this.dateStart,
699
683
  id,
@@ -701,6 +685,21 @@ class DIContext extends Map {
701
685
  }));
702
686
  }
703
687
 
688
+ /**
689
+ * The request container used by the Ts.ED DI. It contain all services annotated with `@Scope(ProviderScope.REQUEST)`
690
+ */
691
+ get container() {
692
+ return _classPrivateFieldLooseBase(this, _container)[_container];
693
+ }
694
+ /**
695
+ *
696
+ */
697
+
698
+
699
+ get injector() {
700
+ return _classPrivateFieldLooseBase(this, _injector)[_injector];
701
+ }
702
+
704
703
  get env() {
705
704
  return this.injector.settings.env;
706
705
  }
@@ -709,11 +708,7 @@ class DIContext extends Map {
709
708
  await this.container.destroy();
710
709
  this.logger.destroy(); // @ts-ignore
711
710
 
712
- delete this.container; // @ts-ignore
713
-
714
- delete this.logger; // @ts-ignore
715
-
716
- delete this.injector;
711
+ delete this.logger;
717
712
  }
718
713
 
719
714
  async emit(eventName, ...args) {
@@ -739,9 +734,7 @@ function Scope(scope = ProviderScope.REQUEST) {
739
734
  *
740
735
  */
741
736
 
742
- GlobalProviders.createRegistry(ProviderType.CONTROLLER, Provider, {
743
- injectable: false
744
- });
737
+ GlobalProviders.createRegistry(ProviderType.CONTROLLER, Provider);
745
738
  /**
746
739
  * Register a provider configuration.
747
740
  * @param {IProvider<any>} provider
@@ -856,37 +849,6 @@ const registerValue = (provider, value) => {
856
849
  });
857
850
  GlobalProviders.merge(provider.provide, provider);
858
851
  };
859
- /**
860
- * Add a new service in the `ProviderRegistry`. This service will be built when `InjectorService` will be loaded.
861
- *
862
- * #### Example
863
- *
864
- * ```typescript
865
- * import {registerService, InjectorService} from "@tsed/di";
866
- *
867
- * export default class MyFooService {
868
- * constructor(){}
869
- * getFoo() {
870
- * return "test";
871
- * }
872
- * }
873
- *
874
- * registerService({provide: MyFooService});
875
- * // or
876
- * registerService(MyFooService);
877
- *
878
- * const injector = new InjectorService();
879
- * injector.load();
880
- *
881
- * const myFooService = injector.get<MyFooService>(MyFooService);
882
- * myFooService.getFoo(); // test
883
- * ```
884
- *
885
- * @param provider Provider configuration.
886
- * @deprecated Since 2021-05-15. Use registerProvider instead.
887
- */
888
-
889
- const registerService = GlobalProviders.createRegisterFn(ProviderType.SERVICE);
890
852
  /**
891
853
  * Add a new controller in the `ProviderRegistry`. This controller will be built when `InjectorService` will be loaded.
892
854
  *
@@ -2075,17 +2037,7 @@ let InjectorService = InjectorService_1 = class InjectorService extends Containe
2075
2037
  } = this.mapInvokeOptions(target, locals, options);
2076
2038
 
2077
2039
  if (provider) {
2078
- if (!provider.injectable && options.parent) {
2079
- throw new InjectionError(token, `${nameOf(token)} ${provider.type} is not injectable to another provider`);
2080
- }
2081
-
2082
- const {
2083
- onInvoke
2084
- } = GlobalProviders.getRegistrySettings(target);
2085
-
2086
- if (onInvoke) {
2087
- onInvoke(provider, locals, deps);
2088
- }
2040
+ GlobalProviders.onInvoke(provider, locals, deps);
2089
2041
  }
2090
2042
 
2091
2043
  let instance;
@@ -2328,103 +2280,6 @@ class DITest {
2328
2280
  }
2329
2281
  DITest._injector = null;
2330
2282
 
2331
- function isTsEnv() {
2332
- return require && require.extensions && require.extensions[".ts"] || process.env["TS_TEST"] || process.env.JEST_WORKER_ID !== undefined || process.env.NODE_ENV === "test";
2333
- }
2334
-
2335
- function mapExcludes(excludes) {
2336
- return excludes.map(s => `!${s.replace(/!/gi, "")}`);
2337
- }
2338
-
2339
- function mapExtensions(file) {
2340
- if (!isTsEnv()) {
2341
- file = file.replace(/\.ts$/i, ".js").replace(/{\.ts,\.js}$/i, ".js");
2342
- }
2343
-
2344
- return file;
2345
- }
2346
-
2347
- function cleanGlobPatterns(files, excludes) {
2348
- return [].concat(files).map(s => resolve(s)).concat(mapExcludes(excludes)).map(mapExtensions).map(s => normalizePath(s));
2349
- }
2350
-
2351
- async function importFiles(patterns, exclude) {
2352
- const files = await globby(cleanGlobPatterns(patterns, exclude));
2353
- const symbols = [];
2354
-
2355
- for (const file of files) {
2356
- if (!file.endsWith(".d.ts")) {
2357
- // prevent .d.ts import if the global pattern isn't correctly configured
2358
- try {
2359
- const exports = await import(file);
2360
- Object.keys(exports).forEach(key => symbols.push(exports[key]));
2361
- } catch (er) {
2362
- // istanbul ignore next
2363
- console.error(er); // istanbul ignore next
2364
-
2365
- process.exit(1);
2366
- }
2367
- }
2368
- }
2369
-
2370
- return symbols;
2371
- }
2372
-
2373
- async function resolveSymbols(item, excludes) {
2374
- if (isClass(item)) {
2375
- return [item];
2376
- }
2377
- /* istanbul ignore else */
2378
-
2379
-
2380
- if (!process.env.WEBPACK) {
2381
- return importFiles(item, excludes);
2382
- }
2383
- /* istanbul ignore next */
2384
-
2385
-
2386
- return [];
2387
- }
2388
-
2389
- function mapConfiguration(config) {
2390
- if (isArray(config)) {
2391
- return config.map(value => {
2392
- return {
2393
- values: [].concat(value)
2394
- };
2395
- });
2396
- }
2397
-
2398
- return Object.keys(config).reduce((list, key) => {
2399
- list.push({
2400
- endpoint: key,
2401
- values: [].concat(config[key])
2402
- });
2403
- return list;
2404
- }, []);
2405
- }
2406
- async function importComponents(config, excludes) {
2407
- if (!config) {
2408
- return [];
2409
- }
2410
-
2411
- config = mapConfiguration(config);
2412
- const promises = [];
2413
-
2414
- for (const option of config) {
2415
- promises.push(...option.values.map(async value => {
2416
- const symbols = await resolveSymbols(value, excludes);
2417
- return symbols.filter(isClass).map(symbol => ({
2418
- token: symbol,
2419
- route: option.endpoint
2420
- }));
2421
- }));
2422
- }
2423
-
2424
- const result = await Promise.all(promises);
2425
- return result.flat();
2426
- }
2427
-
2428
2283
  function getConfiguration(module, configuration = {}) {
2429
2284
  const store = Store.from(module).get("configuration") || {};
2430
2285
 
@@ -2441,34 +2296,5 @@ function getConfiguration(module, configuration = {}) {
2441
2296
  return config;
2442
2297
  }
2443
2298
 
2444
- async function recursiveImports(providers, settings, properties) {
2445
- const {
2446
- exclude = []
2447
- } = settings;
2448
- const promises = providers.map(({
2449
- token
2450
- }) => GlobalProviders.get(token)).filter(provider => (provider == null ? void 0 : provider.type) === ProviderType.MODULE && provider.configuration).map(provider => importProviders(_extends({
2451
- exclude
2452
- }, provider.configuration), properties));
2453
- return (await Promise.all(promises)).flat();
2454
- }
2455
- /**
2456
- * Import providers from given patterns.
2457
- *
2458
- * @param settings
2459
- * @param properties
2460
- */
2461
-
2462
-
2463
- async function importProviders(settings, properties = ["imports"]) {
2464
- const {
2465
- exclude = []
2466
- } = settings;
2467
- const promises = properties.map(key => importComponents(settings[key], exclude));
2468
- const providers = (await Promise.all(promises)).flat();
2469
- const children = await recursiveImports(providers, settings, properties);
2470
- return [...children, ...providers];
2471
- }
2472
-
2473
- export { Configuration, Constant, Container, ContextLogger, DIConfiguration, DIContext, DITest, DI_PARAMS, DI_PARAM_OPTIONS, GlobalProviderRegistry, GlobalProviders, INJECTABLE_PROP, Inject, Injectable, InjectablePropertyType, InjectionError, InjectorService, Intercept, Interceptor, LocalsContainer, Module, Opts, OverrideProvider, Provider, ProviderScope, ProviderType, Scope, Service, UndefinedTokenError, UseOpts, Value, createContainer, getConfiguration, importComponents, importFiles, importProviders, mapConfiguration, registerController, registerFactory, registerProvider, registerService, registerValue, setLoggerLevel };
2299
+ export { Configuration, Constant, Container, ContextLogger, DIConfiguration, DIContext, DITest, DI_PARAMS, DI_PARAM_OPTIONS, GlobalProviderRegistry, GlobalProviders, INJECTABLE_PROP, Inject, Injectable, InjectablePropertyType, InjectionError, InjectorService, Intercept, Interceptor, LocalsContainer, Module, Opts, OverrideProvider, Provider, ProviderScope, ProviderType, Scope, Service, UndefinedTokenError, UseOpts, Value, createContainer, getConfiguration, registerController, registerFactory, registerProvider, registerValue, setLoggerLevel };
2474
2300
  //# sourceMappingURL=index.modern.js.map