@mbc-cqrs-serverless/cli 0.1.32-beta.0 → 0.1.34-beta.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mbc-cqrs-serverless/cli",
3
- "version": "0.1.32-beta.0",
3
+ "version": "0.1.34-beta.0",
4
4
  "description": "a CLI to get started with MBC CQRS serverless framework",
5
5
  "keywords": [
6
6
  "mbc",
@@ -49,5 +49,5 @@
49
49
  "devDependencies": {
50
50
  "@faker-js/faker": "^8.3.1"
51
51
  },
52
- "gitHead": "3acb7fb1b6a2df99034ea00560412294dc980b09"
52
+ "gitHead": "9f389686f9897f614907c14aefbcf99422600ff7"
53
53
  }
@@ -57,6 +57,7 @@ export class PipelineStack extends Stack {
57
57
  'npm run test', // source test
58
58
  'npm --prefix ./infra run test', // infra snapshot test
59
59
  'npm --prefix ./infra run cdk synth', // generate infra diagram
60
+ 'npm ci && cp .env.local .env && npm run generate:swagger', // generate api doc
60
61
  ],
61
62
  primaryOutputDirectory: 'report',
62
63
  partialBuildSpec: BuildSpec.fromObject({
@@ -36,7 +36,8 @@
36
36
  "migrate:dev": "prisma migrate dev",
37
37
  "migrate:rds": "prisma migrate deploy",
38
38
  "migrate:ddb": "ts-node prisma/ddb.ts",
39
- "migrate": "npm run migrate:rds && npm run migrate:ddb"
39
+ "migrate": "npm run migrate:rds && npm run migrate:ddb",
40
+ "generate:swagger": "nest start --entryFile generate-swagger"
40
41
  },
41
42
  "dependencies": {
42
43
  "@mbc-cqrs-serverless/core": "",
@@ -0,0 +1,85 @@
1
+ /* eslint-disable no-console */
2
+ import { AppModule, HEADER_TENANT_CODE } from '@mbc-cqrs-serverless/core'
3
+ import { NestFactory } from '@nestjs/core'
4
+ import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'
5
+ import { existsSync, mkdirSync, writeFileSync } from 'fs'
6
+ import path from 'path'
7
+ import { format } from 'prettier'
8
+
9
+ import { MainModule } from './main.module'
10
+
11
+ const template = `<!DOCTYPE html>
12
+ <html lang="en">
13
+ <head>
14
+ <meta charset="utf-8" />
15
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
16
+ <meta
17
+ name="description"
18
+ content="serverless"
19
+ />
20
+ <title>serverless</title>
21
+ <link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@4.4.1/swagger-ui.css" />
22
+ </head>
23
+ <body>
24
+ <div id="swagger-ui"></div>
25
+ <script src="https://unpkg.com/swagger-ui-dist@4.4.1/swagger-ui-bundle.js" crossorigin></script>
26
+ <script src="https://unpkg.com/swagger-ui-dist@4.4.1/swagger-ui-standalone-preset.js" crossorigin></script>
27
+ <script>
28
+ window.onload = () => {
29
+ window.ui = SwaggerUIBundle({
30
+ spec: ###JSON###,
31
+ dom_id: '#swagger-ui',
32
+ });
33
+ };
34
+ </script>
35
+ </body>
36
+ </html>`
37
+
38
+ async function generateSwagger() {
39
+ const app = await NestFactory.create(
40
+ AppModule.forRoot({
41
+ rootModule: MainModule,
42
+ }),
43
+ )
44
+ const config = new DocumentBuilder()
45
+ .setTitle('serverless')
46
+ .setDescription('The serverless API')
47
+ .addApiKey(
48
+ { type: 'apiKey', name: 'Authorization', in: 'header' },
49
+ 'Api-Key',
50
+ )
51
+ .addSecurityRequirements('Api-Key')
52
+ .addGlobalParameters({
53
+ in: 'header',
54
+ required: false,
55
+ name: HEADER_TENANT_CODE,
56
+ })
57
+ .build()
58
+
59
+ const document = SwaggerModule.createDocument(app, config, {
60
+ deepScanRoutes: true,
61
+ })
62
+
63
+ const reportDir = path.join(__dirname, '../report')
64
+
65
+ if (!existsSync(reportDir)) {
66
+ mkdirSync(reportDir)
67
+ }
68
+
69
+ format(JSON.stringify(document), {
70
+ parser: 'json',
71
+ }).then((ret) => writeFileSync(path.join(reportDir, 'swagger.json'), ret))
72
+
73
+ writeFileSync(
74
+ path.join(reportDir, 'swagger-ui.html'),
75
+ template.replace('###JSON###', JSON.stringify(document)),
76
+ )
77
+
78
+ console.log('Swagger documentation has been successfully generated!')
79
+ await app.close()
80
+ }
81
+
82
+ generateSwagger().catch((err) => {
83
+ console.error('Error generating Swagger documentation:', err)
84
+ process.exit(1)
85
+ })