-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Expand file tree
/
Copy pathvite.config.ts
More file actions
127 lines (121 loc) · 2.9 KB
/
vite.config.ts
File metadata and controls
127 lines (121 loc) · 2.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import { fileURLToPath } from "node:url";
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
const nodeStub = fileURLToPath(
new URL("./src/stubs/node-builtins.ts", import.meta.url),
);
const nodeBuiltinIds = [
"assert",
"async_hooks",
"buffer",
"child_process",
"constants",
"crypto",
"dns/promises",
"events",
"fs",
"fs/promises",
"http",
"http2",
"https",
"module",
"net",
"os",
"path",
"stream",
"tls",
"url",
"util",
"vm",
"zlib",
];
function escapeRegExp(value: string): string {
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
}
const nodeBuiltinAliases = [
...nodeBuiltinIds.flatMap((id) => {
const escaped = escapeRegExp(id);
return [
{ find: new RegExp(`^${escaped}$`), replacement: nodeStub },
{ find: new RegExp(`^node:${escaped}$`), replacement: nodeStub },
];
}),
...["fs-extra", "graceful-fs", "jsonfile"].map((id) => ({
find: new RegExp(`^${escapeRegExp(id)}$`),
replacement: nodeStub,
})),
];
function isPgliteEvalWarning(log: {
code?: string;
id?: string;
message?: string;
}) {
const source = `${log.id ?? ""} ${log.message ?? ""}`;
return log.code === "EVAL" && source.includes("@electric-sql/pglite");
}
export default defineConfig({
plugins: [react()],
server: {
port: 5173,
open: true,
headers: {
// Required for SharedArrayBuffer used by PGlite
"Cross-Origin-Opener-Policy": "same-origin",
"Cross-Origin-Embedder-Policy": "require-corp",
},
fs: {
// Allow serving files from node_modules for PGlite WASM assets
allow: ["../.."],
},
},
define: {
"process.env": {},
global: "globalThis",
},
resolve: {
conditions: ["browser", "import", "module", "default"],
alias: nodeBuiltinAliases,
},
optimizeDeps: {
// Exclude PGlite from pre-bundling - it handles its own WASM loading
exclude: ["@electric-sql/pglite"],
},
build: {
target: "esnext",
chunkSizeWarningLimit: 7500,
modulePreload: {
polyfill: true,
},
rolldownOptions: {
onLog(level, log, defaultHandler) {
if (isPgliteEvalWarning(log)) return;
defaultHandler(level, log);
},
output: {
codeSplitting: {
groups: [
{
name: "react-vendor",
test: /node_modules[\\/](?:\.bun[\\/])?(?:react|react-dom|scheduler)/,
priority: 4,
},
{
name: "pglite",
test: (id) =>
id.includes("@electric-sql/pglite") ||
id.endsWith("/src/pglite-browser.ts"),
priority: 3,
},
{
name: "eliza-runtime",
test: (id) =>
id.includes("/packages/core/") ||
id.includes("/packages/plugin-"),
priority: 2,
},
],
},
},
},
},
});