Files
app/frontend/vite.config.ts
T
stroblme 75b3a93094
Docs / docs (push) Successful in 33s
Playwright Tests / test-playwright (1, 2) (push) Failing after 1m37s
Playwright Tests / test-playwright (2, 2) (push) Failing after 27s
pre-commit / pre-commit (push) Failing after 2m37s
Test Backend / test-backend (3.12) (push) Successful in 5m7s
Test Backend / test-backend (3.14) (push) Successful in 5m2s
Compose Smoke Test / test-compose (push) Failing after 28s
Playwright Tests / merge-reports (push) Failing after 2m29s
Fix work recovery and reduce engine and chart overhead
2026-10-29 14:24:17 +01:00

73 lines
2.3 KiB
TypeScript

import { readdir, readFile, writeFile } from "node:fs/promises"
import path from "node:path"
import { gzipSync } from "node:zlib"
import tailwindcss from "@tailwindcss/vite"
import { tanstackRouter } from "@tanstack/router-plugin/vite"
import react from "@vitejs/plugin-react-swc"
import { defineConfig, type Plugin } from "vite"
/** Compress once at build time, including text copied from public/. */
function precompress(): Plugin {
async function compress(directory: string): Promise<void> {
const entries = await readdir(directory, { withFileTypes: true })
await Promise.all(
entries.map(async (entry) => {
const file = path.join(directory, entry.name)
if (entry.isDirectory()) return compress(file)
if (!/\.(?:js|css|html|svg|json|webmanifest)$/.test(entry.name)) return
const original = await readFile(file)
if (original.length < 1024) return
const compressed = gzipSync(original, { level: 9 })
if (compressed.length < original.length)
await writeFile(`${file}.gz`, compressed)
}),
)
}
return {
name: "precompressed-assets",
apply: "build",
async writeBundle({ dir }) {
if (dir) await compress(dir)
},
}
}
// https://vitejs.dev/config/
export default defineConfig({
// A portal serves this bundle under a path of its own and caches one copy
// for every instance, so asset URLs have to be absolute under that
// prefix. Unset — every ordinary build — this stays "/".
base: process.env.VITE_BASE || "/",
resolve: {
alias: {
"@": path.resolve(__dirname, "./src"),
},
},
build: {
// The entry holds React, the router, the query client and the shell, and
// cannot get below this. A bigger chunk than that is worth a warning.
chunkSizeWarningLimit: 850,
rollupOptions: {
onwarn(warning, defaultHandler) {
// Zod's own comments name `@__PURE__`, which Rollup reads as a
// misplaced annotation. Nothing to fix on our side.
if (
warning.code === "INVALID_ANNOTATION" &&
warning.id?.includes("/node_modules/zod/")
)
return
defaultHandler(warning)
},
},
},
plugins: [
tanstackRouter({
target: "react",
autoCodeSplitting: true,
}),
react(),
tailwindcss(),
precompress(),
],
})