fix(build): add wasm() plugin to all vite sub-builds

Wraps all component sub-build() calls with wasmBuild() helper that
injects vite-plugin-wasm and @automerge/automerge alias. Fixes WASM
fallback error when a sub-build transitively imports Automerge.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jeff Emmett 2026-03-15 17:47:19 -07:00
parent b86af45610
commit d4bb1daa7b
1 changed files with 67 additions and 47 deletions

View File

@ -2,6 +2,26 @@ import { resolve } from "node:path";
import { defineConfig } from "vite";
import wasm from "vite-plugin-wasm";
// WASM-aware build wrapper — ensures every sub-build can handle Automerge WASM imports
async function wasmBuild(config: any) {
const { build } = await import("vite");
return build({
...config,
plugins: [...(config.plugins || []), wasm()],
resolve: {
...config.resolve,
alias: {
...(config.resolve?.alias || {}),
'@automerge/automerge': resolve(__dirname, 'node_modules/@automerge/automerge'),
},
},
build: {
target: "esnext",
...config.build,
},
});
}
export default defineConfig({
root: "website",
plugins: [
@ -13,8 +33,8 @@ export default defineConfig({
closeBundle: {
sequential: true,
async handler() {
const { build } = await import("vite");
await build({
// build() calls use wasmBuild() wrapper
await wasmBuild({
configFile: false,
root: resolve(__dirname, "website"),
build: {
@ -34,7 +54,7 @@ export default defineConfig({
});
// Build shell.ts as a standalone JS bundle (needs wasm() for Automerge via runtime)
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "website"),
plugins: [wasm()],
@ -63,7 +83,7 @@ export default defineConfig({
});
// Build books module components
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rbooks/components"),
build: {
@ -82,7 +102,7 @@ export default defineConfig({
},
});
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rbooks/components"),
build: {
@ -110,7 +130,7 @@ export default defineConfig({
);
// Build pubs module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rpubs/components"),
build: {
@ -137,7 +157,7 @@ export default defineConfig({
);
// Build cart module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcart/components"),
build: {
@ -157,7 +177,7 @@ export default defineConfig({
});
// Build payment page component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcart/components"),
build: {
@ -177,7 +197,7 @@ export default defineConfig({
});
// Build group buy page component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcart/components"),
build: {
@ -197,7 +217,7 @@ export default defineConfig({
});
// Build payment request (QR generator) component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcart/components"),
build: {
@ -217,7 +237,7 @@ export default defineConfig({
});
// Build payments dashboard component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcart/components"),
build: {
@ -244,7 +264,7 @@ export default defineConfig({
);
// Build swag module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rswag/components"),
build: {
@ -271,7 +291,7 @@ export default defineConfig({
);
// Build choices module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rchoices/components"),
build: {
@ -305,7 +325,7 @@ export default defineConfig({
"../lib/map-flow": resolve(__dirname, "modules/rflows/lib/map-flow.ts"),
};
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rflows/components"),
resolve: { alias: flowsAlias },
@ -321,7 +341,7 @@ export default defineConfig({
},
});
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rflows/components"),
plugins: [wasm()],
@ -352,7 +372,7 @@ export default defineConfig({
);
// Build files module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rfiles/components"),
build: {
@ -379,7 +399,7 @@ export default defineConfig({
);
// Build forum module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rforum/components"),
build: {
@ -412,7 +432,7 @@ export default defineConfig({
"../lib/wallet-demo-data": resolve(__dirname, "modules/rwallet/lib/wallet-demo-data.ts"),
};
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rwallet/components"),
resolve: { alias: walletAlias },
@ -440,7 +460,7 @@ export default defineConfig({
);
// Build vote module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rvote/components"),
build: {
@ -460,7 +480,7 @@ export default defineConfig({
});
// Build vote demo page script
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rvote/components"),
resolve: {
@ -492,7 +512,7 @@ export default defineConfig({
);
// Build notes module component (with Automerge WASM support)
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rnotes/components"),
plugins: [wasm()],
@ -526,7 +546,7 @@ export default defineConfig({
);
// Build maps module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rmaps/components"),
build: {
@ -553,7 +573,7 @@ export default defineConfig({
);
// Build tasks module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rtasks/components"),
build: {
@ -580,7 +600,7 @@ export default defineConfig({
);
// Build trips module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rtrips/components"),
build: {
@ -607,7 +627,7 @@ export default defineConfig({
);
// Build trips demo page script
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rtrips/components"),
build: {
@ -625,7 +645,7 @@ export default defineConfig({
});
// Build cal module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rcal/components"),
build: {
@ -652,7 +672,7 @@ export default defineConfig({
);
// Build network module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rnetwork/components"),
build: {
@ -673,7 +693,7 @@ export default defineConfig({
});
// Build network CRM view component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rnetwork/components"),
build: {
@ -693,7 +713,7 @@ export default defineConfig({
});
// Build delegation manager component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rnetwork/components"),
build: {
@ -713,7 +733,7 @@ export default defineConfig({
});
// Build trust sankey component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rnetwork/components"),
build: {
@ -740,7 +760,7 @@ export default defineConfig({
);
// Build socials thread builder component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
build: {
@ -760,7 +780,7 @@ export default defineConfig({
});
// Build socials thread gallery component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
build: {
@ -780,7 +800,7 @@ export default defineConfig({
});
// Build socials campaign manager component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
build: {
@ -807,7 +827,7 @@ export default defineConfig({
);
// Build campaign planner component (with Automerge WASM support via local-first-client)
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
plugins: [wasm()],
@ -840,7 +860,7 @@ export default defineConfig({
);
// Build campaign workflow builder component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
resolve: {
@ -871,7 +891,7 @@ export default defineConfig({
);
// Build newsletter manager component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsocials/components"),
build: {
@ -897,7 +917,7 @@ export default defineConfig({
);
// Build tube module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rtube/components"),
build: {
@ -924,7 +944,7 @@ export default defineConfig({
);
// Build inbox module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rinbox/components"),
build: {
@ -951,7 +971,7 @@ export default defineConfig({
);
// Build data module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rdata/components"),
build: {
@ -978,7 +998,7 @@ export default defineConfig({
);
// Build route planner component (part of trips module)
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rtrips/components"),
resolve: {
@ -1011,7 +1031,7 @@ export default defineConfig({
);
// Build splat module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rsplat/components"),
build: {
@ -1039,7 +1059,7 @@ export default defineConfig({
);
// Build photos module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rphotos/components"),
build: {
@ -1066,7 +1086,7 @@ export default defineConfig({
);
// Build schedule module component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rschedule/components"),
build: {
@ -1093,7 +1113,7 @@ export default defineConfig({
);
// Build schedule reminders widget component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rschedule/components"),
build: {
@ -1113,7 +1133,7 @@ export default defineConfig({
});
// Build schedule automation canvas component
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "modules/rschedule/components"),
resolve: {
@ -1146,7 +1166,7 @@ export default defineConfig({
// ── Demo infrastructure ──
// Build demo-sync-vanilla library
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, "lib"),
build: {
@ -1173,7 +1193,7 @@ export default defineConfig({
try {
const { statSync } = await import("node:fs");
statSync(demoEntry);
await build({
await wasmBuild({
configFile: false,
root: resolve(__dirname, `modules/${dir}/components`),
resolve: {