@rsdk/http.server 6.0.0-next.8 → 6.0.0-next.9

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.
@@ -13,10 +13,12 @@ export interface ParsersConfig {
13
13
  };
14
14
  cookie: boolean;
15
15
  }
16
- export interface SwaggerOptions extends Partial<OpenApiOptions> {
17
- /** URL path for Swagger UI */
18
- url?: string;
19
- }
16
+ export type SwaggerOptions = Partial<OpenApiOptions> | {
17
+ fromFile: string;
18
+ };
19
+ export declare function isFromFile(swagger: SwaggerOptions): swagger is {
20
+ fromFile: string;
21
+ };
20
22
  export interface HttpTransportOptions {
21
23
  /**
22
24
  * CORS middleware options
@@ -37,7 +39,7 @@ export interface HttpTransportOptions {
37
39
  * NOTE: SwaggerUI is enabled or disabled by HTTP_SWAGGER_UI_ENABLED
38
40
  * (true by default).
39
41
  */
40
- swagger?: SwaggerOptions | SwaggerOptions[];
42
+ swagger?: Record<string, SwaggerOptions>;
41
43
  }
42
44
  export declare abstract class AbstractHttpTransport implements IHttpTransport {
43
45
  protected readonly options: HttpTransportOptions;
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AbstractHttpTransport = void 0;
4
+ exports.isFromFile = isFromFile;
4
5
  const swagger_1 = require("@nestjs/swagger");
6
+ const common_node_1 = require("@rsdk/common.node");
5
7
  const core_1 = require("@rsdk/core");
6
8
  const http_openapi_1 = require("@rsdk/http.openapi");
7
9
  const controllers_1 = require("./controllers");
8
10
  const error_handling_1 = require("./error-handling");
9
11
  const http_config_1 = require("./http.config");
10
12
  const http_headers_1 = require("./http.headers");
13
+ function isFromFile(swagger) {
14
+ return typeof swagger === 'object' && 'fromFile' in swagger;
15
+ }
11
16
  class AbstractHttpTransport {
12
17
  options;
13
18
  constructor(options = {}) {
@@ -54,19 +59,19 @@ class AbstractHttpTransport {
54
59
  if (cors) {
55
60
  app.enableCors(cors);
56
61
  }
57
- if (!swaggerUI) {
62
+ if (!swaggerUI || !swagger) {
58
63
  return;
59
64
  }
60
- const configs = Array.isArray(swagger) ? swagger : [swagger ?? {}];
61
- for (const config of configs) {
62
- const generator = new http_openapi_1.OpenApiGenerator(context, {
63
- title: app.get(core_1.APP_NAME),
64
- version: app.get(core_1.APP_VERSION),
65
- description: app.get(core_1.APP_DESCRIPTION),
66
- ...config,
67
- });
68
- const document = await generator.generate();
69
- swagger_1.SwaggerModule.setup(config.url ?? '/swagger', app, document);
65
+ for (const [url, config] of Object.entries(swagger)) {
66
+ const document = isFromFile(config)
67
+ ? await (0, common_node_1.readObj)(config.fromFile)
68
+ : await new http_openapi_1.OpenApiGenerator(context, {
69
+ title: app.get(core_1.APP_NAME),
70
+ version: app.get(core_1.APP_VERSION),
71
+ description: app.get(core_1.APP_DESCRIPTION),
72
+ ...config,
73
+ }).generate();
74
+ swagger_1.SwaggerModule.setup(url, app, document);
70
75
  }
71
76
  }
72
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"http.transport.js","sourceRoot":"","sources":["../src/http.transport.ts"],"names":[],"mappings":";;;AAKA,6CAAgD;AAahD,qCAAoE;AAEpE,qDAAsD;AAGtD,+CAA4E;AAC5E,qDAI0B;AAC1B,+CAA2C;AAC3C,iDAA6C;AAyC7C,MAAsB,qBAAqB;IACV;IAA/B,YAA+B,UAAgC,EAAE;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAErE,cAAc,CAAC,GAAqB;QAClC,OAAO,IAAI,0BAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,GAAqB;QAClC,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,oCAAmB,EAAE,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,iCAAgB,EAAE,CAAC;IAChC,CAAC;IAED,iBAAiB;QACf,OAAO,CAAC,IAAI,sCAAqB,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,WAAW;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB;QACjB,OAAO,kCAAoB,CAAC;IAC9B,CAAC;IAED,oBAAoB;QAClB,OAAO,mCAAqB,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,aAA4B;QAC5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAEzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,aAA4B;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAqB,EACrB,OAAwB;QAExB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACvD,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QACxD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAErD,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAEnE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,+BAAgB,CAAC,OAAO,EAAE;gBAC9C,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,eAAQ,CAAC;gBACxB,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAW,CAAC;gBAC7B,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,sBAAe,CAAC;gBACrC,GAAG,MAAM;aACV,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;YAE5C,uBAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,UAAU,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CAKF;AApFD,sDAoFC"}
1
+ {"version":3,"file":"http.transport.js","sourceRoot":"","sources":["../src/http.transport.ts"],"names":[],"mappings":";;;AA2CA,gCAIC;AA1CD,6CAAgD;AAEhD,mDAA4C;AAY5C,qCAAoE;AAEpE,qDAAsD;AAGtD,+CAA4E;AAC5E,qDAI0B;AAC1B,+CAA2C;AAC3C,iDAA6C;AAY7C,SAAgB,UAAU,CACxB,OAAuB;IAEvB,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC;AAC9D,CAAC;AA4BD,MAAsB,qBAAqB;IACV;IAA/B,YAA+B,UAAgC,EAAE;QAAlC,YAAO,GAAP,OAAO,CAA2B;IAAG,CAAC;IAErE,cAAc,CAAC,GAAqB;QAClC,OAAO,IAAI,0BAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,cAAc,CAAC,GAAqB;QAClC,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK,MAAM,CAAC;IAClC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,oCAAmB,EAAE,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,iCAAgB,EAAE,CAAC;IAChC,CAAC;IAED,iBAAiB;QACf,OAAO,CAAC,IAAI,sCAAqB,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,WAAW;QACT,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mBAAmB;QACjB,OAAO,kCAAoB,CAAC;IAC9B,CAAC;IAED,oBAAoB;QAClB,OAAO,mCAAqB,CAAC;IAC/B,CAAC;IAED,iBAAiB,CAAC,aAA4B;QAC5C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QAEzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,aAA4B;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,GAAqB,EACrB,OAAwB;QAExB,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC;QACvD,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,wBAAU,CAAC,CAAC;QACxD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAErD,IAAI,YAAY,EAAE,CAAC;YACjB,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;gBACjC,CAAC,CAAC,MAAM,IAAA,qBAAO,EAAgB,MAAM,CAAC,QAAQ,CAAC;gBAC/C,CAAC,CAAC,MAAM,IAAI,+BAAgB,CAAC,OAAO,EAAE;oBAClC,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,eAAQ,CAAC;oBACxB,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,kBAAW,CAAC;oBAC7B,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,sBAAe,CAAC;oBACrC,GAAG,MAAM;iBACV,CAAC,CAAC,QAAQ,EAAE,CAAC;YAElB,uBAAa,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CAKF;AAlFD,sDAkFC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsdk/http.server",
3
- "version": "6.0.0-next.8",
3
+ "version": "6.0.0-next.9",
4
4
  "description": "HTTP transport for rsdk apps (needs some of HTTP adapters)",
5
5
  "license": "Apache License 2.0",
6
6
  "publishConfig": {
@@ -15,6 +15,7 @@
15
15
  "@nestjs/core": "^10.0.0",
16
16
  "@nestjs/swagger": "^7.0.0 || ^8.0.0",
17
17
  "@rsdk/common": "*",
18
+ "@rsdk/common.node": "*",
18
19
  "@rsdk/core": "*",
19
20
  "@rsdk/http.openapi": "*",
20
21
  "@rsdk/logging": "*",
@@ -25,5 +26,5 @@
25
26
  "reflect-metadata": "^0.1.12 || ^0.2.0",
26
27
  "rxjs": "^7.8.1"
27
28
  },
28
- "gitHead": "320e0f477ca338642e2237fdbed869c01615855b"
29
+ "gitHead": "1489dda3b612de37a2b927e8c74058a910a4ddc9"
29
30
  }
@@ -1,10 +1,11 @@
1
- /* eslint-disable unicorn/no-nested-ternary */
2
1
  import { type ExecutionContext } from '@nestjs/common';
3
2
  import type { Controller, INestApplication } from '@nestjs/common/interfaces';
4
3
  import type { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
5
4
  import type { AbstractHttpAdapter } from '@nestjs/core';
5
+ import type { OpenAPIObject } from '@nestjs/swagger';
6
6
  import { SwaggerModule } from '@nestjs/swagger';
7
7
  import type { Constructor, DeepPartial } from '@rsdk/common';
8
+ import { readObj } from '@rsdk/common.node';
8
9
  import type {
9
10
  ConfigContext,
10
11
  GenericHeaders,
@@ -38,9 +39,12 @@ export interface ParsersConfig {
38
39
  cookie: boolean;
39
40
  }
40
41
 
41
- export interface SwaggerOptions extends Partial<OpenApiOptions> {
42
- /** URL path for Swagger UI */
43
- url?: string;
42
+ export type SwaggerOptions = Partial<OpenApiOptions> | { fromFile: string };
43
+
44
+ export function isFromFile(
45
+ swagger: SwaggerOptions,
46
+ ): swagger is { fromFile: string } {
47
+ return typeof swagger === 'object' && 'fromFile' in swagger;
44
48
  }
45
49
 
46
50
  export interface HttpTransportOptions {
@@ -66,7 +70,7 @@ export interface HttpTransportOptions {
66
70
  * NOTE: SwaggerUI is enabled or disabled by HTTP_SWAGGER_UI_ENABLED
67
71
  * (true by default).
68
72
  */
69
- swagger?: SwaggerOptions | SwaggerOptions[];
73
+ swagger?: Record<string, SwaggerOptions>;
70
74
  }
71
75
 
72
76
  export abstract class AbstractHttpTransport implements IHttpTransport {
@@ -130,23 +134,21 @@ export abstract class AbstractHttpTransport implements IHttpTransport {
130
134
  app.enableCors(cors);
131
135
  }
132
136
 
133
- if (!swaggerUI) {
137
+ if (!swaggerUI || !swagger) {
134
138
  return;
135
139
  }
136
140
 
137
- const configs = Array.isArray(swagger) ? swagger : [swagger ?? {}];
138
-
139
- for (const config of configs) {
140
- const generator = new OpenApiGenerator(context, {
141
- title: app.get(APP_NAME),
142
- version: app.get(APP_VERSION),
143
- description: app.get(APP_DESCRIPTION),
144
- ...config,
145
- });
146
-
147
- const document = await generator.generate();
148
-
149
- SwaggerModule.setup(config.url ?? '/swagger', app, document);
141
+ for (const [url, config] of Object.entries(swagger)) {
142
+ const document = isFromFile(config)
143
+ ? await readObj<OpenAPIObject>(config.fromFile)
144
+ : await new OpenApiGenerator(context, {
145
+ title: app.get(APP_NAME),
146
+ version: app.get(APP_VERSION),
147
+ description: app.get(APP_DESCRIPTION),
148
+ ...config,
149
+ }).generate();
150
+
151
+ SwaggerModule.setup(url, app, document);
150
152
  }
151
153
  }
152
154