import { readFileSync } from "node:fs" import { fileURLToPath } from "node:url" import { defineConfig } from "vite" import react from "@vitejs/plugin-react" // Die App-Version kommt aus der manifest.json der Integration — derselben // Zahl, die Home Assistant als Version der Integration führt und die das // Backend über sensor.audi_dashboard_app_version meldet (siehe // VERSIONIERUNG.md). Sie wird hier fest einkompiliert, damit die fertige App // weiß, aus welchem Stand sie gebaut wurde, und das gegen den vom Backend // gemeldeten Stand halten kann. // // Bis 2026-08-23 stand die Zahl in einer eigenen Datei VERSION im // Projektstamm. Die ist mit dem Umbau zur Integration überflüssig geworden: // Home Assistant selbst verlangt ein version-Feld in jeder manifest.json, // unabhängig von HACS (das für dieses private Repository ohnehin dauerhaft // ausscheidet, siehe AGENTS.md Abschnitt H). Zwei Quellen für dieselbe // Angabe wären eine Quelle zu viel — sie hätten irgendwann // auseinandergelegen, und der Vergleich, den diese Zahl trägt, wäre still // falsch geworden. // // Absichtlich hart: fehlt die Datei oder das Feld, soll der Build abbrechen // statt still eine App ohne Versionsangabe zu erzeugen — die könnte ihre // eigene Veraltung nicht mehr erkennen, und genau das ist der Zweck der // ganzen Mechanik. const manifestPfad = fileURLToPath( new URL("../custom_components/audi_dashboard/manifest.json", import.meta.url), ) const appVersion: string = JSON.parse(readFileSync(manifestPfad, "utf8")).version if (!appVersion) throw new Error(`Kein "version"-Feld in ${manifestPfad}`) // Basispfad relativ: die App wird sowohl unter einer eigenen Domain als auch // aus einem Unterordner heraus ausgeliefert (Home Assistant: /local/dm360/), // und in der Capacitor-Hülle direkt vom Dateisystem. export default defineConfig({ base: "./", plugins: [react()], define: { __APP_VERSION__: JSON.stringify(appVersion) }, // Nur fuer `vite dev` (server.* wirkt nie in `vite build`, also risikolos // fuer die echte App). Der Browser darf `/api/...` gegen den eigenen // Vite-Ursprung aufrufen - das ist same-origin, keine Praeflight-Anfrage // noetig - und Vite selbst (ein Node-Prozess, keine Browser-CORS-Regeln) // reicht das serverseitig an die HA-Testinstanz weiter. Sonst blockt HA // die Anfrage direkt (siehe AGENTS.md: "CORS ist ein echter Zwang fuer // diese App" - `cors_allowed_origins` wirkt seit HA 2026.8 nicht). Nur // gegen `audi_ha_test` (:18123) - die echte Instanz wird nie beruehrt. server: { port: 5173, proxy: { "/api": { target: "http://localhost:18123", changeOrigin: true, ws: true }, }, }, build: { outDir: "dist", target: "es2022", sourcemap: true, }, })