import { resolve } from "node:path"; import { defineConfig } from "vite"; import wasm from "vite-plugin-wasm"; export default defineConfig({ root: "website", plugins: [ wasm(), // Build service worker as a separate, unhashed JS file { name: "build-sw", apply: "build", closeBundle: { sequential: true, async handler() { const { build } = await import("vite"); await build({ configFile: false, root: resolve(__dirname, "website"), build: { emptyOutDir: false, outDir: resolve(__dirname, "dist"), lib: { entry: resolve(__dirname, "website/sw.ts"), formats: ["es"], fileName: () => "sw.js", }, rollupOptions: { output: { entryFileNames: "sw.js", }, }, }, }); // Build shell.ts as a standalone JS bundle await build({ configFile: false, root: resolve(__dirname, "website"), resolve: { alias: { "@lib": resolve(__dirname, "./lib"), "@shared": resolve(__dirname, "./shared"), }, }, build: { emptyOutDir: false, outDir: resolve(__dirname, "dist"), lib: { entry: resolve(__dirname, "website/shell.ts"), formats: ["es"], fileName: () => "shell.js", }, rollupOptions: { output: { entryFileNames: "shell.js", }, }, }, }); }, }, }, ], resolve: { alias: { "@lib": resolve(__dirname, "./lib"), "@encryptid": resolve(__dirname, "./src/encryptid"), "@shared": resolve(__dirname, "./shared"), }, }, build: { target: "esnext", rollupOptions: { input: { index: resolve(__dirname, "./website/index.html"), canvas: resolve(__dirname, "./website/canvas.html"), }, }, modulePreload: { polyfill: false, }, outDir: "../dist", emptyOutDir: true, // Copy shell.css to dist cssCodeSplit: false, }, server: { port: 5173, }, optimizeDeps: { exclude: ["@automerge/automerge"], }, });