@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.
- package/index.d.ts +41 -41
- package/package.json +29 -33
- package/src/configs/app.d.ts +5 -4
- package/src/configs/app.js +10 -18
- package/src/configs/app.js.map +1 -1
- package/src/configs/database.js +1 -11
- package/src/configs/database.js.map +1 -1
- package/src/configs/microservice.js +6 -16
- package/src/configs/microservice.js.map +1 -1
- package/src/configs/multi-queue-rabbitmq-server.js +28 -34
- package/src/configs/multi-queue-rabbitmq-server.js.map +1 -1
- package/src/configs/redis-config.js +1 -11
- package/src/configs/redis-config.js.map +1 -1
- package/src/create-app.d.ts +1 -1
- package/src/create-app.js +44 -61
- package/src/create-app.js.map +1 -1
- package/src/create-microservice.d.ts +1 -1
- package/src/create-microservice.js +18 -22
- package/src/create-microservice.js.map +1 -1
- package/src/create-testing-microservice.d.ts +1 -1
- package/src/create-testing-microservice.js +16 -20
- package/src/create-testing-microservice.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-controller-path.d.ts +1 -1
- package/src/decorators/controller/add-decorators/add-controller-path.js +7 -15
- package/src/decorators/controller/add-decorators/add-controller-path.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-controller-tags.d.ts +1 -1
- package/src/decorators/controller/add-decorators/add-controller-tags.js +9 -17
- package/src/decorators/controller/add-decorators/add-controller-tags.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-http-method.d.ts +2 -2
- package/src/decorators/controller/add-decorators/add-http-method.js +13 -20
- package/src/decorators/controller/add-decorators/add-http-method.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-swagger-body.d.ts +2 -2
- package/src/decorators/controller/add-decorators/add-swagger-body.js +7 -17
- package/src/decorators/controller/add-decorators/add-swagger-body.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-swagger-operation.d.ts +2 -2
- package/src/decorators/controller/add-decorators/add-swagger-operation.js +8 -15
- package/src/decorators/controller/add-decorators/add-swagger-operation.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-swagger-params.d.ts +2 -2
- package/src/decorators/controller/add-decorators/add-swagger-params.js +9 -16
- package/src/decorators/controller/add-decorators/add-swagger-params.js.map +1 -1
- package/src/decorators/controller/add-decorators/add-swagger-response.d.ts +2 -2
- package/src/decorators/controller/add-decorators/add-swagger-response.js +10 -20
- package/src/decorators/controller/add-decorators/add-swagger-response.js.map +1 -1
- package/src/decorators/controller/controller.decorator.d.ts +1 -1
- package/src/decorators/controller/controller.decorator.js +12 -13
- package/src/decorators/controller/controller.decorator.js.map +1 -1
- package/src/decorators/controller/controller.factory.d.ts +1 -1
- package/src/decorators/controller/controller.factory.js +59 -67
- package/src/decorators/controller/controller.factory.js.map +1 -1
- package/src/decorators/controller/default-options.d.ts +1 -1
- package/src/decorators/controller/default-options.js +11 -26
- package/src/decorators/controller/default-options.js.map +1 -1
- package/src/decorators/controller/dto/empty.dto.js +2 -12
- package/src/decorators/controller/dto/empty.dto.js.map +1 -1
- package/src/decorators/controller/dto/update-response.dto.js +2 -12
- package/src/decorators/controller/dto/update-response.dto.js.map +1 -1
- package/src/decorators/controller/interceptors/query.interceptor.d.ts +1 -1
- package/src/decorators/controller/interceptors/query.interceptor.js +10 -19
- package/src/decorators/controller/interceptors/query.interceptor.js.map +1 -1
- package/src/decorators/controller/route-handler.d.ts +2 -2
- package/src/decorators/controller/route-handler.js +8 -16
- package/src/decorators/controller/route-handler.js.map +1 -1
- package/src/decorators/controller/route.decorator.d.ts +1 -1
- package/src/decorators/controller/route.decorator.js +11 -11
- package/src/decorators/controller/route.decorator.js.map +1 -1
- package/src/decorators/controller/services/crud-typeorm.service.d.ts +1 -2
- package/src/decorators/controller/services/crud-typeorm.service.js +19 -24
- package/src/decorators/controller/services/crud-typeorm.service.js.map +1 -1
- package/src/decorators/controller/types/index.d.ts +2 -2
- package/src/decorators/controller/types/index.js +1 -4
- package/src/decorators/controller/types/index.js.map +1 -1
- package/src/decorators/controller/utils/merge-options.d.ts +1 -1
- package/src/decorators/controller/utils/merge-options.js +3 -13
- package/src/decorators/controller/utils/merge-options.js.map +1 -1
- package/src/decorators/controller/utils/reflect.d.ts +2 -2
- package/src/decorators/controller/utils/reflect.js +24 -38
- package/src/decorators/controller/utils/reflect.js.map +1 -1
- package/src/decorators/entity.decorator.js +42 -35
- package/src/decorators/entity.decorator.js.map +1 -1
- package/src/decorators/prop.decorator.js +79 -38
- package/src/decorators/prop.decorator.js.map +1 -1
- package/src/exceptions/rpc-bad-request.exception.d.ts +1 -1
- package/src/exceptions/rpc-bad-request.exception.js +5 -15
- package/src/exceptions/rpc-bad-request.exception.js.map +1 -1
- package/src/exceptions/rpc-base.exception.js +10 -15
- package/src/exceptions/rpc-base.exception.js.map +1 -1
- package/src/exceptions/rpc-conflict.exception.d.ts +1 -1
- package/src/exceptions/rpc-conflict.exception.js +5 -15
- package/src/exceptions/rpc-conflict.exception.js.map +1 -1
- package/src/exceptions/rpc-internal-server-error.exception.d.ts +1 -1
- package/src/exceptions/rpc-internal-server-error.exception.js +5 -15
- package/src/exceptions/rpc-internal-server-error.exception.js.map +1 -1
- package/src/exceptions/rpc-method-not-allowed.exception.d.ts +1 -1
- package/src/exceptions/rpc-method-not-allowed.exception.js +5 -15
- package/src/exceptions/rpc-method-not-allowed.exception.js.map +1 -1
- package/src/exceptions/rpc-not-found.exception.d.ts +1 -1
- package/src/exceptions/rpc-not-found.exception.js +5 -15
- package/src/exceptions/rpc-not-found.exception.js.map +1 -1
- package/src/exceptions/rpc-not-implemented.exception.d.ts +1 -1
- package/src/exceptions/rpc-not-implemented.exception.js +5 -15
- package/src/exceptions/rpc-not-implemented.exception.js.map +1 -1
- package/src/exceptions/rpc-unauthorized.exception.d.ts +1 -1
- package/src/exceptions/rpc-unauthorized.exception.js +5 -15
- package/src/exceptions/rpc-unauthorized.exception.js.map +1 -1
- package/src/filters/error-to-rpc-exception.filter.js +12 -22
- package/src/filters/error-to-rpc-exception.filter.js.map +1 -1
- package/src/filters/error-to-ws-exception.filter.js +10 -20
- package/src/filters/error-to-ws-exception.filter.js.map +1 -1
- package/src/filters/typeorm-exception.filter.js +9 -19
- package/src/filters/typeorm-exception.filter.js.map +1 -1
- package/src/filters/ws-exception.filter.js +6 -16
- package/src/filters/ws-exception.filter.js.map +1 -1
- package/src/generate-metadata.d.ts +3 -3
- package/src/generate-metadata.js +18 -74
- package/src/generate-metadata.js.map +1 -1
- package/src/guards/auth.guard.js +43 -44
- package/src/guards/auth.guard.js.map +1 -1
- package/src/modules/basic/basic.controller.js +6 -16
- package/src/modules/basic/basic.controller.js.map +1 -1
- package/src/modules/basic/basic.module.js +15 -23
- package/src/modules/basic/basic.module.js.map +1 -1
- package/src/modules/basic/basic.service.js +4 -14
- package/src/modules/basic/basic.service.js.map +1 -1
- package/src/register-entities.js +37 -20
- package/src/register-entities.js.map +1 -1
- package/src/utils/logger.js +2 -12
- package/src/utils/logger.js.map +1 -1
- package/src/utils/typeorm-to-swagger.d.ts +1 -1
- package/src/utils/typeorm-to-swagger.js +4 -11
- package/src/utils/typeorm-to-swagger.js.map +1 -1
- package/nx.json +0 -190
- package/src/nest-swagger-metadata.js +0 -593
- package/src/nest-swagger-metadata.js.map +0 -1
package/src/create-app.js
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
|
30
|
-
let pkg = typeof options?.package === 'string' ?
|
|
31
|
-
let opts =
|
|
32
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
//
|
|
92
|
-
//
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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(
|
|
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
|
package/src/create-app.js.map
CHANGED
|
@@ -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
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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
|
-
...
|
|
17
|
+
...microserviceOptions,
|
|
22
18
|
...options
|
|
23
19
|
};
|
|
24
20
|
// todo: merge with ./create-testing-microservice
|
|
25
21
|
// opts.testing? .createNestMicroservice(): createMicroservice()
|
|
26
|
-
return
|
|
27
|
-
app.useGlobalFilters(new
|
|
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
|
|
31
|
-
app.useGlobalPipes(new
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
...
|
|
15
|
+
...microserviceOptions,
|
|
20
16
|
...options
|
|
21
17
|
};
|
|
22
18
|
let app = module.createNestMicroservice(opts);
|
|
23
|
-
app.useGlobalFilters(new
|
|
24
|
-
app.useGlobalPipes(new
|
|
25
|
-
exceptionFactory: (errors)=>new
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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(
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 (
|
|
18
|
-
tags = factory.options.tags || factory.options.path ||
|
|
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(
|
|
13
|
+
factory.decorators.push(ApiTags(...tags));
|
|
22
14
|
} else {
|
|
23
|
-
factory.decorators.push(
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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:
|
|
17
|
-
PATCH:
|
|
18
|
-
PUT:
|
|
19
|
-
DELETE:
|
|
20
|
-
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()] ||
|
|
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":["
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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(
|
|
25
|
-
type: route.model === null ?
|
|
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","
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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(
|
|
11
|
+
route.decorators.push(ApiOperation(operation));
|
|
19
12
|
}
|
|
20
13
|
|
|
21
14
|
//# sourceMappingURL=add-swagger-operation.js.map
|