@mbc-cqrs-serverless/cli 0.1.31-beta.0 → 0.1.33-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.31-beta.0",
3
+ "version": "0.1.33-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": "ad5316db04ea32de8151f20a1b53499cda0f1caf"
52
+ "gitHead": "cfe8a02acd7525b3404fba04952290d2c4b0509b"
53
53
  }
@@ -1,3 +1,3 @@
1
1
  module.exports = {
2
- outdir: 'graph',
2
+ outdir: '../report/infra',
3
3
  }
@@ -6,7 +6,4 @@ node_modules
6
6
 
7
7
  # CDK asset staging directory
8
8
  .cdk.staging
9
- cdk.out
10
-
11
- #
12
- graph
9
+ cdk.out
@@ -48,11 +48,17 @@ export class PipelineStack extends Stack {
48
48
  const testStep = new CodeBuildStep(`${prefix}Test`, {
49
49
  projectName: `${prefix}Test`,
50
50
  installCommands: [
51
+ 'apt install graphviz -y',
51
52
  'npm i -g pnpm',
52
53
  'npm ci',
53
54
  'pnpm --dir ./infra install --frozen-lockfile',
54
55
  ],
55
- commands: ['npm run test', 'npm --prefix ./infra run test'],
56
+ commands: [
57
+ 'npm run test', // source test
58
+ 'npm --prefix ./infra run test', // infra snapshot test
59
+ 'npm --prefix ./infra run cdk synth', // generate infra diagram
60
+ 'npm ci && cp .env.local .env && npm run generate:swagger', // generate api doc
61
+ ],
56
62
  primaryOutputDirectory: 'report',
57
63
  partialBuildSpec: BuildSpec.fromObject({
58
64
  reports: {
@@ -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
+ })