@nestjs/core 8.4.7 → 9.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 (57) hide show
  1. package/Readme.md +2 -0
  2. package/adapters/http-adapter.d.ts +5 -2
  3. package/errors/messages.js +3 -4
  4. package/exceptions/base-exception-filter.js +14 -2
  5. package/helpers/context-id-factory.d.ts +18 -1
  6. package/helpers/context-id-factory.js +14 -1
  7. package/helpers/is-durable.d.ts +2 -0
  8. package/helpers/is-durable.js +9 -0
  9. package/index.d.ts +1 -0
  10. package/index.js +1 -0
  11. package/injector/index.d.ts +1 -1
  12. package/injector/injector.d.ts +2 -1
  13. package/injector/injector.js +36 -18
  14. package/injector/instance-wrapper.d.ts +20 -2
  15. package/injector/instance-wrapper.js +61 -20
  16. package/injector/lazy-module-loader.js +1 -1
  17. package/injector/module-ref.js +2 -0
  18. package/injector/module.js +11 -2
  19. package/middleware/container.js +3 -1
  20. package/nest-application.d.ts +0 -2
  21. package/nest-application.js +0 -8
  22. package/package.json +6 -6
  23. package/repl/assign-to-object.util.d.ts +5 -0
  24. package/repl/assign-to-object.util.js +15 -0
  25. package/repl/constants.d.ts +1 -0
  26. package/repl/constants.js +4 -0
  27. package/repl/index.d.ts +1 -0
  28. package/repl/index.js +4 -0
  29. package/repl/native-functions/debug-repl-fn.d.ts +9 -0
  30. package/repl/native-functions/debug-repl-fn.js +46 -0
  31. package/repl/native-functions/get-relp-fn.d.ts +7 -0
  32. package/repl/native-functions/get-relp-fn.js +19 -0
  33. package/repl/native-functions/help-repl-fn.d.ts +7 -0
  34. package/repl/native-functions/help-repl-fn.js +29 -0
  35. package/repl/native-functions/index.d.ts +6 -0
  36. package/repl/native-functions/index.js +9 -0
  37. package/repl/native-functions/methods-repl-fn.d.ts +8 -0
  38. package/repl/native-functions/methods-repl-fn.js +28 -0
  39. package/repl/native-functions/resolve-repl-fn.d.ts +7 -0
  40. package/repl/native-functions/resolve-repl-fn.js +18 -0
  41. package/repl/native-functions/select-relp-fn.d.ts +7 -0
  42. package/repl/native-functions/select-relp-fn.js +18 -0
  43. package/repl/repl-context.d.ts +26 -0
  44. package/repl/repl-context.js +124 -0
  45. package/repl/repl-function.d.ts +18 -0
  46. package/repl/repl-function.js +19 -0
  47. package/repl/repl-logger.d.ts +5 -0
  48. package/repl/repl-logger.js +22 -0
  49. package/repl/repl.d.ts +4 -0
  50. package/repl/repl.interfaces.d.ts +16 -0
  51. package/repl/repl.interfaces.js +2 -0
  52. package/repl/repl.js +27 -0
  53. package/router/router-explorer.js +1 -101
  54. package/router/router-response-controller.js +3 -3
  55. package/scanner.d.ts +1 -2
  56. package/scanner.js +9 -11
  57. package/services/reflector.service.js +1 -2
@@ -4,7 +4,6 @@ exports.RouterExplorer = void 0;
4
4
  const constants_1 = require("@nestjs/common/constants");
5
5
  const version_type_enum_1 = require("@nestjs/common/enums/version-type.enum");
6
6
  const exceptions_1 = require("@nestjs/common/exceptions");
7
- const version_options_interface_1 = require("@nestjs/common/interfaces/version-options.interface");
8
7
  const logger_service_1 = require("@nestjs/common/services/logger.service");
9
8
  const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
10
9
  const pathToRegexp = require("path-to-regexp");
@@ -160,107 +159,8 @@ class RouterExplorer {
160
159
  };
161
160
  }
