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 use_dynamic_url: true,15 }];16}17const passkeyE2E = process.env.PEACH_E2E_PASSKEYS === "1";18const outDir = target === "firefox" ? "dist-firefox" : "dist-chrome";192021222324const copyPdfJsWorker = {25 name: "copy-pdfjs-worker",26 closeBundle() {27 mkdirSync(outDir, { recursive: true });28 copyFileSync(29 resolve("node_modules/pdfjs-dist/build/pdf.worker.min.mjs"),30 resolve(outDir, "pdf.worker.min.mjs"),31 );32 if (target === "chrome") {33 const outputManifest = resolve(outDir, "manifest.json");34 const builtManifest = JSON.parse(readFileSync(outputManifest, "utf8"));35 for (const resource of builtManifest.web_accessible_resources ?? []) {36 resource.use_dynamic_url = true;37 }38 writeFileSync(outputManifest, `${JSON.stringify(builtManifest, null, 2)}\n`);39 }40 },41};4243export default defineConfig({44 plugins: [45 solidPlugin(),46 crx({ manifest, browser: target === "firefox" ? "firefox" : "chrome" }),47 copyPdfJsWorker,48 ],49 base: "./",50 define: {51 __PEACH_E2E_PASSKEYS__: JSON.stringify(passkeyE2E),52 __PEACH_DEBUG__: false,53 },54 build: {55 outDir,56 57 58 59 60 emptyOutDir: false,61 62 63 64 65 66 67 68 69 modulePreload: false,70 target: "esnext",71 rollupOptions: {72 73 74 75 76 input:77 target === "firefox"78 ? undefined79 : { offscreen: resolve("src/background/offscreen.html") },80 output: {81 manualChunks(id) {82 if (id.includes("node_modules/solid-js")) return "vendor-solid";83 if (id.includes("node_modules/otpauth")) return "vendor-otp";84 if (id.includes("node_modules/papaparse")) return "vendor-parse";85 },86 },87 },88 },89});