Files
tobias db3c870910 Testinstanz heisst jetzt Data-Metric-360
Der Docker-Container auf :18123 ist umbenannt (Ansage des Eigentuemers).
Umgestellt sind nur die betriebsrelevanten Verweise:

  testumgebung/aufsetzen.sh    NAME=
  testumgebung/README.md       docker rm -f
  companion-app/vite.config.ts Kommentar am Entwicklungs-Proxy

Die uebrigen ~120 Nennungen in AGENTS.md stehen in Verlaufsabschnitten und
bleiben, wie sie geschrieben wurden - stattdessen eine bindende Notiz oben in
der Datei, dass "audi_ha_test" in allen aelteren Abschnitten denselben
Container meint. Sie haelt auch fest, dass aufsetzen.sh mit "docker rm -f" auf
diesen Namen beginnt: ein Lauf loescht den Container samt allem, was darin
aufgezeichnet ist.

Geprueft: Portzuordnung 18123 unveraendert, Container startet unter dem neuen
Namen sauber (Audi Dashboard 2026.9.6.9 eingerichtet, kein Traceback), Profil
und Daten unberuehrt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-07 15:40:32 +02:00

67 lines
3.2 KiB
TypeScript

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 `Data-Metric-360` (:18123) - die echte Instanz wird nie beruehrt.
server: {
port: 5173,
proxy: {
"/api": { target: "http://localhost:18123", changeOrigin: true, ws: true },
// Fahrzeugfotos (/local/bilder/...) und die Statikdateien der
// Integration (Markenlogo) liegen ebenfalls auf der HA-Instanz. Ohne
// diese beiden Eintraege liefert der Dev-Server sie selbst - also gar
// nicht - und jeder optische Abgleich gegen das Panel sieht nur
// Platzhalter statt der echten Bilder.
"/local": { target: "http://localhost:18123", changeOrigin: true },
"/audi_dashboard_static": { target: "http://localhost:18123", changeOrigin: true },
},
},
build: {
outDir: "dist",
target: "es2022",
sourcemap: true,
},
})