@impactor/nest 3.0.2 → 5.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 (133) hide show
  1. package/index.d.ts +41 -41
  2. package/package.json +29 -33
  3. package/src/configs/app.d.ts +5 -4
  4. package/src/configs/app.js +10 -18
  5. package/src/configs/app.js.map +1 -1
  6. package/src/configs/database.js +1 -11
  7. package/src/configs/database.js.map +1 -1
  8. package/src/configs/microservice.js +6 -16
  9. package/src/configs/microservice.js.map +1 -1
  10. package/src/configs/multi-queue-rabbitmq-server.js +28 -34
  11. package/src/configs/multi-queue-rabbitmq-server.js.map +1 -1
  12. package/src/configs/redis-config.js +1 -11
  13. package/src/configs/redis-config.js.map +1 -1
  14. package/src/create-app.d.ts +1 -1
  15. package/src/create-app.js +44 -61
  16. package/src/create-app.js.map +1 -1
  17. package/src/create-microservice.d.ts +1 -1
  18. package/src/create-microservice.js +18 -22
  19. package/src/create-microservice.js.map +1 -1
  20. package/src/create-testing-microservice.d.ts +1 -1
  21. package/src/create-testing-microservice.js +16 -20
  22. package/src/create-testing-microservice.js.map +1 -1
  23. package/src/decorators/controller/add-decorators/add-controller-path.d.ts +1 -1
  24. package/src/decorators/controller/add-decorators/add-controller-path.js +7 -15
  25. package/src/decorators/controller/add-decorators/add-controller-path.js.map +1 -1
  26. package/src/decorators/controller/add-decorators/add-controller-tags.d.ts +1 -1
  27. package/src/decorators/controller/add-decorators/add-controller-tags.js +9 -17
  28. package/src/decorators/controller/add-decorators/add-controller-tags.js.map +1 -1
  29. package/src/decorators/controller/add-decorators/add-http-method.d.ts +2 -2
  30. package/src/decorators/controller/add-decorators/add-http-method.js +13 -20
  31. package/src/decorators/controller/add-decorators/add-http-method.js.map +1 -1
  32. package/src/decorators/controller/add-decorators/add-swagger-body.d.ts +2 -2
  33. package/src/decorators/controller/add-decorators/add-swagger-body.js +7 -17
  34. package/src/decorators/controller/add-decorators/add-swagger-body.js.map +1 -1
  35. package/src/decorators/controller/add-decorators/add-swagger-operation.d.ts +2 -2
  36. package/src/decorators/controller/add-decorators/add-swagger-operation.js +8 -15
  37. package/src/decorators/controller/add-decorators/add-swagger-operation.js.map +1 -1
  38. package/src/decorators/controller/add-decorators/add-swagger-params.d.ts +2 -2
  39. package/src/decorators/controller/add-decorators/add-swagger-params.js +9 -16
  40. package/src/decorators/controller/add-decorators/add-swagger-params.js.map +1 -1
  41. package/src/decorators/controller/add-decorators/add-swagger-response.d.ts +2 -2
  42. package/src/decorators/controller/add-decorators/add-swagger-response.js +10 -20
  43. package/src/decorators/controller/add-decorators/add-swagger-response.js.map +1 -1
  44. package/src/decorators/controller/controller.decorator.d.ts +1 -1
  45. package/src/decorators/controller/controller.decorator.js +12 -13
  46. package/src/decorators/controller/controller.decorator.js.map +1 -1
  47. package/src/decorators/controller/controller.factory.d.ts +1 -1
  48. package/src/decorators/controller/controller.factory.js +59 -67
  49. package/src/decorators/controller/controller.factory.js.map +1 -1
  50. package/src/decorators/controller/default-options.d.ts +1 -1
  51. package/src/decorators/controller/default-options.js +11 -26
  52. package/src/decorators/controller/default-options.js.map +1 -1
  53. package/src/decorators/controller/dto/empty.dto.js +2 -12
  54. package/src/decorators/controller/dto/empty.dto.js.map +1 -1
  55. package/src/decorators/controller/dto/update-response.dto.js +2 -12
  56. package/src/decorators/controller/dto/update-response.dto.js.map +1 -1
  57. package/src/decorators/controller/interceptors/query.interceptor.d.ts +1 -1
  58. package/src/decorators/controller/interceptors/query.interceptor.js +10 -19
  59. package/src/decorators/controller/interceptors/query.interceptor.js.map +1 -1
  60. package/src/decorators/controller/route-handler.d.ts +2 -2
  61. package/src/decorators/controller/route-handler.js +8 -16
  62. package/src/decorators/controller/route-handler.js.map +1 -1
  63. package/src/decorators/controller/route.decorator.d.ts +1 -1
  64. package/src/decorators/controller/route.decorator.js +11 -11
  65. package/src/decorators/controller/route.decorator.js.map +1 -1
  66. package/src/decorators/controller/services/crud-typeorm.service.d.ts +1 -2
  67. package/src/decorators/controller/services/crud-typeorm.service.js +19 -24
  68. package/src/decorators/controller/services/crud-typeorm.service.js.map +1 -1
  69. package/src/decorators/controller/types/index.d.ts +2 -2
  70. package/src/decorators/controller/types/index.js +1 -4
  71. package/src/decorators/controller/types/index.js.map +1 -1
  72. package/src/decorators/controller/utils/merge-options.d.ts +1 -1
  73. package/src/decorators/controller/utils/merge-options.js +3 -13
  74. package/src/decorators/controller/utils/merge-options.js.map +1 -1
  75. package/src/decorators/controller/utils/reflect.d.ts +2 -2
  76. package/src/decorators/controller/utils/reflect.js +24 -38
  77. package/src/decorators/controller/utils/reflect.js.map +1 -1
  78. package/src/decorators/entity.decorator.js +42 -35
  79. package/src/decorators/entity.decorator.js.map +1 -1
  80. package/src/decorators/prop.decorator.js +79 -38
  81. package/src/decorators/prop.decorator.js.map +1 -1
  82. package/src/exceptions/rpc-bad-request.exception.d.ts +1 -1
  83. package/src/exceptions/rpc-bad-request.exception.js +5 -15
  84. package/src/exceptions/rpc-bad-request.exception.js.map +1 -1
  85. package/src/exceptions/rpc-base.exception.js +10 -15
  86. package/src/exceptions/rpc-base.exception.js.map +1 -1
  87. package/src/exceptions/rpc-conflict.exception.d.ts +1 -1
  88. package/src/exceptions/rpc-conflict.exception.js +5 -15
  89. package/src/exceptions/rpc-conflict.exception.js.map +1 -1
  90. package/src/exceptions/rpc-internal-server-error.exception.d.ts +1 -1
  91. package/src/exceptions/rpc-internal-server-error.exception.js +5 -15
  92. package/src/exceptions/rpc-internal-server-error.exception.js.map +1 -1
  93. package/src/exceptions/rpc-method-not-allowed.exception.d.ts +1 -1
  94. package/src/exceptions/rpc-method-not-allowed.exception.js +5 -15
  95. package/src/exceptions/rpc-method-not-allowed.exception.js.map +1 -1
  96. package/src/exceptions/rpc-not-found.exception.d.ts +1 -1
  97. package/src/exceptions/rpc-not-found.exception.js +5 -15
  98. package/src/exceptions/rpc-not-found.exception.js.map +1 -1
  99. package/src/exceptions/rpc-not-implemented.exception.d.ts +1 -1
  100. package/src/exceptions/rpc-not-implemented.exception.js +5 -15
  101. package/src/exceptions/rpc-not-implemented.exception.js.map +1 -1
  102. package/src/exceptions/rpc-unauthorized.exception.d.ts +1 -1
  103. package/src/exceptions/rpc-unauthorized.exception.js +5 -15
  104. package/src/exceptions/rpc-unauthorized.exception.js.map +1 -1
  105. package/src/filters/error-to-rpc-exception.filter.js +12 -22
  106. package/src/filters/error-to-rpc-exception.filter.js.map +1 -1
  107. package/src/filters/error-to-ws-exception.filter.js +10 -20
  108. package/src/filters/error-to-ws-exception.filter.js.map +1 -1
  109. package/src/filters/typeorm-exception.filter.js +9 -19
  110. package/src/filters/typeorm-exception.filter.js.map +1 -1
  111. package/src/filters/ws-exception.filter.js +6 -16
  112. package/src/filters/ws-exception.filter.js.map +1 -1
  113. package/src/generate-metadata.d.ts +3 -3
  114. package/src/generate-metadata.js +18 -74
  115. package/src/generate-metadata.js.map +1 -1
  116. package/src/guards/auth.guard.js +43 -44
  117. package/src/guards/auth.guard.js.map +1 -1
  118. package/src/modules/basic/basic.controller.js +6 -16
  119. package/src/modules/basic/basic.controller.js.map +1 -1
  120. package/src/modules/basic/basic.module.js +15 -23
  121. package/src/modules/basic/basic.module.js.map +1 -1
  122. package/src/modules/basic/basic.service.js +4 -14
  123. package/src/modules/basic/basic.service.js.map +1 -1
  124. package/src/register-entities.js +37 -20
  125. package/src/register-entities.js.map +1 -1
  126. package/src/utils/logger.js +2 -12
  127. package/src/utils/logger.js.map +1 -1
  128. package/src/utils/typeorm-to-swagger.d.ts +1 -1
  129. package/src/utils/typeorm-to-swagger.js +4 -11
  130. package/src/utils/typeorm-to-swagger.js.map +1 -1
  131. package/nx.json +0 -190
  132. package/src/nest-swagger-metadata.js +0 -593
  133. package/src/nest-swagger-metadata.js.map +0 -1