162
161
  applyVersionFilter(router, routePathMetadata, handler) {
163
- const { versioningOptions } = routePathMetadata;
164
162
  const version = this.routePathFactory.getVersion(routePathMetadata);
165
- if (router === null || router === void 0 ? void 0 : router.applyVersionFilter) {
166
- return router.applyVersionFilter(handler, version, versioningOptions);
167
- }
168
- /**
169
- * TODO(v9): This was left for backward-compatibility and can be removed.
170
- */
171
- return (req, res, next) => {
172
- var _a, _b, _c, _d;
173
- if (version === version_options_interface_1.VERSION_NEUTRAL) {
174
- return handler(req, res, next);
175
- }
176
- // URL Versioning is done via the path, so the filter continues forward
177
- if (versioningOptions.type === version_type_enum_1.VersioningType.URI) {
178
- return handler(req, res, next);
179
- }
180
- // Custom Extractor Versioning Handler
181
- if (versioningOptions.type === version_type_enum_1.VersioningType.CUSTOM) {
182
- const extractedVersion = versioningOptions.extractor(req);
183
- if (Array.isArray(version)) {
184
- if (Array.isArray(extractedVersion) &&
185
- version.filter(extractedVersion.includes).length) {
186
- return handler(req, res, next);
187
- }
188
- else if ((0, shared_utils_1.isString)(extractedVersion) &&
189
- version.includes(extractedVersion)) {
190
- return handler(req, res, next);
191
- }
192
- }
193
- else {
194
- if (Array.isArray(extractedVersion) &&
195
- extractedVersion.includes(version)) {
196
- return handler(req, res, next);
197
- }
198
- else if ((0, shared_utils_1.isString)(extractedVersion) &&
199
- version === extractedVersion) {
200
- return handler(req, res, next);
201
- }
202
- }
203
- }
204
- // Media Type (Accept Header) Versioning Handler
205
- if (versioningOptions.type === version_type_enum_1.VersioningType.MEDIA_TYPE) {
206
- const MEDIA_TYPE_HEADER = 'Accept';
207
- const acceptHeaderValue = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a[MEDIA_TYPE_HEADER]) ||
208
- ((_b = req.headers) === null || _b === void 0 ? void 0 : _b[MEDIA_TYPE_HEADER.toLowerCase()]);
209
- const acceptHeaderVersionParameter = acceptHeaderValue
210
- ? acceptHeaderValue.split(';')[1]
211
- : undefined;
212
- // No version was supplied
213
- if ((0, shared_utils_1.isUndefined)(acceptHeaderVersionParameter)) {
214
- if (Array.isArray(version)) {
215
- if (version.includes(version_options_interface_1.VERSION_NEUTRAL)) {
216
- return handler(req, res, next);
217
- }
218
- }
219
- }
220
- else {
221
- const headerVersion = acceptHeaderVersionParameter.split(versioningOptions.key)[1];
222
- if (Array.isArray(version)) {
223
- if (version.includes(headerVersion)) {
224
- return handler(req, res, next);
225
- }
226
- }
227
- else if ((0, shared_utils_1.isString)(version)) {
228
- if (version === headerVersion) {
229
- return handler(req, res, next);
230
- }
231
- }
232
- }
233
- }
234
- // Header Versioning Handler
235
- else if (versioningOptions.type === version_type_enum_1.VersioningType.HEADER) {
236
- const customHeaderVersionParameter = ((_c = req.headers) === null || _c === void 0 ? void 0 : _c[versioningOptions.header]) ||
237
- ((_d = req.headers) === null || _d === void 0 ? void 0 : _d[versioningOptions.header.toLowerCase()]);
238
- // No version was supplied
239
- if ((0, shared_utils_1.isUndefined)(customHeaderVersionParameter)) {
240
- if (Array.isArray(version)) {
241
- if (version.includes(version_options_interface_1.VERSION_NEUTRAL)) {
242
- return handler(req, res, next);
243
- }
244
- }
245
- }
246
- else {
247
- if (Array.isArray(version)) {
248
- if (version.includes(customHeaderVersionParameter)) {
249
- return handler(req, res, next);
250
- }
251
- }
252
- else if ((0, shared_utils_1.isString)(version)) {
253
- if (version === customHeaderVersionParameter) {
254
- return handler(req, res, next);
255
- }
256
- }
257
- }
258
- }
259
- if (!next) {
260
- throw new exceptions_1.InternalServerErrorException('HTTP adapter does not support filtering on version');
261
- }
262
- return next();
263
- };
163
+ return router.applyVersionFilter(handler, version, routePathMetadata.versioningOptions);
264
164
  }
