1import { defineConfig } from "vite";2import solidPlugin from "vite-plugin-solid";3import { crx } from "@crxjs/vite-plugin";4import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "fs";5import { resolve } from "path";67const target = process.env.BUILD_TARGET || "chrome";8const manifestPath = target === "firefox" ? "./manifest.firefox.json" : "./manifest.json";9const manifest = JSON.parse(readFileSync(manifestPath, "utf-8"));10if (target === "chrome") {11 manifest.web_accessible_resources = [{12 matches: ["<all_urls>"],13 resources: ["<dynamic_resource>"],14 }];15}16const passkeyE2E = process.env.PEACH_E2E_PASSKEYS === "1";17const outDir = target === "firefox" ? "dist-firefox" : "dist-chrome";181920212223const copyPdfJsWorker = {24 name: "copy-pdfjs-worker",25 closeBundle() {26 mkdirSync(outDir, { recursive: true });27 copyFileSync(28 resolve("node_modules/pdfjs-dist/build/pdf.worker.min.mjs"),29 resolve(outDir, "pdf.worker.min.mjs"),30 );31 if (target === "chrome") {32 const outputManifest = resolve(outDir, "manifest.json");33 const builtManifest = JSON.parse(readFileSync(outputManifest, "utf8"));34 writeFileSync(outputManifest, `${JSON.stringify(builtManifest, null, 2)}\n`);35 }36 },37};3839export default defineConfig({40 plugins: [41 solidPlugin(),42 crx({ manifest, browser: target === "firefox" ? "firefox" : "chrome" }),43 copyPdfJsWorker,44 ],45 base: "./",46 define: {47 __PEACH_E2E_PASSKEYS__: JSON.stringify(passkeyE2E),48 __PEACH_DEBUG__: false,49 },50 build: {51 outDir,52 53 54 55 56 emptyOutDir: false,57 58 59 60 61 62 63 64 65 modulePreload: false,66 target: "esnext",67 rollupOptions: {68 69 70 71 72 input:73 target === "firefox"74 ? undefined75 : { offscreen: resolve("src/background/offscreen.html") },76 output: {77 manualChunks(id) {78 if (id.includes("node_modules/solid-js")) return "vendor-solid";79 if (id.includes("node_modules/otpauth")) return "vendor-otp";80 if (id.includes("node_modules/papaparse")) return "vendor-parse";81 },82 },83 },84 },85});