// Bau-Konfiguration für die drei Prozesse (KONZEPT-WINDOWS.md § 4.1): // haupt → out/haupt/index.js (Electron Main) // kern → out/haupt/kern.js (utilityProcess — als zweiter Eintrag im // selben Node-Bau, weil er dieselbe Umgebung hat wie haupt) // bruecke → out/bruecke/index.js (Preload des Fensters) // fenster → out/fenster/ (React) // externalizeDepsPlugin hält "dependencies" (koffi — natives Modul) aus dem // Bündel heraus; sie werden zur Laufzeit aus node_modules geladen. import { resolve } from 'node:path' import { defineConfig, externalizeDepsPlugin } from 'electron-vite' import react from '@vitejs/plugin-react' import tailwindcss from '@tailwindcss/vite' import type { Plugin } from 'vite' // Strikte CSP fürs GEBAUTE Fenster (lädt nur eigene Dateien). Nur im Bau: // Der Dev-Server braucht Inline-Skripte (react-refresh) und WebSocket (HMR), // eine Dev-CSP bräche also genau das Werkzeug, das sie schützen soll. // Ob die Seite unter der CSP vollständig läuft, misst der Smoke-Lauf — // blockte sie das Skript, käme kein Pong und der Lauf würde rot. function cspNurImBau(): Plugin { return { name: 'csp-nur-im-bau', apply: 'build', transformIndexHtml(html) { return html.replace( '
', // img-src erlaubt TMDb-Poster (Kachel + Ändern-Dialog) — sonst // bleibt alles bei 'self'. font-src data: (5.4.0, im Klick-Beweis // gesehen): Vite bettet kleine Schrift-Teile der fontsource-Pakete // als data:-URI ein, und die blockte die CSP — als Fehler in der // Konsole, unsichtbar im Fenster. `\n `, ) }, } } export default defineConfig({ main: { plugins: [externalizeDepsPlugin()], build: { outDir: 'out/haupt', rollupOptions: { input: { index: resolve(__dirname, 'src/haupt/index.ts'), kern: resolve(__dirname, 'src/kern/index.ts'), }, }, }, }, preload: { plugins: [externalizeDepsPlugin()], build: { outDir: 'out/bruecke', rollupOptions: { input: { index: resolve(__dirname, 'src/bruecke/index.ts') }, }, }, }, renderer: { root: 'src/fenster', plugins: [react(), tailwindcss(), cspNurImBau()], build: { outDir: 'out/fenster', rollupOptions: { input: { index: resolve(__dirname, 'src/fenster/index.html') }, }, }, }, })