diff --git a/vite.config.ts b/vite.config.ts index 611286f..dfa1963 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -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: {