Skip to content

Commit f3eaccc

Browse files
committed
Configured compodoc + swagger + i18n + etc
1 parent 85bd672 commit f3eaccc

9 files changed

+3089
-120
lines changed

.env.example

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export NODE_ENV=development

.vscode/settings.json

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"cSpell.words": ["nestjs", "swcrc"]
3+
}

nest-cli.json

+20-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,25 @@
33
"collection": "@nestjs/schematics",
44
"sourceRoot": "src",
55
"compilerOptions": {
6-
"deleteOutDir": true
6+
"deleteOutDir": true,
7+
"typeCheck": true,
8+
"webpack": false,
9+
"assets": [{ "include": "i18n/**/*", "watchAssets": true }],
10+
"builder": {
11+
"type": "swc",
12+
"options": {
13+
"swcrcPath": "./.swcrc"
14+
}
15+
},
16+
"plugins": [
17+
{
18+
"name": "@nestjs/swagger",
19+
"options": {
20+
"classValidatorShim": true,
21+
"introspectComments": true,
22+
"dtoFileNameSuffix": [".dto.ts", ".entity.ts", ".out.ts"]
23+
}
24+
}
25+
]
726
}
827
}

package.json

+18-5
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,30 @@
2121
"test:watch": "jest --watch",
2222
"test:cov": "jest --coverage",
2323
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
24-
"test:e2e": "jest --config ./test/jest-e2e.json"
24+
"test:e2e": "jest --config ./test/jest-e2e.json",
25+
"docs": "compodoc -p compodoc.tsconfig.json -d docs/internal --theme material",
26+
"docs:serve": "compodoc -p compodoc.tsconfig.json -d docs/internal --theme material -s"
2527
},
2628
"dependencies": {
2729
"@nestjs/common": "^10.0.0",
2830
"@nestjs/core": "^10.0.0",
2931
"@nestjs/platform-express": "^10.0.0",
32+
"@nestjs/swagger": "^7.3.1",
33+
"@swc/cli": "^0.3.12",
34+
"@swc/core": "^1.5.7",
35+
"class-transformer": "^0.5.1",
36+
"class-validator": "^0.14.1",
37+
"helmet": "^7.1.0",
38+
"nestjs-i18n": "^10.4.5",
3039
"reflect-metadata": "^0.2.0",
3140
"rxjs": "^7.8.1"
3241
},
3342
"devDependencies": {
43+
"@compodoc/compodoc": "^1.1.24",
3444
"@nestjs/cli": "^10.0.0",
3545
"@nestjs/schematics": "^10.0.0",
3646
"@nestjs/testing": "^10.0.0",
47+
"@swc/jest": "^0.2.36",
3748
"@types/express": "^4.17.17",
3849
"@types/jest": "^29.5.2",
3950
"@types/node": "^20.3.1",
@@ -43,7 +54,7 @@
4354
"eslint": "^8.42.0",
4455
"eslint-config-prettier": "^9.0.0",
4556
"eslint-plugin-prettier": "^5.0.0",
46-
"jest": "^29.5.0",
57+
"jest": "^29.7.0",
4758
"prettier": "^3.0.0",
4859
"source-map-support": "^0.5.21",
4960
"supertest": "^6.3.3",
@@ -54,16 +65,18 @@
5465
"typescript": "^5.1.3"
5566
},
5667
"jest": {
68+
"transform": {
69+
"^.+\\.(t|j)s?$": [
70+
"@swc/jest"
71+
]
72+
},
5773
"moduleFileExtensions": [
5874
"js",
5975
"json",
6076
"ts"
6177
],
6278
"rootDir": "src",
6379
"testRegex": ".*\\.spec\\.ts$",
64-
"transform": {
65-
"^.+\\.(t|j)s$": "ts-jest"
66-
},
6780
"collectCoverageFrom": [
6881
"**/*.(t|j)s"
6982
],

src/app.controller.spec.ts

-22
This file was deleted.

src/app.service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { Injectable } from '@nestjs/common';
1+
import { Injectable } from "@nestjs/common";
22

33
@Injectable()
44
export class AppService {
55
getHello(): string {
6-
return 'Hello World!';
6+
return "Hello World!";
77
}
88
}

src/main.ts

+50-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,56 @@
1-
import { NestFactory } from '@nestjs/core';
2-
import { AppModule } from './app.module';
1+
import { VersioningType } from "@nestjs/common";
2+
import { NestFactory } from "@nestjs/core";
3+
import { DocumentBuilder, SwaggerModule } from "@nestjs/swagger";
4+
import helmet from "helmet";
5+
import { I18nValidationExceptionFilter, I18nValidationPipe } from "nestjs-i18n";
6+
7+
import { AppModule } from "./app.module";
8+
import metadata from "./metadata";
39

410
async function bootstrap() {
511
const app = await NestFactory.create(AppModule);
12+
13+
app.useGlobalFilters(
14+
new I18nValidationExceptionFilter({
15+
detailedErrors: false,
16+
}),
17+
);
18+
19+
app.enableVersioning({
20+
type: VersioningType.URI,
21+
prefix: "v",
22+
});
23+
24+
app.use(helmet());
25+
26+
app.useGlobalPipes(
27+
new I18nValidationPipe({
28+
transform: true,
29+
forbidUnknownValues: true,
30+
forbidNonWhitelisted: true,
31+
stopAtFirstError: process.env.NODE_ENV !== "development",
32+
disableErrorMessages: process.env.NODE_ENV !== "development",
33+
}),
34+
);
35+
36+
app.enableCors();
37+
38+
if (process.env.NODE_ENV === "development") {
39+
const openAPIConfig = new DocumentBuilder()
40+
.addBearerAuth()
41+
.setTitle("Boilerplate")
42+
.setDescription("Super Stable and Production-Ready 😬")
43+
.setVersion("0.1")
44+
.build();
45+
46+
await SwaggerModule.loadPluginMetadata(metadata);
47+
48+
const swaggerDocument = SwaggerModule.createDocument(app, openAPIConfig, {
49+
ignoreGlobalPrefix: false,
50+
});
51+
SwaggerModule.setup("/docs/v1/swagger/", app, swaggerDocument);
52+
}
53+
654
await app.listen(3000);
755
}
856
bootstrap();

src/metadata.ts

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/* eslint-disable */
2+
export default async () => {
3+
const t = {};
4+
return { "@nestjs/swagger": { "models": [], "controllers": [[import("./app.controller"), { "AppController": { "getHello": { type: String } } }]] } };
5+
};

0 commit comments

Comments
 (0)