- make quick/check/mutation from cj/security-baseline (Makefile unchanged, settings in baseline.mk), pre-commit, gitleaks, Semgrep rules, ESLint security rules, Forgejo workflow - tests/security: generic baseline tests plus app config and role tests against createApp() with an in-memory database - extract createApp() from src/server/index.ts; LB_DATABASE_PATH for tests - fix gaps found by the tests: reject unknown fields on project create, answer malformed JSON with 400 instead of 500, set nosniff on the API - npm audit fix (next 16.4.1 and others, no high/critical left) - clear ESLint errors, safeFileName without control-character regex - per-project ownership stays an open, documented gap (idorGap -> TODO) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
2.3 KiB
JSON
67 lines
2.3 KiB
JSON
{
|
|
"name": "leistungsbilanz",
|
|
"version": "1.0.0",
|
|
"description": "Spreadsheet-style circuit list editor for electrical distribution planning",
|
|
"main": "dist/server/index.js",
|
|
"engines": {
|
|
"node": "24.x"
|
|
},
|
|
"scripts": {
|
|
"dev": "npm run dev:api",
|
|
"dev:api": "tsx watch src/server/index.ts",
|
|
"dev:web": "next dev -p 3001",
|
|
"docker:up": "docker compose up --build --detach",
|
|
"docker:down": "docker compose down",
|
|
"docker:logs": "docker compose logs --follow",
|
|
"docker:dev:up": "docker compose -f compose.dev.yaml up --build --detach",
|
|
"docker:dev:down": "docker compose -f compose.dev.yaml down",
|
|
"docker:dev:logs": "docker compose -f compose.dev.yaml logs --follow",
|
|
"build": "npm run build:api",
|
|
"build:api": "tsc -p tsconfig.json",
|
|
"build:web": "next build",
|
|
"typecheck:scripts": "tsc --noEmit -p tsconfig.scripts.json",
|
|
"start": "node dist/server/index.js",
|
|
"test": "node scripts/run-tests.mjs",
|
|
"test:watch": "node scripts/run-tests.mjs --watch",
|
|
"db:generate": "drizzle-kit generate",
|
|
"db:migrate": "node scripts/run-migrations.js",
|
|
"db:backup": "tsx scripts/db-backup.ts",
|
|
"db:verify:circuit-schema": "node scripts/db-verify-circuit-schema.js",
|
|
"revit:verify-reference": "tsx scripts/verify-revit-reference-xlsx.ts",
|
|
"lint": "eslint .",
|
|
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.next.json && tsc --noEmit -p tsconfig.scripts.json"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"dependencies": {
|
|
"better-sqlite3": "^12.9.0",
|
|
"bootstrap": "^5.3.8",
|
|
"drizzle-orm": "^0.45.2",
|
|
"exceljs": "^4.4.0",
|
|
"express": "^5.2.1",
|
|
"lucide-react": "^1.14.0",
|
|
"next": "^16.2.4",
|
|
"react": "^19.2.5",
|
|
"react-dom": "^19.2.5",
|
|
"zod": "^4.4.1"
|
|
},
|
|
"devDependencies": {
|
|
"@eslint/js": "9.39.5",
|
|
"@types/better-sqlite3": "^7.6.13",
|
|
"@types/express": "^5.0.6",
|
|
"@types/node": "^24.10.1",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"drizzle-kit": "^0.31.10",
|
|
"eslint": "9.39.5",
|
|
"eslint-plugin-no-unsanitized": "4.1.5",
|
|
"eslint-plugin-react": "7.37.5",
|
|
"eslint-plugin-react-hooks": "7.1.1",
|
|
"eslint-plugin-security": "4.2.0",
|
|
"globals": "17.13.0",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "8.71.2"
|
|
}
|
|
}
|