vite.config.js

 1import { defineConfig } from "vite";
 2import preact from "@preact/preset-vite";
 3import tailwindcss from "@tailwindcss/vite";
 4
 5// https://vitejs.dev/config/
 6export default defineConfig({
 7  plugins: [
 8    tailwindcss(),
 9    preact({
10      include: ["**/*.res.mjs"],
11    }),
12    // Handle client-side routing for /edit/{docID} paths
13    {
14      name: "spa-fallback",
15      configureServer(server) {
16        server.middlewares.use((req, res, next) => {
17          if (/^\/edit\//.test(req.url)) {
18            req.url = "/edit.html";
19          }
20          next();
21        });
22      },
23    },
24  ],
25  server: {
26    proxy: {
27      "/route": {
28        target: "http://127.0.0.1:8080",
29        changeOrigin: true,
30      },
31      "/api": {
32        target: "http://127.0.0.1:8080",
33        changeOrigin: true,
34      },
35      "/forward": {
36        target: "http://127.0.0.1:8080",
37        changeOrigin: true,
38      },
39      "/reverse": {
40        target: "http://127.0.0.1:8080",
41        changeOrigin: true,
42      },
43      "/login": {
44        target: "http://127.0.0.1:8080",
45        changeOrigin: true,
46      },
47      "/signup": {
48        target: "http://127.0.0.1:8080",
49        changeOrigin: true,
50      },
51      "/about": {
52        target: "http://127.0.0.1:8080",
53        changeOrigin: true,
54      },
55      "/static": {
56        target: "http://127.0.0.1:8080",
57        changeOrigin: true,
58      },
59      "/u": {
60        target: "http://127.0.0.1:8080",
61        changeOrigin: true,
62      },
63    },
64  },
65  build: {
66    outDir: "../server/pages/static",
67    rollupOptions: {
68      input: {
69        edit: "edit.html",
70      },
71      output: {
72        inlineDynamicImports: true, // forces a single bundled JS file
73        entryFileNames: "js/[name].js",
74        assetFileNames: (assetInfo) => {
75          if (assetInfo.name?.endsWith(".css")) {
76            return "css/[name][extname]";
77          }
78          return "js/[name][extname]";
79        },
80      },
81    },
82  },
83});