265
165
  createCallbackProxy(instance, callback, methodName, moduleRef, requestMethod, contextId = constants_2.STATIC_CONTEXT, inquirerId) {
266
166
  const executionContext = this.executionContextCreator.create(instance, callback, methodName, moduleRef, requestMethod, contextId, inquirerId);
@@ -29,7 +29,7 @@ class RouterResponseController {
29
29
  return this.applicationRef.render(response, template, result);
30
30
  }
31
31
  async transformToResult(resultOrDeferred) {
32
- if (resultOrDeferred && (0, shared_utils_1.isFunction)(resultOrDeferred.subscribe)) {
32
+ if ((0, rxjs_1.isObservable)(resultOrDeferred)) {
33
33
  return (0, rxjs_1.lastValueFrom)(resultOrDeferred);
34
34
  }
35
35
  return resultOrDeferred;
@@ -80,8 +80,8 @@ class RouterResponseController {
80
80
  subscription.unsubscribe();
81
81
  });
82
82
  }
83
- assertObservable(result) {
84
- if (!(0, shared_utils_1.isFunction)(result.subscribe)) {
83
+ assertObservable(value) {
84
+ if (!(0, rxjs_1.isObservable)(value)) {
85
85
  throw new ReferenceError('You must return an Observable stream to use Server-Sent Events (SSE).');
86
86
  }
87
87
  }
package/scanner.d.ts CHANGED
@@ -11,7 +11,6 @@ export declare class DependenciesScanner {
11
11
  private readonly container;
12
12
  private readonly metadataScanner;
13
13
  private readonly applicationConfig;
14
- private readonly logger;
15
14
  private readonly applicationProvidersApplyMap;
16
15
  constructor(container: NestContainer, metadataScanner: MetadataScanner, applicationConfig?: ApplicationConfig);
17
16
  scan(module: Type<any>): Promise<void>;
@@ -33,7 +32,7 @@ export declare class DependenciesScanner {
33
32
  insertInjectable(injectable: Type<Injectable>, token: string, host: Type<Injectable>): void;
34
33
  insertExportedProvider(exportedProvider: Type<Injectable>, token: string): void;
35
34
  insertController(controller: Type<Controller>, token: string): void;
36
- reflectMetadata(metatype: Type<any>, metadataKey: string): any;
35
+ reflectMetadata(metadataKey: string, metatype: Type<any>): any;
37
36
  registerCoreModule(): Promise<void>;
38
37
  /**
39
38
  * Add either request or transient globally scoped enhancers
package/scanner.js CHANGED
@@ -20,7 +20,6 @@ class DependenciesScanner {
20
20
  this.container = container;
21
21
  this.metadataScanner = metadataScanner;
22
22
  this.applicationConfig = applicationConfig;
23
- this.logger = new common_1.Logger(DependenciesScanner.name);
24
23
  this.applicationProvidersApplyMap = [];
25
24
  }
26
25
  async scan(module) {
@@ -42,9 +41,9 @@ class DependenciesScanner {
42
41
  moduleDefinition = moduleDefinition.forwardRef();
43
42
  }
44
43
  const modules = !this.isDynamicModule(moduleDefinition)
45
- ? this.reflectMetadata(moduleDefinition, constants_1.MODULE_METADATA.IMPORTS)
44
+ ? this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, moduleDefinition)
46
45
  : [
47
- ...this.reflectMetadata(moduleDefinition.module, constants_1.MODULE_METADATA.IMPORTS),
46
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, moduleDefinition.module),
48
47
  ...(moduleDefinition.imports || []),
49
48
  ];
50
49
  let registeredModuleRefs = [];
@@ -74,8 +73,7 @@ class DependenciesScanner {
74
73
  if (this.isInjectable(moduleToAdd) ||
75
74
  this.isController(moduleToAdd) ||
76
75
  this.isExceptionFilter(moduleToAdd)) {
77
- // TODO(v9): Throw the exception instead of printing a warning
78
- this.logger.warn(new invalid_class_module_exception_1.InvalidClassModuleException(moduleDefinition, scope).message);
76
+ throw new invalid_class_module_exception_1.InvalidClassModuleException(moduleDefinition, scope);
79
77
  }
80
78
  return this.container.addModule(moduleToAdd, scope);
81
79
  }
@@ -89,7 +87,7 @@ class DependenciesScanner {
89
87
  }
90
88
  async reflectImports(module, token, context) {
91
89
  const modules = [
92
- ...this.reflectMetadata(module, constants_1.MODULE_METADATA.IMPORTS),
90
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.IMPORTS, module),
93
91
  ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.IMPORTS),
94
92
  ];
95
93
  for (const related of modules) {
@@ -98,7 +96,7 @@ class DependenciesScanner {
98
96
  }
99
97
  reflectProviders(module, token) {
100
98
  const providers = [
101
- ...this.reflectMetadata(module, constants_1.MODULE_METADATA.PROVIDERS),
99
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.PROVIDERS, module),
102
100
  ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.PROVIDERS),
103
101
  ];
104
102
  providers.forEach(provider => {
@@ -108,7 +106,7 @@ class DependenciesScanner {
108
106
  }
109
107
  reflectControllers(module, token) {
110
108
  const controllers = [
111
- ...this.reflectMetadata(module, constants_1.MODULE_METADATA.CONTROLLERS),
109
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.CONTROLLERS, module),
112
110
  ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.CONTROLLERS),
113
111
  ];
114
112
  controllers.forEach(item => {
@@ -128,13 +126,13 @@ class DependenciesScanner {
128
126
  }
129
127
  reflectExports(module, token) {
130
128
  const exports = [
131
- ...this.reflectMetadata(module, constants_1.MODULE_METADATA.EXPORTS),
129
+ ...this.reflectMetadata(constants_1.MODULE_METADATA.EXPORTS, module),
132
130
  ...this.container.getDynamicMetadataByToken(token, constants_1.MODULE_METADATA.EXPORTS),
133
131
  ];
134
132
  exports.forEach(exportedProvider => this.insertExportedProvider(exportedProvider, token));
135
133
  }
136
134
  reflectInjectables(component, token, metadataKey) {
137
- const controllerInjectables = this.reflectMetadata(component, metadataKey);
135
+ const controllerInjectables = this.reflectMetadata(metadataKey, component);
138
136
  const methodsInjectables = this.metadataScanner.scanFromPrototype(null, component.prototype, this.reflectKeyMetadata.bind(this, component, metadataKey));
139
137
  const flattenMethodsInjectables = this.flatten(methodsInjectables);
140
138
  const combinedInjectables = [
@@ -233,7 +231,7 @@ class DependenciesScanner {
233
231
  insertController(controller, token) {
234
232
  this.container.addController(controller, token);
235
233
  }
236
- reflectMetadata(metatype, metadataKey) {
234
+ reflectMetadata(metadataKey, metatype) {
237
235
  return Reflect.getMetadata(metadataKey, metatype) || [];
238
236
  }
239
237
  async registerCoreModule() {
@@ -63,8 +63,7 @@ class Reflector {
63
63
  *
64
64
  */
65
65
  getAllAndOverride(metadataKey, targets) {
66
- const metadataCollection = this.getAll(metadataKey, targets).filter(item => item !== undefined);
67
- return metadataCollection[0];
66
+ return this.getAll(metadataKey, targets).find(item => item !== undefined);
68
67
  }
69
68
  }
70
69
  exports.Reflector = Reflector;