feat: add ESLint flat config, Prettier, dependency-cruiser, and Husky

Setup code quality tooling for the monorepo:
- ESLint 9 flat config with TypeScript, import ordering, and NestJS rules
- Prettier with consistent formatting across all files
- dependency-cruiser enforcing module boundary rules (no cross-module internals, no circular deps)
- Husky + lint-staged for pre-commit hooks
- Auto-fixed existing files for type imports and import ordering

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Ho Ngoc Hai
2026-04-07 23:57:28 +07:00
parent e1e5fa6252
commit 83d55de65b
28 changed files with 2365 additions and 155 deletions

View File

@@ -7,7 +7,7 @@
"build": "nest build",
"start": "node dist/main",
"start:prod": "node dist/main",
"lint": "eslint \"{src,test}/**/*.ts\"",
"lint": "eslint src/",
"test": "vitest run",
"typecheck": "tsc --noEmit"
},
@@ -15,7 +15,12 @@
"@nestjs/common": "^11.0.0",
"@nestjs/core": "^11.0.0",
"@nestjs/cqrs": "^11.0.0",
"@nestjs/event-emitter": "^3.0.0",
"@nestjs/platform-express": "^11.0.0",
"@prisma/client": "^6.0.0",
"ioredis": "^5.4.0",
"pino": "^9.0.0",
"pino-pretty": "^13.0.0",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.0"
},
@@ -26,6 +31,7 @@
"@types/express": "^5.0.0",
"@types/node": "^22.0.0",
"typescript": "^5.7.0",
"prisma": "^6.0.0",
"vitest": "^3.0.0"
}
}

View File

@@ -1,9 +1,10 @@
import { SharedModule } from '@modules/shared';
import { Module } from '@nestjs/common';
import { CqrsModule } from '@nestjs/cqrs';
import { AppController } from './app.controller';
@Module({
imports: [CqrsModule.forRoot()],
imports: [CqrsModule.forRoot(), SharedModule],
controllers: [AppController],
})
export class AppModule {}

View File

@@ -8,8 +8,11 @@
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"declaration": false,
"declarationMap": false
"declarationMap": false,
"paths": {
"@modules/*": ["../../src/modules/*"]
}
},
"include": ["src/**/*"],
"include": ["src/**/*", "../../src/modules/**/*"],
"exclude": ["node_modules", "dist"]
}