| import { defineConfig } from "vite"; | |
| import type { Plugin } from "vite"; | |
| import react from "@vitejs/plugin-react"; | |
| import { viteSingleFile } from "vite-plugin-singlefile"; | |
| // --------------------------------------------------------------------------- | |
| // EMBED build β inline EVERYTHING (JS + CSS) into ONE self-contained index.html | |
| // so the grid can be hosted inside another app with no server and no side assets. | |
| // Output: aios-web/web/dist-embed/index.html (consumed by platform/aios_grid.py). | |
| // The standalone build (vite.config.ts -> dist/) is unchanged and keeps the /api | |
| // fetch path; this config only changes packaging, never the app code. | |
| // npm run build:embed | |
| // --------------------------------------------------------------------------- | |
| // Strip the /favicon.svg <link>: it is an EXTERNAL asset ref that singlefile does | |
| // not inline, and it would 404 inside the embed iframe β removing it keeps the | |
| // built file genuinely self-contained (no external refs at all). | |
| function stripFaviconLink(): Plugin { | |
| return { | |
| name: "aios-strip-favicon", | |
| transformIndexHtml(html: string): string { | |
| return html.replace(/\s*<link\b[^>]*rel=["']icon["'][^>]*>/i, ""); | |
| }, | |
| }; | |
| } | |
| // https://vite.dev/config/ | |
| export default defineConfig({ | |
| plugins: [react(), stripFaviconLink(), viteSingleFile()], | |
| base: "./", | |
| build: { | |
| outDir: "dist-embed", | |
| // keep the standalone dist/ intact β never emptied by this build | |
| emptyOutDir: true, | |
| }, | |
| }); | |