import react from "@vitejs/plugin-react"; import { readFileSync } from "fs"; import { createRequire } from "node:module"; import { randomUUID } from "node:crypto"; import path from "node:path"; import { defineConfig, normalizePath } from "vite"; import { robots } from "vite-plugin-robots"; import { viteStaticCopy } from "vite-plugin-static-copy"; const pkg = JSON.parse(readFileSync("./package.json", "utf-8")); const require = createRequire(import.meta.url); const buildId = randomUUID(); const htmlTranslations: Array<{ language: string; labels: { title: string; javascript_required: string }; }> = ["es", "en", "fr", "ca"].map((language) => ({ language, labels: JSON.parse(readFileSync(`./src/locales/${language}.json`, "utf8")).translation.app, })); const escapeHtml = (value: string) => value.replace(/&/g, "&").replace(//g, ">"); const pdfjsDistPath = path.dirname(require.resolve("pdfjs-dist/package.json")); const cMapsDir = normalizePath(path.join(pdfjsDistPath, "cmaps")); const standardFontsDir = normalizePath( path.join(path.dirname(require.resolve("pdfjs-dist/package.json")), "standard_fonts") ); export default defineConfig({ define: { __APP_VERSION__: JSON.stringify(pkg.version), __APP_BUILD_ID__: JSON.stringify(buildId), }, build: { outDir: "../dist/client", emptyOutDir: true, }, plugins: [ { name: "localized-html", transformIndexHtml(html) { return html .replace("", escapeHtml(htmlTranslations[0].labels.title)) .replace( "", htmlTranslations .map(({ language, labels }) => `
${escapeHtml(labels.javascript_required)}
` ) .join("\n") ); }, }, { name: "app-build-version", apply: "build", generateBundle() { this.emitFile({ type: "asset", fileName: "version.json", source: JSON.stringify({ buildId }), }); }, }, react(), robots({}), viteStaticCopy({ targets: [ { src: cMapsDir, dest: "", }, { src: standardFontsDir, dest: "", }, ], }), ], css: { postcss: "./postcss.config.js" }, resolve: { alias: [ { find: "@", replacement: path.resolve(__dirname, "./src"), }, { find: "@shared", replacement: path.resolve(__dirname, "../shared/lib/"), }, ], }, });