package/src/create-app.js CHANGED
@@ -1,35 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "createApp", {
6
- enumerable: true,
7
- get: function() {
8
- return createApp;
9
- }
10
- });
11
- const _core = require("@nestjs/core");
12
- const _swagger = require("@nestjs/swagger");
13
- const _platformfastify = require("@nestjs/platform-fastify");
14
- const _multipart = /*#__PURE__*/ _interop_require_default(require("@fastify/multipart"));
15
- const _app = require("./configs/app");
16
- const _common = require("@nestjs/common");
17
- const _javascript = require("@impactor/javascript");
18
- const _nodejs = require("@impactor/nodejs");
19
- const _generatemetadata = require("./generate-metadata");
20
- const _logger = require("./utils/logger");
21
- const _registerentities = require("./register-entities");
22
- function _interop_require_default(obj) {
23
- return obj && obj.__esModule ? obj : {
24
- default: obj
25
- };
26
- }
27
- function createApp(module, options) {
1
+ import { NestFactory } from "@nestjs/core";
2
+ import { SwaggerModule } from "@nestjs/swagger";
3
+ import { FastifyAdapter } from "@nestjs/platform-fastify";
4
+ import multiPart from "@fastify/multipart";
5
+ import { appConfig } from "./configs/app.js";
6
+ import { ValidationPipe } from "@nestjs/common";
7
+ import { merge } from "@impactor/javascript";
8
+ import { isDirSync, readSync } from "@impactor/nodejs";
9
+ import { registerEntities } from "./register-entities.js";
10
+ // todo: add type to `module`
11
+ export function createApp(module, options) {
28
12
  // todo: options.adapter = fastify | express
29
- return _core.NestFactory.create(module, new _platformfastify.FastifyAdapter(), options).then(async (app)=>{
30
- let pkg = typeof options?.package === 'string' ? (0, _nodejs.isDirSync)(options.package) ? (0, _nodejs.readSync)(`${options.package}/package.json`) : (0, _nodejs.readSync)(options.package) : options?.package || {};
31
- let opts = (0, _javascript.merge)([
32
- _app.appConfig,
13
+ return NestFactory.create(module, new FastifyAdapter(), options).then(async (app)=>{
14
+ let pkg = typeof options?.package === 'string' ? isDirSync(options.package) ? readSync(`${options.package}/package.json`) : readSync(options.package) : options?.package || {};
15
+ let opts = merge([
16
+ appConfig,
33
17
  {
34
18
  swagger: {
35
19
  info: {
@@ -54,7 +38,7 @@ function createApp(module, options) {
54
38
  if (opts.versioning) {
55
39
  app.enableVersioning(opts.versioning);
56
40
  }
57
- app.useGlobalPipes(new _common.ValidationPipe({
41
+ app.useGlobalPipes(new ValidationPipe({
58
42
  // apply class-transformer decorators, such as @Transform()
59
43
  transform: true,
60
44
  // Strip out any properties that are not defined in your DTO.
@@ -65,44 +49,43 @@ function createApp(module, options) {
65
49
  }));
66
50
  // this must be before registering Swagger
67
51
  if (opts.registerEntities !== false) {
68
- if (Array.isArray(opts.registerEntities)) {
69
- (0, _registerentities.registerEntities)(opts.registerEntities);
70
- } else {
71
- (0, _registerentities.registerEntities)();
72
- }
52
+ registerEntities(Array.isArray(opts.registerEntities) ? opts.registerEntities : undefined);
73
53
  }
74
54
  // swagger docs
75
55
  // navigate to localhost:PORT to see API docs
76
56
  // navigate to localhost:PORT/-json to download the API json file
77
57
  if (opts.swagger) {
78
- // emit swagger metadata
79
- // this file will be generated in runtime
80
- // todo: when emitting swagger metadata using generateSwaggerMetadata(),
81
- // the TSDocs comments are no longer read by nest,
82
- // and we must manually add @ApiProperty() to all properties
83
- let metadataPath = (0, _generatemetadata.generateSwaggerMetadata)({
84
- // @ts-ignore `import.meta` requires `module: nodeNext`
85
- outputDir: __dirname,
86
- // fixes: src/nest-swagger-metadata.ts:2:1 - error TS2742:
87
- // The inferred type of 'default' cannot be named without a reference to '../node_modules/@impactor/utils/src/dto/order.dto'.
88
- // This is likely not portable. A type annotation is necessary.
89
- transform: (content)=>content.replaceAll('../node_modules/@impactor/', '@impactor/')
90
- });
91
- // todo: the file by default is related to CWD(),
92
- // change cwd of the target "serve" in nx.json to "{projectRoot}/dist"
93
- await (0, _generatemetadata.loadSwaggerMetadata)(metadataPath).then(()=>_logger.logger.debug('Swagger metadata loaded'))// ignore if the metadata file hasn't generated
94
- .catch((error)=>{
95
- _logger.logger.warn(`Failed to load Swagger metadata`, error);
96
- });
97
- if (opts.swagger) {
98
- let document = _swagger.SwaggerModule.createDocument(app, opts.swagger);
99
- _swagger.SwaggerModule.setup(opts.swaggerPath || '', app, document);
100
- }
58
+ // // emit swagger metadata
59
+ // // this file will be generated in runtime
60
+ // // todo: when emitting swagger metadata using generateSwaggerMetadata(),
61
+ // // the TSDocs comments are no longer read by nest,
62
+ // // and we must manually add @ApiProperty() to all properties
63
+ // // this requires tsconfig to be exists where it runs, so it is better to run in build time instead, i.e. via a separate post-build script.
64
+ // // and `loadSwaggerMetadata()` here
65
+ // let metadataPath = generateSwaggerMetadata({
66
+ // // @ts-ignore `import.meta` requires `module: nodeNext`
67
+ // outputDir: import.meta.dirname,
68
+ // // fixes: src/nest-swagger-metadata.ts:2:1 - error TS2742:
69
+ // // The inferred type of 'default' cannot be named without a reference to '../node_modules/@impactor/utils/src/dto/order.dto'.
70
+ // // This is likely not portable. A type annotation is necessary.
71
+ // transform: (content) =>
72
+ // content.replaceAll(/.+node_modules\/@impactor\//g, '@impactor/'),
73
+ // });
74
+ // // todo: the file by default is related to CWD(),
75
+ // // change cwd of the target "serve" in nx.json to "{projectRoot}/dist"
76
+ // await loadSwaggerMetadata(metadataPath)
77
+ // .then(() => logger.debug('Swagger metadata loaded'))
78
+ // // ignore if the metadata file hasn't generated
79
+ // .catch((error) => {
80
+ // logger.warn(`Failed to load Swagger metadata`, error);
81
+ // });
82
+ let document = SwaggerModule.createDocument(app, opts.swagger);
83
+ SwaggerModule.setup(opts.swaggerPath || '', app, document);
101
84
  }
102
85
  // todo: import `FastifyMulterModule` from '@nest-lab/fastify-multer' in the module
103
86
  // that wants to receive files, instead of registering 'multipart' globally
104
87
  if (opts.multipart !== false) {
105
- await app.register(_multipart.default);
88
+ await app.register(multiPart);
106
89
  }
107
90
  return opts.port ? app// if the server runs inside a container, it should bound to '0.0.0.0' instead of 'localhost' (the default)
108
91
  // so it can listen to the external requests i.e. from the browser
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/create-app.ts"],"sourcesContent":["import { NestFactory } from '@nestjs/core';\nimport { OpenAPIObject, SwaggerModule } from '@nestjs/swagger';\nimport {\n FastifyAdapter,\n type NestFastifyApplication,\n} from '@nestjs/platform-fastify';\nimport multiPart from '@fastify/multipart';\nimport { type IAppConfig, appConfig } from './configs/app';\nimport { ValidationPipe } from '@nestjs/common';\nimport { merge } from '@impactor/javascript';\nimport { isDirSync, readSync } from '@impactor/nodejs';\nimport {\n generateSwaggerMetadata,\n loadSwaggerMetadata,\n} from './generate-metadata';\nimport { logger } from './utils/logger';\nimport { registerEntities } from './register-entities';\n\n// todo: add type to `module`\nexport function createApp(module: any, options?: IAppConfig) {\n // todo: options.adapter = fastify | express\n return NestFactory.create<NestFastifyApplication>(\n module,\n new FastifyAdapter(),\n options,\n ).then(async (app) => {\n let pkg = (\n typeof options?.package === 'string'\n ? isDirSync(options.package)\n ? // todo: use IPackage interface\n readSync(`${options.package}/package.json`)\n : readSync(options.package)\n : options?.package || {}\n ) as Record<string, string>;\n\n let opts = merge(\n [\n appConfig,\n {\n swagger: {\n info: {\n title: pkg.name,\n description:\n pkg.description || `${pkg.name ? `${pkg.name} ` : ''}API`,\n version: `v${pkg.version || '1.0'}`,\n },\n },\n },\n options,\n ],\n {\n deep: true,\n },\n ) as IAppConfig;\n\n if (opts?.prefix) {\n if (typeof opts.prefix === 'string') {\n app.setGlobalPrefix(opts.prefix);\n } else {\n let { prefix, ...prefixOptions } = opts.prefix;\n app.setGlobalPrefix(prefix, prefixOptions);\n }\n }\n\n if (opts.versioning) {\n app.enableVersioning(opts.versioning);\n }\n\n app.useGlobalPipes(\n new ValidationPipe({\n // apply class-transformer decorators, such as @Transform()\n transform: true,\n // Strip out any properties that are not defined in your DTO.\n whitelist: true,\n // Instead of silently removing unknown fields, it throws a 400 error.\n forbidNonWhitelisted: true,\n ...opts.validationPipe,\n }),\n );\n\n // this must be before registering Swagger\n if (opts.registerEntities !== false) {\n if (Array.isArray(opts.registerEntities)) {\n registerEntities(opts.registerEntities);\n } else {\n registerEntities();\n }\n }\n\n // swagger docs\n // navigate to localhost:PORT to see API docs\n // navigate to localhost:PORT/-json to download the API json file\n if (opts.swagger) {\n // emit swagger metadata\n // this file will be generated in runtime\n // todo: when emitting swagger metadata using generateSwaggerMetadata(),\n // the TSDocs comments are no longer read by nest,\n // and we must manually add @ApiProperty() to all properties\n let metadataPath = generateSwaggerMetadata({\n // @ts-ignore `import.meta` requires `module: nodeNext`\n outputDir: import.meta.dirname,\n // fixes: src/nest-swagger-metadata.ts:2:1 - error TS2742:\n // The inferred type of 'default' cannot be named without a reference to '../node_modules/@impactor/utils/src/dto/order.dto'.\n // This is likely not portable. A type annotation is necessary.\n transform: (content) =>\n content.replaceAll('../node_modules/@impactor/', '@impactor/'),\n });\n\n // todo: the file by default is related to CWD(),\n // change cwd of the target \"serve\" in nx.json to \"{projectRoot}/dist\"\n await loadSwaggerMetadata(metadataPath)\n .then(() => logger.debug('Swagger metadata loaded'))\n // ignore if the metadata file hasn't generated\n .catch((error) => {\n logger.warn(`Failed to load Swagger metadata`, error);\n });\n\n if (opts.swagger) {\n let document = SwaggerModule.createDocument(\n app,\n opts.swagger as OpenAPIObject,\n );\n SwaggerModule.setup(opts.swaggerPath || '', app, document);\n }\n }\n\n // todo: import `FastifyMulterModule` from '@nest-lab/fastify-multer' in the module\n // that wants to receive files, instead of registering 'multipart' globally\n if (opts.multipart !== false) {\n await app.register(multiPart);\n }\n\n return opts.port\n ? app\n // if the server runs inside a container, it should bound to '0.0.0.0' instead of 'localhost' (the default)\n // so it can listen to the external requests i.e. from the browser\n .listen(opts.port, '0.0.0.0')\n .then((_server) => opts.onServerRun?.(app))\n .catch((error) => opts.onServerError?.(error, app))\n .then(() => app)\n : app;\n });\n}\n"],"names":["createApp","module","options","NestFactory","create","FastifyAdapter","then","app","pkg","package","isDirSync","readSync","opts","merge","appConfig","swagger","info","title","name","description","version","deep","prefix","setGlobalPrefix","prefixOptions","versioning","enableVersioning","useGlobalPipes","ValidationPipe","transform","whitelist","forbidNonWhitelisted","validationPipe","registerEntities","Array","isArray","metadataPath","generateSwaggerMetadata","outputDir","content","replaceAll","loadSwaggerMetadata","logger","debug","catch","error","warn","document","SwaggerModule","createDocument","setup","swaggerPath","multipart","register","multiPart","port","listen","_server","onServerRun","onServerError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/create-app.ts"],"sourcesContent":["import { NestFactory } from '@nestjs/core';\nimport { OpenAPIObject, SwaggerModule } from '@nestjs/swagger';\nimport {\n FastifyAdapter,\n type NestFastifyApplication,\n} from '@nestjs/platform-fastify';\nimport multiPart from '@fastify/multipart';\nimport { type IAppConfig, appConfig } from './configs/app.js';\nimport { ValidationPipe } from '@nestjs/common';\nimport { merge } from '@impactor/javascript';\nimport { isDirSync, readSync } from '@impactor/nodejs';\nimport {\n generateSwaggerMetadata,\n loadSwaggerMetadata,\n} from './generate-metadata.js';\nimport { logger } from './utils/logger.js';\nimport { registerEntities } from './register-entities.js';\n\n// todo: add type to `module`\nexport function createApp(module: any, options?: IAppConfig) {\n // todo: options.adapter = fastify | express\n return NestFactory.create<NestFastifyApplication>(\n module,\n new FastifyAdapter(),\n options,\n ).then(async (app) => {\n let pkg = (\n typeof options?.package === 'string'\n ? isDirSync(options.package)\n ? // todo: use IPackage interface\n readSync(`${options.package}/package.json`)\n : readSync(options.package)\n : options?.package || {}\n ) as Record<string, string>;\n\n let opts = merge(\n [\n appConfig,\n {\n swagger: {\n info: {\n title: pkg.name,\n description:\n pkg.description || `${pkg.name ? `${pkg.name} ` : ''}API`,\n version: `v${pkg.version || '1.0'}`,\n },\n },\n },\n options,\n ],\n {\n deep: true,\n },\n ) as IAppConfig;\n\n if (opts?.prefix) {\n if (typeof opts.prefix === 'string') {\n app.setGlobalPrefix(opts.prefix);\n } else {\n let { prefix, ...prefixOptions } = opts.prefix;\n app.setGlobalPrefix(prefix, prefixOptions);\n }\n }\n\n if (opts.versioning) {\n app.enableVersioning(opts.versioning);\n }\n\n app.useGlobalPipes(\n new ValidationPipe({\n // apply class-transformer decorators, such as @Transform()\n transform: true,\n // Strip out any properties that are not defined in your DTO.\n whitelist: true,\n // Instead of silently removing unknown fields, it throws a 400 error.\n forbidNonWhitelisted: true,\n ...opts.validationPipe,\n }),\n );\n\n // this must be before registering Swagger\n if (opts.registerEntities !== false) {\n registerEntities(\n Array.isArray(opts.registerEntities)\n ? opts.registerEntities\n : undefined,\n );\n }\n\n // swagger docs\n // navigate to localhost:PORT to see API docs\n // navigate to localhost:PORT/-json to download the API json file\n if (opts.swagger) {\n // // emit swagger metadata\n // // this file will be generated in runtime\n // // todo: when emitting swagger metadata using generateSwaggerMetadata(),\n // // the TSDocs comments are no longer read by nest,\n // // and we must manually add @ApiProperty() to all properties\n // // this requires tsconfig to be exists where it runs, so it is better to run in build time instead, i.e. via a separate post-build script.\n // // and `loadSwaggerMetadata()` here\n // let metadataPath = generateSwaggerMetadata({\n // // @ts-ignore `import.meta` requires `module: nodeNext`\n // outputDir: import.meta.dirname,\n // // fixes: src/nest-swagger-metadata.ts:2:1 - error TS2742:\n // // The inferred type of 'default' cannot be named without a reference to '../node_modules/@impactor/utils/src/dto/order.dto'.\n // // This is likely not portable. A type annotation is necessary.\n // transform: (content) =>\n // content.replaceAll(/.+node_modules\\/@impactor\\//g, '@impactor/'),\n // });\n\n // // todo: the file by default is related to CWD(),\n // // change cwd of the target \"serve\" in nx.json to \"{projectRoot}/dist\"\n // await loadSwaggerMetadata(metadataPath)\n // .then(() => logger.debug('Swagger metadata loaded'))\n // // ignore if the metadata file hasn't generated\n // .catch((error) => {\n // logger.warn(`Failed to load Swagger metadata`, error);\n // });\n\n let document = SwaggerModule.createDocument(\n app,\n opts.swagger as OpenAPIObject,\n );\n SwaggerModule.setup(opts.swaggerPath || '', app, document);\n }\n\n // todo: import `FastifyMulterModule` from '@nest-lab/fastify-multer' in the module\n // that wants to receive files, instead of registering 'multipart' globally\n if (opts.multipart !== false) {\n await app.register(multiPart);\n }\n\n return opts.port\n ? app\n // if the server runs inside a container, it should bound to '0.0.0.0' instead of 'localhost' (the default)\n // so it can listen to the external requests i.e. from the browser\n .listen(opts.port, '0.0.0.0')\n .then((_server) => opts.onServerRun?.(app))\n .catch((error) => opts.onServerError?.(error, app))\n .then(() => app)\n : app;\n });\n}\n"],"names":["NestFactory","SwaggerModule","FastifyAdapter","multiPart","appConfig","ValidationPipe","merge","isDirSync","readSync","registerEntities","createApp","module","options","create","then","app","pkg","package","opts","swagger","info","title","name","description","version","deep","prefix","setGlobalPrefix","prefixOptions","versioning","enableVersioning","useGlobalPipes","transform","whitelist","forbidNonWhitelisted","validationPipe","Array","isArray","undefined","document","createDocument","setup","swaggerPath","multipart","register","port","listen","_server","onServerRun","catch","error","onServerError"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { IMicroserviceOptions } from './configs/microservice';
1
+ import { IMicroserviceOptions } from './configs/microservice.js';
2
2
  export declare function createMicroservice(module: any, options?: IMicroserviceOptions): Promise<import("@nestjs/common").INestMicroservice>;
@@ -1,34 +1,30 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "createMicroservice", {
6
- enumerable: true,
7
- get: function() {
8
- return createMicroservice;
9
- }
10
- });
11
- const _core = require("@nestjs/core");
12
- const _common = require("@nestjs/common");
13
- const _wsexceptionfilter = require("./filters/ws-exception.filter");
14
- const _typeormexceptionfilter = require("./filters/typeorm-exception.filter");
15
- const _errortorpcexceptionfilter = require("./filters/error-to-rpc-exception.filter");
16
- const _microservice = require("./configs/microservice");
17
- function createMicroservice(// todo: `module: IEntryNestModule`
1
+ import { NestFactory } from "@nestjs/core";
2
+ import { ValidationPipe } from "@nestjs/common";
3
+ import { WebSocketExceptionFilter } from "./filters/ws-exception.filter.js";
4
+ import { TypeORMExceptionFilter } from "./filters/typeorm-exception.filter.js";
5
+ import { ErrorToRpcExceptionFilter } from "./filters/error-to-rpc-exception.filter.js";
6
+ import { microserviceOptions } from "./configs/microservice.js";
7
+ /**
8
+ * Create a NestJs microservice
9
+ * @param module the main module (AppModule)
10
+ * @param microserviceOptions
11
+ * @param appOptions
12
+ * @returns
13
+ */ export function createMicroservice(// todo: `module: IEntryNestModule`
18
14
  module, options) {
19
15
  // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'
20
16
  let opts = {
21
- ..._microservice.microserviceOptions,
17
+ ...microserviceOptions,
22
18
  ...options
23
19
  };
24
20
  // todo: merge with ./create-testing-microservice
25
21
  // opts.testing? .createNestMicroservice(): createMicroservice()
26
- return _core.NestFactory.createMicroservice(module, opts).then((app)=>{
27
- app.useGlobalFilters(new _typeormexceptionfilter.TypeORMExceptionFilter(), // WS filters cannot registered globally, you need to add `@UseFilters()` to each gateway
22
+ return NestFactory.createMicroservice(module, opts).then((app)=>{
23
+ app.useGlobalFilters(new TypeORMExceptionFilter(), // WS filters cannot registered globally, you need to add `@UseFilters()` to each gateway
28
24
  // from docs: "The useGlobalFilters() method does not set up filters for gateways or hybrid applications"
29
25
  // https://docs.nestjs.com/exception-filters#binding-filters
30
- new _wsexceptionfilter.WebSocketExceptionFilter(), new _errortorpcexceptionfilter.ErrorToRpcExceptionFilter());
31
- app.useGlobalPipes(new _common.ValidationPipe({
26
+ new WebSocketExceptionFilter(), new ErrorToRpcExceptionFilter());
27
+ app.useGlobalPipes(new ValidationPipe({
32
28
  whitelist: true,
33
29
  transform: true,
34
30
  // forbidNonWhitelisted: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/create-microservice.ts"],"sourcesContent":["import { NestFactory } from '@nestjs/core';\nimport { ValidationPipe } from '@nestjs/common';\nimport { type MicroserviceOptions } from '@nestjs/microservices';\nimport { WebSocketExceptionFilter } from './filters/ws-exception.filter';\nimport { TypeORMExceptionFilter } from './filters/typeorm-exception.filter';\nimport { ErrorToRpcExceptionFilter } from './filters/error-to-rpc-exception.filter';\nimport {\n IMicroserviceOptions,\n microserviceOptions,\n} from './configs/microservice';\n\n/**\n * Create a NestJs microservice\n * @param module the main module (AppModule)\n * @param microserviceOptions\n * @param appOptions\n * @returns\n */\nexport function createMicroservice(\n // todo: `module: IEntryNestModule`\n module: any,\n options?: IMicroserviceOptions,\n) {\n // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'\n let opts: IMicroserviceOptions = {\n ...microserviceOptions,\n ...options,\n };\n\n // todo: merge with ./create-testing-microservice\n // opts.testing? .createNestMicroservice(): createMicroservice()\n return NestFactory.createMicroservice<MicroserviceOptions>(module, opts).then(\n (app) => {\n app.useGlobalFilters(\n new TypeORMExceptionFilter(),\n // WS filters cannot registered globally, you need to add `@UseFilters()` to each gateway\n // from docs: \"The useGlobalFilters() method does not set up filters for gateways or hybrid applications\"\n // https://docs.nestjs.com/exception-filters#binding-filters\n new WebSocketExceptionFilter(),\n new ErrorToRpcExceptionFilter(),\n );\n\n app.useGlobalPipes(\n new ValidationPipe({\n whitelist: true,\n transform: true,\n // forbidNonWhitelisted: true,\n transformOptions: {\n enableImplicitConversion: true,\n },\n }),\n );\n\n return app\n .listen()\n .then((_server) => opts?.onServerRun?.(app))\n .catch((error) => opts?.onServerError?.(error, app))\n .then(() => app);\n },\n );\n}\n"],"names":["createMicroservice","module","options","opts","microserviceOptions","NestFactory","then","app","useGlobalFilters","TypeORMExceptionFilter","WebSocketExceptionFilter","ErrorToRpcExceptionFilter","useGlobalPipes","ValidationPipe","whitelist","transform","transformOptions","enableImplicitConversion","listen","_server","onServerRun","catch","error","onServerError"],"mappings":";;;;+BAkBgBA;;;eAAAA;;;sBAlBY;wBACG;mCAEU;wCACF;2CACG;8BAInC;AASA,SAASA,mBACd,mCAAmC;AACnCC,MAAW,EACXC,OAA8B;IAE9B,qFAAqF;IACrF,IAAIC,OAA6B;QAC/B,GAAGC,iCAAmB;QACtB,GAAGF,OAAO;IACZ;IAEA,iDAAiD;IACjD,gEAAgE;IAChE,OAAOG,iBAAW,CAACL,kBAAkB,CAAsBC,QAAQE,MAAMG,IAAI,CAC3E,CAACC;QACCA,IAAIC,gBAAgB,CAClB,IAAIC,8CAAsB,IAC1B,yFAAyF;QACzF,yGAAyG;QACzG,4DAA4D;QAC5D,IAAIC,2CAAwB,IAC5B,IAAIC,oDAAyB;QAG/BJ,IAAIK,cAAc,CAChB,IAAIC,sBAAc,CAAC;YACjBC,WAAW;YACXC,WAAW;YACX,8BAA8B;YAC9BC,kBAAkB;gBAChBC,0BAA0B;YAC5B;QACF;QAGF,OAAOV,IACJW,MAAM,GACNZ,IAAI,CAAC,CAACa,UAAYhB,MAAMiB,cAAcb,MACtCc,KAAK,CAAC,CAACC,QAAUnB,MAAMoB,gBAAgBD,OAAOf,MAC9CD,IAAI,CAAC,IAAMC;IAChB;AAEJ"}
1
+ {"version":3,"sources":["../../src/create-microservice.ts"],"sourcesContent":["import { NestFactory } from '@nestjs/core';\nimport { ValidationPipe } from '@nestjs/common';\nimport { type MicroserviceOptions } from '@nestjs/microservices';\nimport { WebSocketExceptionFilter } from './filters/ws-exception.filter.js';\nimport { TypeORMExceptionFilter } from './filters/typeorm-exception.filter.js';\nimport { ErrorToRpcExceptionFilter } from './filters/error-to-rpc-exception.filter.js';\nimport {\n IMicroserviceOptions,\n microserviceOptions,\n} from './configs/microservice.js';\n\n/**\n * Create a NestJs microservice\n * @param module the main module (AppModule)\n * @param microserviceOptions\n * @param appOptions\n * @returns\n */\nexport function createMicroservice(\n // todo: `module: IEntryNestModule`\n module: any,\n options?: IMicroserviceOptions,\n) {\n // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'\n let opts: IMicroserviceOptions = {\n ...microserviceOptions,\n ...options,\n };\n\n // todo: merge with ./create-testing-microservice\n // opts.testing? .createNestMicroservice(): createMicroservice()\n return NestFactory.createMicroservice<MicroserviceOptions>(module, opts).then(\n (app) => {\n app.useGlobalFilters(\n new TypeORMExceptionFilter(),\n // WS filters cannot registered globally, you need to add `@UseFilters()` to each gateway\n // from docs: \"The useGlobalFilters() method does not set up filters for gateways or hybrid applications\"\n // https://docs.nestjs.com/exception-filters#binding-filters\n new WebSocketExceptionFilter(),\n new ErrorToRpcExceptionFilter(),\n );\n\n app.useGlobalPipes(\n new ValidationPipe({\n whitelist: true,\n transform: true,\n // forbidNonWhitelisted: true,\n transformOptions: {\n enableImplicitConversion: true,\n },\n }),\n );\n\n return app\n .listen()\n .then((_server) => opts?.onServerRun?.(app))\n .catch((error) => opts?.onServerError?.(error, app))\n .then(() => app);\n },\n );\n}\n"],"names":["NestFactory","ValidationPipe","WebSocketExceptionFilter","TypeORMExceptionFilter","ErrorToRpcExceptionFilter","microserviceOptions","createMicroservice","module","options","opts","then","app","useGlobalFilters","useGlobalPipes","whitelist","transform","transformOptions","enableImplicitConversion","listen","_server","onServerRun","catch","error","onServerError"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAe;AAC3C,SAASC,cAAc,QAAQ,iBAAiB;AAEhD,SAASC,wBAAwB,QAAQ,mCAAmC;AAC5E,SAASC,sBAAsB,QAAQ,wCAAwC;AAC/E,SAASC,yBAAyB,QAAQ,6CAA6C;AACvF,SAEEC,mBAAmB,QACd,4BAA4B;AAEnC;;;;;;CAMC,GACD,OAAO,SAASC,mBACd,mCAAmC;AACnCC,MAAW,EACXC,OAA8B;IAE9B,qFAAqF;IACrF,IAAIC,OAA6B;QAC/B,GAAGJ,mBAAmB;QACtB,GAAGG,OAAO;IACZ;IAEA,iDAAiD;IACjD,gEAAgE;IAChE,OAAOR,YAAYM,kBAAkB,CAAsBC,QAAQE,MAAMC,IAAI,CAC3E,CAACC;QACCA,IAAIC,gBAAgB,CAClB,IAAIT,0BACJ,yFAAyF;QACzF,yGAAyG;QACzG,4DAA4D;QAC5D,IAAID,4BACJ,IAAIE;QAGNO,IAAIE,cAAc,CAChB,IAAIZ,eAAe;YACjBa,WAAW;YACXC,WAAW;YACX,8BAA8B;YAC9BC,kBAAkB;gBAChBC,0BAA0B;YAC5B;QACF;QAGF,OAAON,IACJO,MAAM,GACNR,IAAI,CAAC,CAACS,UAAYV,MAAMW,cAAcT,MACtCU,KAAK,CAAC,CAACC,QAAUb,MAAMc,gBAAgBD,OAAOX,MAC9CD,IAAI,CAAC,IAAMC;IAChB;AAEJ"}
@@ -1,3 +1,3 @@
1
1
  import { TestingModule } from '@nestjs/testing';
2
- import { IMicroserviceOptions } from './configs/microservice';
2
+ import { IMicroserviceOptions } from './configs/microservice.js';
3
3
  export declare function createTestingMicroservice(module: TestingModule, options?: IMicroserviceOptions): Promise<import("@nestjs/common").INestMicroservice>;
@@ -1,28 +1,24 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "createTestingMicroservice", {
6
- enumerable: true,
7
- get: function() {
8
- return createTestingMicroservice;
9
- }
10
- });
11
- const _common = require("@nestjs/common");
12
- const _microservices = require("@nestjs/microservices");
13
- const _typeormexceptionfilter = require("./filters/typeorm-exception.filter");
14
- const _wsexceptionfilter = require("./filters/ws-exception.filter");
15
- const _microservice = require("./configs/microservice");
16
- function createTestingMicroservice(module, options = {}) {
1
+ import { ValidationPipe } from "@nestjs/common";
2
+ import { RpcException } from "@nestjs/microservices";
3
+ import { TypeORMExceptionFilter } from "./filters/typeorm-exception.filter.js";
4
+ import { WebSocketExceptionFilter } from "./filters/ws-exception.filter.js";
5
+ import { microserviceOptions } from "./configs/microservice.js";
6
+ /**
7
+ * Create a testing Nestjs Microservice
8
+ * see createMicroservice()
9
+ * @param module
10
+ * @param options
11
+ * @returns
12
+ */ export function createTestingMicroservice(module, options = {}) {
17
13
  // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'
18
14
  let opts = {
19
- ..._microservice.microserviceOptions,
15
+ ...microserviceOptions,
20
16
  ...options
21
17
  };
22
18
  let app = module.createNestMicroservice(opts);
23
- app.useGlobalFilters(new _typeormexceptionfilter.TypeORMExceptionFilter(), new _wsexceptionfilter.WebSocketExceptionFilter());
24
- app.useGlobalPipes(new _common.ValidationPipe({
25
- exceptionFactory: (errors)=>new _microservices.RpcException(errors)
19
+ app.useGlobalFilters(new TypeORMExceptionFilter(), new WebSocketExceptionFilter());
20
+ app.useGlobalPipes(new ValidationPipe({
21
+ exceptionFactory: (errors)=>new RpcException(errors)
26
22
  }));
27
23
  return app.listen().then((_server)=>opts?.onServerRun?.(app)).catch((error)=>opts?.onServerError?.(error, app)).then(()=>app);
28
24
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/create-testing-microservice.ts"],"sourcesContent":["import { ValidationPipe } from '@nestjs/common';\nimport { type MicroserviceOptions, RpcException } from '@nestjs/microservices';\nimport { TestingModule } from '@nestjs/testing';\nimport { TypeORMExceptionFilter } from './filters/typeorm-exception.filter';\nimport { WebSocketExceptionFilter } from './filters/ws-exception.filter';\nimport {\n IMicroserviceOptions,\n microserviceOptions,\n} from './configs/microservice';\n\n/**\n * Create a testing Nestjs Microservice\n * see createMicroservice()\n * @param module\n * @param options\n * @returns\n */\nexport function createTestingMicroservice(\n module: TestingModule,\n options: IMicroserviceOptions = {},\n) {\n // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'\n let opts: IMicroserviceOptions = {\n ...microserviceOptions,\n ...options,\n };\n\n let app = module.createNestMicroservice<MicroserviceOptions>(opts);\n\n app.useGlobalFilters(\n new TypeORMExceptionFilter(),\n new WebSocketExceptionFilter(),\n );\n\n app.useGlobalPipes(\n new ValidationPipe({\n exceptionFactory: (errors) => new RpcException(errors),\n }),\n );\n return app\n .listen()\n .then((_server) => opts?.onServerRun?.(app))\n .catch((error) => opts?.onServerError?.(error, app))\n .then(() => app);\n}\n"],"names":["createTestingMicroservice","module","options","opts","microserviceOptions","app","createNestMicroservice","useGlobalFilters","TypeORMExceptionFilter","WebSocketExceptionFilter","useGlobalPipes","ValidationPipe","exceptionFactory","errors","RpcException","listen","then","_server","onServerRun","catch","error","onServerError"],"mappings":";;;;+BAiBgBA;;;eAAAA;;;wBAjBe;+BACwB;wCAEhB;mCACE;8BAIlC;AASA,SAASA,0BACdC,MAAqB,EACrBC,UAAgC,CAAC,CAAC;IAElC,qFAAqF;IACrF,IAAIC,OAA6B;QAC/B,GAAGC,iCAAmB;QACtB,GAAGF,OAAO;IACZ;IAEA,IAAIG,MAAMJ,OAAOK,sBAAsB,CAAsBH;IAE7DE,IAAIE,gBAAgB,CAClB,IAAIC,8CAAsB,IAC1B,IAAIC,2CAAwB;IAG9BJ,IAAIK,cAAc,CAChB,IAAIC,sBAAc,CAAC;QACjBC,kBAAkB,CAACC,SAAW,IAAIC,2BAAY,CAACD;IACjD;IAEF,OAAOR,IACJU,MAAM,GACNC,IAAI,CAAC,CAACC,UAAYd,MAAMe,cAAcb,MACtCc,KAAK,CAAC,CAACC,QAAUjB,MAAMkB,gBAAgBD,OAAOf,MAC9CW,IAAI,CAAC,IAAMX;AAChB"}
1
+ {"version":3,"sources":["../../src/create-testing-microservice.ts"],"sourcesContent":["import { ValidationPipe } from '@nestjs/common';\nimport { type MicroserviceOptions, RpcException } from '@nestjs/microservices';\nimport { TestingModule } from '@nestjs/testing';\nimport { TypeORMExceptionFilter } from './filters/typeorm-exception.filter.js';\nimport { WebSocketExceptionFilter } from './filters/ws-exception.filter.js';\nimport {\n IMicroserviceOptions,\n microserviceOptions,\n} from './configs/microservice.js';\n\n/**\n * Create a testing Nestjs Microservice\n * see createMicroservice()\n * @param module\n * @param options\n * @returns\n */\nexport function createTestingMicroservice(\n module: TestingModule,\n options: IMicroserviceOptions = {},\n) {\n // @ts-expect-error Type 'Transport.TCP' is not assignable to type 'Transport.KAFKA'\n let opts: IMicroserviceOptions = {\n ...microserviceOptions,\n ...options,\n };\n\n let app = module.createNestMicroservice<MicroserviceOptions>(opts);\n\n app.useGlobalFilters(\n new TypeORMExceptionFilter(),\n new WebSocketExceptionFilter(),\n );\n\n app.useGlobalPipes(\n new ValidationPipe({\n exceptionFactory: (errors) => new RpcException(errors),\n }),\n );\n return app\n .listen()\n .then((_server) => opts?.onServerRun?.(app))\n .catch((error) => opts?.onServerError?.(error, app))\n .then(() => app);\n}\n"],"names":["ValidationPipe","RpcException","TypeORMExceptionFilter","WebSocketExceptionFilter","microserviceOptions","createTestingMicroservice","module","options","opts","app","createNestMicroservice","useGlobalFilters","useGlobalPipes","exceptionFactory","errors","listen","then","_server","onServerRun","catch","error","onServerError"],"mappings":"AAAA,SAASA,cAAc,QAAQ,iBAAiB;AAChD,SAAmCC,YAAY,QAAQ,wBAAwB;AAE/E,SAASC,sBAAsB,QAAQ,wCAAwC;AAC/E,SAASC,wBAAwB,QAAQ,mCAAmC;AAC5E,SAEEC,mBAAmB,QACd,4BAA4B;AAEnC;;;;;;CAMC,GACD,OAAO,SAASC,0BACdC,MAAqB,EACrBC,UAAgC,CAAC,CAAC;IAElC,qFAAqF;IACrF,IAAIC,OAA6B;QAC/B,GAAGJ,mBAAmB;QACtB,GAAGG,OAAO;IACZ;IAEA,IAAIE,MAAMH,OAAOI,sBAAsB,CAAsBF;IAE7DC,IAAIE,gBAAgB,CAClB,IAAIT,0BACJ,IAAIC;IAGNM,IAAIG,cAAc,CAChB,IAAIZ,eAAe;QACjBa,kBAAkB,CAACC,SAAW,IAAIb,aAAaa;IACjD;IAEF,OAAOL,IACJM,MAAM,GACNC,IAAI,CAAC,CAACC,UAAYT,MAAMU,cAAcT,MACtCU,KAAK,CAAC,CAACC,QAAUZ,MAAMa,gBAAgBD,OAAOX,MAC9CO,IAAI,CAAC,IAAMP;AAChB"}
@@ -1,2 +1,2 @@
1
- import { ControllerFactory } from '../controller.factory';
1
+ import { ControllerFactory } from '../controller.factory.js';
2
2
  export declare function addControllerPath(factory: ControllerFactory): void;
@@ -1,21 +1,13 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "addControllerPath", {
6
- enumerable: true,
7
- get: function() {
8
- return addControllerPath;
9
- }
10
- });
11
- const _common = require("@nestjs/common");
12
- const _reflect = require("../utils/reflect");
13
- function addControllerPath(factory) {
14
- if ((0, _reflect.has)('path', factory) || factory.options.path === null) return;
1
+ import { Controller } from "@nestjs/common";
2
+ import { has } from "../utils/reflect.js";
3
+ /**
4
+ * add Nest `@Controller()` decorator
5
+ */ export function addControllerPath(factory) {
6
+ if (has('path', factory) || factory.options.path === null) return;
15
7
  let path = factory.options.path;
16
8
  if (path) {
17
9
  // todo: `@Controller()` can also take an options object
18
- factory.decorators.push((0, _common.Controller)(path));
10
+ factory.decorators.push(Controller(path));
19
11
  }
20
12
  }
21
13
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-controller-path.ts"],"sourcesContent":["import { Controller } from '@nestjs/common';\nimport { ControllerFactory } from '../controller.factory';\nimport { has } from '../utils/reflect';\n\n/**\n * add Nest `@Controller()` decorator\n */\nexport function addControllerPath(factory: ControllerFactory) {\n if (has('path', factory) || factory.options.path === null) return;\n\n let path = factory.options.path;\n\n if (path) {\n // todo: `@Controller()` can also take an options object\n factory.decorators.push(Controller(path));\n }\n}\n"],"names":["addControllerPath","factory","has","options","path","decorators","push","Controller"],"mappings":";;;;+BAOgBA;;;eAAAA;;;wBAPW;yBAEP;AAKb,SAASA,kBAAkBC,OAA0B;IAC1D,IAAIC,IAAAA,YAAG,EAAC,QAAQD,YAAYA,QAAQE,OAAO,CAACC,IAAI,KAAK,MAAM;IAE3D,IAAIA,OAAOH,QAAQE,OAAO,CAACC,IAAI;IAE/B,IAAIA,MAAM;QACR,wDAAwD;QACxDH,QAAQI,UAAU,CAACC,IAAI,CAACC,IAAAA,kBAAU,EAACH;IACrC;AACF"}
1
+ {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-controller-path.ts"],"sourcesContent":["import { Controller } from '@nestjs/common';\nimport { ControllerFactory } from '../controller.factory.js';\nimport { has } from '../utils/reflect.js';\n\n/**\n * add Nest `@Controller()` decorator\n */\nexport function addControllerPath(factory: ControllerFactory) {\n if (has('path', factory) || factory.options.path === null) return;\n\n let path = factory.options.path;\n\n if (path) {\n // todo: `@Controller()` can also take an options object\n factory.decorators.push(Controller(path));\n }\n}\n"],"names":["Controller","has","addControllerPath","factory","options","path","decorators","push"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iBAAiB;AAE5C,SAASC,GAAG,QAAQ,sBAAsB;AAE1C;;CAEC,GACD,OAAO,SAASC,kBAAkBC,OAA0B;IAC1D,IAAIF,IAAI,QAAQE,YAAYA,QAAQC,OAAO,CAACC,IAAI,KAAK,MAAM;IAE3D,IAAIA,OAAOF,QAAQC,OAAO,CAACC,IAAI;IAE/B,IAAIA,MAAM;QACR,wDAAwD;QACxDF,QAAQG,UAAU,CAACC,IAAI,CAACP,WAAWK;IACrC;AACF"}
@@ -1,2 +1,2 @@
1
- import { ControllerFactory } from '../controller.factory';
1
+ import { ControllerFactory } from '../controller.factory.js';
2
2
  export declare function addControllerTags(factory: ControllerFactory, tags?: string | string[]): void;
@@ -1,26 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "addControllerTags", {
6
- enumerable: true,
7
- get: function() {
8
- return addControllerTags;
9
- }
10
- });
11
- const _reflect = require("../utils/reflect");
12
- const _swagger = require("@nestjs/swagger");
13
- function addControllerTags(factory, tags) {
1
+ import { get, has } from "../utils/reflect.js";
2
+ import { ApiTags } from "@nestjs/swagger";
3
+ /**
4
+ * add Swagger `@ApiTags()` decorator
5
+ */ export function addControllerTags(factory, tags) {
14
6
  // to get the metadata name, open the definition of `ApiResponse()`
15
7
  // and check `Reflect.defineMetadata(/* metadata name */)`
16
8
  // for `@nestjs/swagger`, decorators metadata are defined in `DECORATORS.*` constant
17
- if ((0, _reflect.has)('swagger/apiUseTags', factory) || factory.options.tags === null) return;
18
- tags = factory.options.tags || factory.options.path || (0, _reflect.get)('path', factory);
9
+ if (has('swagger/apiUseTags', factory) || factory.options.tags === null) return;
10
+ tags = factory.options.tags || factory.options.path || get('path', factory);
19
11
  if (tags) {
20
12
  if (Array.isArray(tags)) {
21
- factory.decorators.push((0, _swagger.ApiTags)(...tags));
13
+ factory.decorators.push(ApiTags(...tags));
22
14
  } else {
23
- factory.decorators.push((0, _swagger.ApiTags)(tags));
15
+ factory.decorators.push(ApiTags(tags));
24
16
  }
25
17
  }
26
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-controller-tags.ts"],"sourcesContent":["import { ControllerFactory } from '../controller.factory';\nimport { get, has } from '../utils/reflect';\nimport { ApiTags } from '@nestjs/swagger';\n\n/**\n * add Swagger `@ApiTags()` decorator\n */\nexport function addControllerTags(\n factory: ControllerFactory,\n tags?: string | string[],\n) {\n // to get the metadata name, open the definition of `ApiResponse()`\n // and check `Reflect.defineMetadata(/* metadata name */)`\n // for `@nestjs/swagger`, decorators metadata are defined in `DECORATORS.*` constant\n if (has('swagger/apiUseTags', factory) || factory.options.tags === null)\n return;\n\n tags = factory.options.tags || factory.options.path || get('path', factory);\n\n if (tags) {\n if (Array.isArray(tags)) {\n factory.decorators.push(ApiTags(...tags));\n } else {\n factory.decorators.push(ApiTags(tags));\n }\n }\n}\n"],"names":["addControllerTags","factory","tags","has","options","path","get","Array","isArray","decorators","push","ApiTags"],"mappings":";;;;+BAOgBA;;;eAAAA;;;yBANS;yBACD;AAKjB,SAASA,kBACdC,OAA0B,EAC1BC,IAAwB;IAExB,mEAAmE;IACnE,0DAA0D;IAC1D,oFAAoF;IACpF,IAAIC,IAAAA,YAAG,EAAC,sBAAsBF,YAAYA,QAAQG,OAAO,CAACF,IAAI,KAAK,MACjE;IAEFA,OAAOD,QAAQG,OAAO,CAACF,IAAI,IAAID,QAAQG,OAAO,CAACC,IAAI,IAAIC,IAAAA,YAAG,EAAC,QAAQL;IAEnE,IAAIC,MAAM;QACR,IAAIK,MAAMC,OAAO,CAACN,OAAO;YACvBD,QAAQQ,UAAU,CAACC,IAAI,CAACC,IAAAA,gBAAO,KAAIT;QACrC,OAAO;YACLD,QAAQQ,UAAU,CAACC,IAAI,CAACC,IAAAA,gBAAO,EAACT;QAClC;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-controller-tags.ts"],"sourcesContent":["import { ControllerFactory } from '../controller.factory.js';\nimport { get, has } from '../utils/reflect.js';\nimport { ApiTags } from '@nestjs/swagger';\n\n/**\n * add Swagger `@ApiTags()` decorator\n */\nexport function addControllerTags(\n factory: ControllerFactory,\n tags?: string | string[],\n) {\n // to get the metadata name, open the definition of `ApiResponse()`\n // and check `Reflect.defineMetadata(/* metadata name */)`\n // for `@nestjs/swagger`, decorators metadata are defined in `DECORATORS.*` constant\n if (has('swagger/apiUseTags', factory) || factory.options.tags === null)\n return;\n\n tags = factory.options.tags || factory.options.path || get('path', factory);\n\n if (tags) {\n if (Array.isArray(tags)) {\n factory.decorators.push(ApiTags(...tags));\n } else {\n factory.decorators.push(ApiTags(tags));\n }\n }\n}\n"],"names":["get","has","ApiTags","addControllerTags","factory","tags","options","path","Array","isArray","decorators","push"],"mappings":"AACA,SAASA,GAAG,EAAEC,GAAG,QAAQ,sBAAsB;AAC/C,SAASC,OAAO,QAAQ,kBAAkB;AAE1C;;CAEC,GACD,OAAO,SAASC,kBACdC,OAA0B,EAC1BC,IAAwB;IAExB,mEAAmE;IACnE,0DAA0D;IAC1D,oFAAoF;IACpF,IAAIJ,IAAI,sBAAsBG,YAAYA,QAAQE,OAAO,CAACD,IAAI,KAAK,MACjE;IAEFA,OAAOD,QAAQE,OAAO,CAACD,IAAI,IAAID,QAAQE,OAAO,CAACC,IAAI,IAAIP,IAAI,QAAQI;IAEnE,IAAIC,MAAM;QACR,IAAIG,MAAMC,OAAO,CAACJ,OAAO;YACvBD,QAAQM,UAAU,CAACC,IAAI,CAACT,WAAWG;QACrC,OAAO;YACLD,QAAQM,UAAU,CAACC,IAAI,CAACT,QAAQG;QAClC;IACF;AACF"}
@@ -1,3 +1,3 @@
1
- import { ControllerFactory } from '../controller.factory';
2
- import type { IRoute } from '../types';
1
+ import { ControllerFactory } from '../controller.factory.js';
2
+ import type { IRoute } from '../types/index.js';
3
3
  export declare function addHttpMethod(route: IRoute, factory: ControllerFactory): void;
@@ -1,25 +1,18 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "addHttpMethod", {
6
- enumerable: true,
7
- get: function() {
8
- return addHttpMethod;
9
- }
10
- });
11
- const _reflect = require("../utils/reflect");
12
- const _common = require("@nestjs/common");
13
- function addHttpMethod(route, factory) {
14
- if ((0, _reflect.has)('method', factory, route)) return;
1
+ import { has } from "../utils/reflect.js";
2
+ import { Delete, Get, Patch, Post, Put } from "@nestjs/common";
3
+ /**
4
+ * add NestJs http decorator to the route, such as \@Get("/")
5
+ * @param route
6
+ */ export function addHttpMethod(route, factory) {
7
+ if (has('method', factory, route)) return;
15
8
  let map = {
16
- POST: _common.Post,
17
- PATCH: _common.Patch,
18
- PUT: _common.Put,
19
- DELETE: _common.Delete,
20
- GET: _common.Get
9
+ POST: Post,
10
+ PATCH: Patch,
11
+ PUT: Put,
12
+ DELETE: Delete,
13
+ GET: Get
21
14
  };
22
- let fn = map[route.httpMethod.toUpperCase()] || _common.Get;
15
+ let fn = map[route.httpMethod.toUpperCase()] || Get;
23
16
  // use @Get() or add "method" and "path" using Reflect.defineMetadata()
24
17
  route.decorators.push(fn(route.path));
25
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-http-method.ts"],"sourcesContent":["import { has } from '../utils/reflect';\nimport { ControllerFactory } from '../controller.factory';\nimport type { IRoute } from '../types';\nimport { Delete, Get, Patch, Post, Put } from '@nestjs/common';\n\n/**\n * add NestJs http decorator to the route, such as \\@Get(\"/\")\n * @param route\n */\nexport function addHttpMethod(route: IRoute, factory: ControllerFactory) {\n if (has('method', factory, route)) return;\n\n let map = {\n POST: Post,\n PATCH: Patch,\n PUT: Put,\n DELETE: Delete,\n GET: Get,\n };\n\n let fn = map[route.httpMethod.toUpperCase() as keyof typeof map] || Get;\n\n // use @Get() or add \"method\" and \"path\" using Reflect.defineMetadata()\n route.decorators.push(fn(route.path));\n}\n"],"names":["addHttpMethod","route","factory","has","map","POST","Post","PATCH","Patch","PUT","Put","DELETE","Delete","GET","Get","fn","httpMethod","toUpperCase","decorators","push","path"],"mappings":";;;;+BASgBA;;;eAAAA;;;yBATI;wBAG0B;AAMvC,SAASA,cAAcC,KAAa,EAAEC,OAA0B;IACrE,IAAIC,IAAAA,YAAG,EAAC,UAAUD,SAASD,QAAQ;IAEnC,IAAIG,MAAM;QACRC,MAAMC,YAAI;QACVC,OAAOC,aAAK;QACZC,KAAKC,WAAG;QACRC,QAAQC,cAAM;QACdC,KAAKC,WAAG;IACV;IAEA,IAAIC,KAAKX,GAAG,CAACH,MAAMe,UAAU,CAACC,WAAW,GAAuB,IAAIH,WAAG;IAEvE,uEAAuE;IACvEb,MAAMiB,UAAU,CAACC,IAAI,CAACJ,GAAGd,MAAMmB,IAAI;AACrC"}
1
+ {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-http-method.ts"],"sourcesContent":["import { has } from '../utils/reflect.js';\nimport { ControllerFactory } from '../controller.factory.js';\nimport type { IRoute } from '../types/index.js';\nimport { Delete, Get, Patch, Post, Put } from '@nestjs/common';\n\n/**\n * add NestJs http decorator to the route, such as \\@Get(\"/\")\n * @param route\n */\nexport function addHttpMethod(route: IRoute, factory: ControllerFactory) {\n if (has('method', factory, route)) return;\n\n let map = {\n POST: Post,\n PATCH: Patch,\n PUT: Put,\n DELETE: Delete,\n GET: Get,\n };\n\n let fn = map[route.httpMethod.toUpperCase() as keyof typeof map] || Get;\n\n // use @Get() or add \"method\" and \"path\" using Reflect.defineMetadata()\n route.decorators.push(fn(route.path));\n}\n"],"names":["has","Delete","Get","Patch","Post","Put","addHttpMethod","route","factory","map","POST","PATCH","PUT","DELETE","GET","fn","httpMethod","toUpperCase","decorators","push","path"],"mappings":"AAAA,SAASA,GAAG,QAAQ,sBAAsB;AAG1C,SAASC,MAAM,EAAEC,GAAG,EAAEC,KAAK,EAAEC,IAAI,EAAEC,GAAG,QAAQ,iBAAiB;AAE/D;;;CAGC,GACD,OAAO,SAASC,cAAcC,KAAa,EAAEC,OAA0B;IACrE,IAAIR,IAAI,UAAUQ,SAASD,QAAQ;IAEnC,IAAIE,MAAM;QACRC,MAAMN;QACNO,OAAOR;QACPS,KAAKP;QACLQ,QAAQZ;QACRa,KAAKZ;IACP;IAEA,IAAIa,KAAKN,GAAG,CAACF,MAAMS,UAAU,CAACC,WAAW,GAAuB,IAAIf;IAEpE,uEAAuE;IACvEK,MAAMW,UAAU,CAACC,IAAI,CAACJ,GAAGR,MAAMa,IAAI;AACrC"}
@@ -1,3 +1,3 @@
1
- import { ControllerFactory } from '../controller.factory';
2
- import type { IRoute } from '../types';
1
+ import { ControllerFactory } from '../controller.factory.js';
2
+ import type { IRoute } from '../types/index.js';
3
3
  export declare function addSwaggerBody(route: IRoute, factory: ControllerFactory): void;
@@ -1,18 +1,8 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "addSwaggerBody", {
6
- enumerable: true,
7
- get: function() {
8
- return addSwaggerBody;
9
- }
10
- });
11
- const _reflect = require("../utils/reflect");
12
- const _emptydto = require("../dto/empty.dto");
13
- const _swagger = require("@nestjs/swagger");
14
- function addSwaggerBody(route, factory) {
15
- if ((0, _reflect.has)('swagger/apiResponse', factory, route)) return;
1
+ import { has } from "../utils/reflect.js";
2
+ import { EmptyDto } from "../dto/empty.dto.js";
3
+ import { ApiBody } from "@nestjs/swagger";
4
+ export function addSwaggerBody(route, factory) {
5
+ if (has('swagger/apiResponse', factory, route)) return;
16
6
  if (// todo: create DTO variations for each http method
17
7
  // for example make all fields optional for PATCH
18
8
  // todo: add ValidationPipe groups for each http method
@@ -21,8 +11,8 @@ function addSwaggerBody(route, factory) {
21
11
  'PATCH',
22
12
  'PUT'
23
13
  ].includes(route.httpMethod)) {
24
- route.decorators.push((0, _swagger.ApiBody)({
25
- type: route.model === null ? _emptydto.EmptyDto : route.model || factory.options?.model
14
+ route.decorators.push(ApiBody({
15
+ type: route.model === null ? EmptyDto : route.model || factory.options?.model
26
16
  }));
27
17
  }
28
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-swagger-body.ts"],"sourcesContent":["import { has } from '../utils/reflect';\nimport { ControllerFactory } from '../controller.factory';\nimport { EmptyDto } from '../dto/empty.dto';\nimport type { HttpMethod, IRoute } from '../types';\nimport { ApiBody } from '@nestjs/swagger';\n\nexport function addSwaggerBody(route: IRoute, factory: ControllerFactory) {\n if (has('swagger/apiResponse', factory, route)) return;\n if (\n // todo: create DTO variations for each http method\n // for example make all fields optional for PATCH\n // todo: add ValidationPipe groups for each http method\n (<HttpMethod[]>['POST', 'PATCH', 'PUT']).includes(route.httpMethod)\n ) {\n route.decorators.push(\n ApiBody({\n type:\n route.model === null\n ? EmptyDto\n : route.model || factory.options?.model,\n }),\n );\n }\n}\n"],"names":["addSwaggerBody","route","factory","has","includes","httpMethod","decorators","push","ApiBody","type","model","EmptyDto","options"],"mappings":";;;;+BAMgBA;;;eAAAA;;;yBANI;0BAEK;yBAED;AAEjB,SAASA,eAAeC,KAAa,EAAEC,OAA0B;IACtE,IAAIC,IAAAA,YAAG,EAAC,uBAAuBD,SAASD,QAAQ;IAChD,IAIE,AAHA,mDAAmD;IACnD,iDAAiD;IACjD,uDAAuD;IACxC;QAAC;QAAQ;QAAS;KAAM,CAAEG,QAAQ,CAACH,MAAMI,UAAU,GAClE;QACAJ,MAAMK,UAAU,CAACC,IAAI,CACnBC,IAAAA,gBAAO,EAAC;YACNC,MACER,MAAMS,KAAK,KAAK,OACZC,kBAAQ,GACRV,MAAMS,KAAK,IAAIR,QAAQU,OAAO,EAAEF;QACxC;IAEJ;AACF"}
1
+ {"version":3,"sources":["../../../../../src/decorators/controller/add-decorators/add-swagger-body.ts"],"sourcesContent":["import { has } from '../utils/reflect.js';\nimport { ControllerFactory } from '../controller.factory.js';\nimport { EmptyDto } from '../dto/empty.dto.js';\nimport type { HttpMethod, IRoute } from '../types/index.js';\nimport { ApiBody } from '@nestjs/swagger';\n\nexport function addSwaggerBody(route: IRoute, factory: ControllerFactory) {\n if (has('swagger/apiResponse', factory, route)) return;\n if (\n // todo: create DTO variations for each http method\n // for example make all fields optional for PATCH\n // todo: add ValidationPipe groups for each http method\n (<HttpMethod[]>['POST', 'PATCH', 'PUT']).includes(route.httpMethod)\n ) {\n route.decorators.push(\n ApiBody({\n type:\n route.model === null\n ? EmptyDto\n : route.model || factory.options?.model,\n }),\n );\n }\n}\n"],"names":["has","EmptyDto","ApiBody","addSwaggerBody","route","factory","includes","httpMethod","decorators","push","type","model","options"],"mappings":"AAAA,SAASA,GAAG,QAAQ,sBAAsB;AAE1C,SAASC,QAAQ,QAAQ,sBAAsB;AAE/C,SAASC,OAAO,QAAQ,kBAAkB;AAE1C,OAAO,SAASC,eAAeC,KAAa,EAAEC,OAA0B;IACtE,IAAIL,IAAI,uBAAuBK,SAASD,QAAQ;IAChD,IAIE,AAHA,mDAAmD;IACnD,iDAAiD;IACjD,uDAAuD;IACxC;QAAC;QAAQ;QAAS;KAAM,CAAEE,QAAQ,CAACF,MAAMG,UAAU,GAClE;QACAH,MAAMI,UAAU,CAACC,IAAI,CACnBP,QAAQ;YACNQ,MACEN,MAAMO,KAAK,KAAK,OACZV,WACAG,MAAMO,KAAK,IAAIN,QAAQO,OAAO,EAAED;QACxC;IAEJ;AACF"}
@@ -1,3 +1,3 @@
1
- import { ControllerFactory } from '../controller.factory';
2
- import type { IRoute } from '../types';
1
+ import { ControllerFactory } from '../controller.factory.js';
2
+ import type { IRoute } from '../types/index.js';
3
3
  export declare function addSwaggerOperation(route: IRoute, factory: ControllerFactory): void;
@@ -1,21 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "addSwaggerOperation", {
6
- enumerable: true,
7
- get: function() {
8
- return addSwaggerOperation;
9
- }
10
- });
11
- const _reflect = require("../utils/reflect");
12
- const _swagger = require("@nestjs/swagger");
13
- function addSwaggerOperation(route, factory) {
14
- if ((0, _reflect.has)('swagger/apiOperation', factory, route)) return;
1
+ import { has } from "../utils/reflect.js";
2
+ import { ApiOperation } from "@nestjs/swagger";
3
+ /**
4
+ * add Swagger's \@ApiOperation()
5
+ * @param route
6
+ */ export function addSwaggerOperation(route, factory) {
7
+ if (has('swagger/apiOperation', factory, route)) return;
15
8
  // remove "path" or add "prefix" metadata to it from the constructor
16
9
  // to prevent displaying the path without the controller prefix in Swagger docs
17
10
  let { path, ...operation } = route;
18
- route.decorators.push((0, _swagger.ApiOperation)(operation));
11
+ route.decorators.push(ApiOperation(operation));
19
12
  }
20
13
 
21
14
  //# sourceMappingURL=add-swagger-operation.js.map