@mbc-cqrs-serverless/cli 0.1.32-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.
|
|
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": "
|
|
52
|
+
"gitHead": "cfe8a02acd7525b3404fba04952290d2c4b0509b"
|
|
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({
|
package/templates/package.json
CHANGED
|
@@ -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
|
+
})
|