bea5e1954f
Add the @nx/angular, @nx/nest, @nx/vite, @nx/eslint plugins, then generate the two apps. Adjust the empty-template tsconfig.base.json to be Angular-compatible (drop project references and customConditions that the empty-template defaults to but Angular doesn't support; keep the strict-TS extensions from ADR-0004). apps/portal-shell (Angular 21): - standalone APIs, routing, SCSS, esbuild - vitest-angular as unitTestRunner, playwright for e2e - strict mode - tags scope:portal-shell, type:app - app.config.ts wired with provideZonelessChangeDetection() per ADR-0004 (Angular 21 + Nx 22 generates without zone.js by default) apps/portal-bff (NestJS 11): - Express adapter (default per ADR-0005) - Jest as unitTestRunner - tags scope:portal-bff, type:app - main.ts wired with a global ValidationPipe configured whitelist + forbidNonWhitelisted + transform per ADR-0005 - Phase-2 security additions (helmet, CORS, sessions, CSRF, rate limit, auth guards, error filter) deferred to their respective ADRs - placeholder comment in main.ts Workspace dependencies: class-validator + class-transformer added (required by NestJS ValidationPipe at runtime). Nx-generated .gitignore additions (.angular, __screenshots__) merged into ours. .vscode/extensions.json and launch.json added by Nx are kept (do not override our existing settings.json).
95 lines
2.3 KiB
JSON
95 lines
2.3 KiB
JSON
{
|
|
"$schema": "./node_modules/nx/schemas/nx-schema.json",
|
|
"namedInputs": {
|
|
"default": ["{projectRoot}/**/*", "sharedGlobals"],
|
|
"production": [
|
|
"default",
|
|
"!{projectRoot}/.eslintrc.json",
|
|
"!{projectRoot}/eslint.config.mjs",
|
|
"!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)",
|
|
"!{projectRoot}/tsconfig.spec.json",
|
|
"!{projectRoot}/jest.config.[jt]s",
|
|
"!{projectRoot}/src/test-setup.[jt]s",
|
|
"!{projectRoot}/test-setup.[jt]s"
|
|
],
|
|
"sharedGlobals": []
|
|
},
|
|
"plugins": [
|
|
{
|
|
"plugin": "@nx/js/typescript",
|
|
"options": {
|
|
"typecheck": {
|
|
"targetName": "typecheck"
|
|
},
|
|
"build": {
|
|
"targetName": "build",
|
|
"configName": "tsconfig.lib.json",
|
|
"buildDepsName": "build-deps",
|
|
"watchDepsName": "watch-deps"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"plugin": "@nx/playwright/plugin",
|
|
"options": {
|
|
"targetName": "e2e"
|
|
}
|
|
},
|
|
{
|
|
"plugin": "@nx/eslint/plugin",
|
|
"options": {
|
|
"targetName": "lint"
|
|
}
|
|
},
|
|
{
|
|
"plugin": "@nx/webpack/plugin",
|
|
"options": {
|
|
"buildTargetName": "build",
|
|
"serveTargetName": "serve",
|
|
"previewTargetName": "preview",
|
|
"buildDepsTargetName": "build-deps",
|
|
"watchDepsTargetName": "watch-deps",
|
|
"serveStaticTargetName": "serve-static"
|
|
}
|
|
},
|
|
{
|
|
"plugin": "@nx/jest/plugin",
|
|
"options": {
|
|
"targetName": "test"
|
|
},
|
|
"exclude": ["apps/portal-bff-e2e/**/*"]
|
|
}
|
|
],
|
|
"analytics": false,
|
|
"targetDefaults": {
|
|
"@angular/build:application": {
|
|
"cache": true,
|
|
"dependsOn": ["^build"],
|
|
"inputs": ["production", "^production"]
|
|
},
|
|
"@nx/eslint:lint": {
|
|
"cache": true,
|
|
"inputs": [
|
|
"default",
|
|
"^default",
|
|
"{workspaceRoot}/.eslintrc.json",
|
|
"{workspaceRoot}/.eslintignore",
|
|
"{workspaceRoot}/eslint.config.mjs",
|
|
"{workspaceRoot}/tools/eslint-rules/**/*"
|
|
]
|
|
},
|
|
"@angular/build:unit-test": {
|
|
"cache": true,
|
|
"inputs": ["default", "^production"]
|
|
}
|
|
},
|
|
"generators": {
|
|
"@nx/angular:application": {
|
|
"e2eTestRunner": "playwright",
|
|
"linter": "eslint",
|
|
"style": "scss",
|
|
"unitTestRunner": "vitest-angular"
|
|
}
|
|
}
|
|
}
|