waffensachkunde
Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.
| 1 | { |
| 2 | "extends": "./tsconfig.base.json", |
| 3 | |
| 4 | /* ── Warum die Tests ein eigenes Projekt sind ───────────────────────── |
| 5 | Vitest-Dateien prüfen beide Welten: `tests/renderer-*.test.tsx` mountet |
| 6 | React im jsdom, `tests/lernstand.test.ts` öffnet eine SQLite-Datei im |
| 7 | Main-Prozess, und `tests/bogen-echt.test.ts` führt beides zusammen |
| 8 | (echter Prüfungsbogen aus dem Main-Prozess, gerendert im Renderer). |
| 9 | Das ist für Integrationstests richtig so. |
| 10 | |
| 11 | Lagen diese Dateien im Web-Projekt, zog jeder Import aus `src/main` |
| 12 | eine Datei in das Programm, die dort nicht im `include` steht — TypeScript |
| 13 | meldete das als TS6307 („File … is not listed within the file list of |
| 14 | project"). Zehn solcher Meldungen machten `tsc -p tsconfig.web.json` |
| 15 | unbrauchbar; echte Fehler wären darin untergegangen. |
| 16 | |
| 17 | Dieses Projekt darf beide Welten sehen. Die Trennung bleibt trotzdem |
| 18 | scharf, weil sie woanders durchgesetzt wird: |
| 19 | - tsconfig.node.json prüft `src/main` weiterhin OHNE die DOM-Bibliothek, |
| 20 | Zugriffe auf `document`/`window` bleiben dort also Compilerfehler; |
| 21 | - tsconfig.web.json prüft `src/renderer` weiterhin OHNE die Node-Typen, |
| 22 | Zugriffe auf `process`/`Buffer` bleiben dort also Compilerfehler; |
| 23 | - eslint.config.mjs verbietet dem Renderer per no-restricted-imports |
| 24 | jeden Import aus `node:*`, `fs`, `path`, `child_process`, `electron`. |
| 25 | Nur die Testdateien selbst dürfen beides — sie laufen in Node. */ |
| 26 | "include": [ |
| 27 | "tests/**/*.ts", |
| 28 | "tests/**/*.tsx", |
| 29 | "src/main/**/*.ts", |
| 30 | "src/preload/**/*.ts", |
| 31 | "src/preload/**/*.d.ts", |
| 32 | "src/renderer/**/*.ts", |
| 33 | "src/renderer/**/*.tsx", |
| 34 | "src/renderer/**/*.d.ts", |
| 35 | "src/shared/**/*.ts", |
| 36 | // `tools/paketstand.mjs` wird von tests/paketstand.test.ts geprueft. |
| 37 | // Die Datei ist JavaScript, weil tools/gate-stempel.mjs sie ohne |
| 38 | // Uebersetzungsschritt laedt; ihre Typen stehen als JSDoc darin. |
| 39 | "tools/**/*.mjs" |
| 40 | ], |
| 41 | "compilerOptions": { |
| 42 | "composite": true, |
| 43 | "allowJs": true, |
| 44 | // Beide Umgebungen: jsdom braucht DOM, der Dateizugriff der |
| 45 | // Main-Prozess-Tests braucht Node. |
| 46 | "lib": ["ES2023", "DOM", "DOM.Iterable"], |
| 47 | "types": ["node", "vite/client", "@testing-library/jest-dom"], |
| 48 | "jsx": "react-jsx", |
| 49 | "outDir": "node_modules/.tmp/tsc-tests", |
| 50 | "tsBuildInfoFile": "node_modules/.tmp/tsc-tests.tsbuildinfo", |
| 51 | // Kein "baseUrl" - siehe Begruendung in tsconfig.web.json. |
| 52 | "paths": { |
| 53 | "@renderer/*": ["./src/renderer/src/*"], |
| 54 | "@shared/*": ["./src/shared/*"] |
| 55 | } |
| 56 | } |
| 57 | } |