@seedprotocol/vite 0.7.0 → 0.7.2-next.593.gd5bd4ea

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,MAAM,EAA4C,MAAM,MAAM,CAAA;AASvF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IAEpB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AA6oBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,EAAE,CA4gB5E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,MAAM,EAA4C,MAAM,MAAM,CAAA;AASvF,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IAEpB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,GAAG;QAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AA8lBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,MAAM,EAAE,CAkf5E"}
package/dist/index.js CHANGED
@@ -43,21 +43,28 @@ var l = [
43
43
  "seedrandom",
44
44
  "@georgedoescode/generative-utils",
45
45
  "nanoid-dictionary"
46
- ], h = ["@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk", "@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk > @ethereum-attestation-service/eas-contracts"], g = ["pluralize"], _ = {
46
+ ], h = ["@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk", "@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk > @ethereum-attestation-service/eas-contracts"], g = [
47
+ "kerium",
48
+ "utilium",
49
+ "memium",
50
+ "readable-stream",
51
+ "viem",
52
+ "isows"
53
+ ], _ = ["pluralize"], v = {
47
54
  "Cross-Origin-Opener-Policy": "same-origin",
48
55
  "Cross-Origin-Embedder-Policy": "credentialless",
49
56
  "Cross-Origin-Resource-Policy": "same-origin"
50
57
  };
51
- function v(e) {
58
+ function y(e) {
52
59
  if (e === !1) return null;
53
60
  let t = typeof e == "object" && e ? e : {};
54
61
  return {
55
- "Cross-Origin-Opener-Policy": t.coop ?? _["Cross-Origin-Opener-Policy"],
56
- "Cross-Origin-Embedder-Policy": t.coep ?? _["Cross-Origin-Embedder-Policy"],
57
- "Cross-Origin-Resource-Policy": t.corp ?? _["Cross-Origin-Resource-Policy"]
62
+ "Cross-Origin-Opener-Policy": t.coop ?? v["Cross-Origin-Opener-Policy"],
63
+ "Cross-Origin-Embedder-Policy": t.coep ?? v["Cross-Origin-Embedder-Policy"],
64
+ "Cross-Origin-Resource-Policy": t.corp ?? v["Cross-Origin-Resource-Policy"]
58
65
  };
59
66
  }
60
- function y(e, t) {
67
+ function b(e, t) {
61
68
  e.middlewares.use((e, n, r) => {
62
69
  let i = () => {
63
70
  for (let [e, r] of Object.entries(t)) n.getHeader(e) || n.setHeader(e, r);
@@ -65,12 +72,15 @@ function y(e, t) {
65
72
  n.writeHead = ((...e) => (i(), a(...e))), i(), r();
66
73
  });
67
74
  }
68
- function b(t, r, i, a) {
75
+ function x(t, r, i, a) {
69
76
  if (!e.existsSync(t)) return;
70
77
  let o = r.startsWith("@") ? r.replace("/", "+") : r;
71
78
  for (let s of e.readdirSync(t)) (s.startsWith(`${o}@`) || s.startsWith(`${r}@`)) && a.push(n.join(t, s, `node_modules/${r}`, i));
72
79
  }
73
- function x(t, r) {
80
+ function S(r, i) {
81
+ return (t(n.join(i, "package.json")).resolve.paths(r) ?? []).some((t) => e.existsSync(n.join(t, r, "package.json")));
82
+ }
83
+ function C(t, r) {
74
84
  let i = [], o = n.resolve(u, "..");
75
85
  try {
76
86
  let e = a.resolve(`${t}/package.json`);
@@ -94,12 +104,12 @@ function x(t, r) {
94
104
  }
95
105
  i.push(n.join(o, "node_modules", t, r));
96
106
  let s = n.join(process.cwd(), "node_modules");
97
- i.push(n.join(s, t, r)), b(n.join(s, ".bun"), t, r, i), b(n.join(o, "node_modules", ".bun"), t, r, i);
98
- let c = S(o);
99
- c && b(n.join(c, "node_modules", ".bun"), t, r, i);
107
+ i.push(n.join(s, t, r)), x(n.join(s, ".bun"), t, r, i), x(n.join(o, "node_modules", ".bun"), t, r, i);
108
+ let c = w(o);
109
+ c && x(n.join(c, "node_modules", ".bun"), t, r, i);
100
110
  for (let t of i) if (e.existsSync(t)) return t;
101
111
  }
102
- function S(t) {
112
+ function w(t) {
103
113
  let r = n.resolve(t);
104
114
  for (let t = 0; t < 8; t++) {
105
115
  if (e.existsSync(n.join(r, "node_modules", ".bun"))) return r;
@@ -108,23 +118,23 @@ function S(t) {
108
118
  r = t;
109
119
  }
110
120
  }
111
- function C(e, t) {
121
+ function T(e, t) {
112
122
  let r = n.resolve(t);
113
123
  return e.some((e) => {
114
124
  let t = n.resolve(String(e));
115
125
  return r === t || r.startsWith(t.endsWith(n.sep) ? t : t + n.sep);
116
126
  });
117
127
  }
118
- function w(t) {
128
+ function E(t) {
119
129
  try {
120
130
  return e.realpathSync(t);
121
131
  } catch {
122
132
  return n.resolve(t);
123
133
  }
124
134
  }
125
- function T() {
135
+ function D() {
126
136
  let e = /* @__PURE__ */ new Set(), t = (t) => {
127
- t && e.add(w(t));
137
+ t && e.add(E(t));
128
138
  }, r;
129
139
  try {
130
140
  r = n.dirname(a.resolve("@seedprotocol/sdk/package.json"));
@@ -132,20 +142,20 @@ function T() {
132
142
  r = n.resolve(u, "..");
133
143
  }
134
144
  t(r);
135
- let i = S(r);
145
+ let i = w(r);
136
146
  i && t(i);
137
147
  for (let e of ["sqlocal", "@sqlite.org/sqlite-wasm"]) {
138
- let r = x(e, "package.json");
148
+ let r = C(e, "package.json");
139
149
  r && t(n.dirname(r));
140
150
  }
141
151
  return [...e];
142
152
  }
143
- function E(e) {
153
+ function O(e) {
144
154
  let t = [];
145
- for (let n of T()) C(e, n) || (e.push(n), t.push(n));
155
+ for (let n of D()) T(e, n) || (e.push(n), t.push(n));
146
156
  return t;
147
157
  }
148
- function D(e) {
158
+ function k(e) {
149
159
  return e ? Array.isArray(e) ? e.filter((e) => !!e && !!e.replacement).map((e) => ({
150
160
  find: e.find,
151
161
  replacement: e.replacement
@@ -154,7 +164,7 @@ function D(e) {
154
164
  replacement: String(t)
155
165
  })) : [];
156
166
  }
157
- function O(e, t) {
167
+ function A(e, t) {
158
168
  let n = [...e], r = (e) => typeof e == "string" ? `s:${e}` : `r:${e.toString()}`, i = new Set(n.map((e) => r(e.find)));
159
169
  for (let e of t) {
160
170
  let t = r(e.find);
@@ -162,12 +172,12 @@ function O(e, t) {
162
172
  }
163
173
  return n;
164
174
  }
165
- var k = [
175
+ var j = [
166
176
  "vite-plugin-node-polyfills/shims/buffer",
167
177
  "vite-plugin-node-polyfills/shims/global",
168
178
  "vite-plugin-node-polyfills/shims/process"
169
179
  ];
170
- function A(t) {
180
+ function M(t) {
171
181
  let n = a.resolve(t);
172
182
  if (n.endsWith(".cjs")) {
173
183
  let t = n.slice(0, -4) + ".js";
@@ -175,10 +185,10 @@ function A(t) {
175
185
  }
176
186
  return n;
177
187
  }
178
- function j() {
188
+ function N() {
179
189
  let e = {}, t = [];
180
- for (let n of k) try {
181
- let t = A(n);
190
+ for (let n of j) try {
191
+ let t = M(n);
182
192
  n.endsWith("/buffer") ? e.buffer = t : n.endsWith("/global") ? e.global = t : n.endsWith("/process") && (e.process = t);
183
193
  } catch {
184
194
  t.push(n);
@@ -188,15 +198,7 @@ function j() {
188
198
  unresolved: t
189
199
  };
190
200
  }
191
- function M(e, t) {
192
- if ((e.match(/import\s+__buffer_polyfill\b/g) || []).length <= 1 || !t.buffer || !t.global || !t.process) return null;
193
- let n = e.replace(/import\s+__buffer_polyfill\s+from\s+['"][^'"]+['"];?\s*\n\s*globalThis\.Buffer\s*=\s*globalThis\.Buffer\s*\|\|\s*__buffer_polyfill;?\s*\n\s*import\s+__global_polyfill\s+from\s+['"][^'"]+['"];?\s*\n\s*globalThis\.global\s*=\s*globalThis\.global\s*\|\|\s*__global_polyfill;?\s*\n\s*import\s+__process_polyfill\s+from\s+['"][^'"]+['"];?\s*\n\s*globalThis\.process\s*=\s*globalThis\.process\s*\|\|\s*__process_polyfill;?\s*\n?/g, "");
194
- return n === e ? null : `import __buffer_polyfill from ${JSON.stringify(t.buffer)};\nglobalThis.Buffer = globalThis.Buffer || __buffer_polyfill;
195
- import __global_polyfill from ${JSON.stringify(t.global)};\nglobalThis.global = globalThis.global || __global_polyfill;
196
- import __process_polyfill from ${JSON.stringify(t.process)};\nglobalThis.process = globalThis.process || __process_polyfill;
197
- ` + n;
198
- }
199
- function N(e, t) {
201
+ function P(e, t) {
200
202
  let n = e, r = !1, i = [];
201
203
  t.buffer && i.push(["vite-plugin-node-polyfills/shims/buffer", t.buffer]), t.global && i.push(["vite-plugin-node-polyfills/shims/global", t.global]), t.process && i.push(["vite-plugin-node-polyfills/shims/process", t.process]);
202
204
  for (let [e, t] of i) {
@@ -208,7 +210,7 @@ function N(e, t) {
208
210
  }
209
211
  return r ? n : null;
210
212
  }
211
- function P(e, t) {
213
+ function F(e, t) {
212
214
  t.buffer && e.push({
213
215
  find: "vite-plugin-node-polyfills/shims/buffer",
214
216
  replacement: t.buffer
@@ -235,11 +237,11 @@ function P(e, t) {
235
237
  replacement: t.process
236
238
  });
237
239
  }
238
- function F(e) {
240
+ function I(e) {
239
241
  let t = {};
240
242
  return e.buffer && (t["vite-plugin-node-polyfills/shims/buffer"] = e.buffer, t.buffer = e.buffer, t["node:buffer"] = e.buffer), e.global && (t["vite-plugin-node-polyfills/shims/global"] = e.global, t.global = e.global), e.process && (t["vite-plugin-node-polyfills/shims/process"] = e.process, t.process = e.process, t["node:process"] = e.process), t;
241
243
  }
242
- var I = /* @__PURE__ */ new Set([
244
+ var L = /* @__PURE__ */ new Set([
243
245
  "vite-plugin-node-polyfills/shims/buffer",
244
246
  "vite-plugin-node-polyfills/shims/global",
245
247
  "vite-plugin-node-polyfills/shims/process",
@@ -249,19 +251,19 @@ var I = /* @__PURE__ */ new Set([
249
251
  "node:process",
250
252
  "global"
251
253
  ]);
252
- function L(e, t) {
254
+ function R(e, t) {
253
255
  let n = [];
254
- if (P(n, t), n.length === 0) return e;
255
- let r = e.filter((e) => typeof e.find != "string" || !I.has(e.find));
256
+ if (F(n, t), n.length === 0) return e;
257
+ let r = e.filter((e) => typeof e.find != "string" || !L.has(e.find));
256
258
  return [...n, ...r];
257
259
  }
258
- function R(t) {
259
- let n = x("nanoid-dictionary", "dist/dictionary.esm.js");
260
+ function z(t) {
261
+ let n = C("nanoid-dictionary", "dist/dictionary.esm.js");
260
262
  n && t.push({
261
263
  find: /^nanoid-dictionary$/,
262
264
  replacement: n
263
265
  });
264
- let r = x("@zenfs/core", "dist/index.js"), i = x("@zenfs/core", "dist/path.js");
266
+ let r = C("@zenfs/core", "dist/index.js"), i = C("@zenfs/core", "dist/path.js");
265
267
  r && t.push({
266
268
  find: /^@zenfs\/core$/,
267
269
  replacement: r
@@ -269,7 +271,7 @@ function R(t) {
269
271
  find: /^@zenfs\/core\/path$/,
270
272
  replacement: i
271
273
  });
272
- let a = x("@zenfs/dom", "dist/index.js");
274
+ let a = C("@zenfs/dom", "dist/index.js");
273
275
  a && t.push({
274
276
  find: /^@zenfs\/dom$/,
275
277
  replacement: a
@@ -277,7 +279,7 @@ function R(t) {
277
279
  find: /^debug$/,
278
280
  replacement: f
279
281
  });
280
- let o = x("debug", "src/browser.js");
282
+ let o = C("debug", "src/browser.js");
281
283
  o && t.push({
282
284
  find: /^debug\/src\/browser\.js$/,
283
285
  replacement: o
@@ -289,80 +291,61 @@ function R(t) {
289
291
  replacement: p
290
292
  });
291
293
  }
292
- function z() {
293
- let e = x("debug", "src/browser.js");
294
+ function B() {
295
+ let e = C("debug", "src/browser.js");
294
296
  return e ? { "debug/src/browser.js": e } : {};
295
297
  }
296
- function B() {
298
+ function V() {
297
299
  return e.existsSync(p) ? {
298
300
  stream: p,
299
301
  "node:stream": p
300
302
  } : {};
301
303
  }
302
- function V(e) {
303
- let t = e ?? {};
304
- return t.rolldownOptions ?? t.rollupOptions ?? {};
305
- }
306
304
  function H(e, t) {
307
- let n = V(e), r = n.resolve ?? {}, i = n.transform ?? {}, a = {
308
- ...e?.esbuildOptions?.define ?? {},
309
- ...i.define,
305
+ let n = {
306
+ ...e?.esbuildOptions?.define,
310
307
  ...t.define
311
- }, o = {
312
- ...r.alias,
313
- ...t.alias
314
- };
308
+ }, r = t.alias ?? {};
315
309
  return {
316
- ...n,
317
- ...Object.keys(a).length > 0 ? { transform: {
318
- ...i,
319
- define: a
320
- } } : {},
321
- ...Object.keys(o).length > 0 ? { resolve: {
322
- ...r,
323
- alias: o
324
- } } : {}
310
+ ...Object.keys(n).length > 0 ? { transform: { define: n } } : {},
311
+ ...Object.keys(r).length > 0 ? { resolve: { alias: r } } : {}
325
312
  };
326
313
  }
327
- function U(e) {
328
- let { esbuildOptions: t, rollupOptions: n, ...r } = e ?? {};
329
- return r;
330
- }
331
- function W(e = {}) {
332
- let { fsModules: t = l, autoInit: n = !1, debug: r = !1, includeNodePolyfills: a = !0, isolationHeaders: o } = e, s = v(o), u = "production", f = (...e) => {
333
- r && console.log("[seed-vite-plugin]", ...e);
334
- }, { paths: p, unresolved: _ } = j(), b = F(p);
335
- a && _.length > 0 ? console.warn("[seed-vite-plugin] Could not resolve vite-plugin-node-polyfills shims from the SDK package:\n" + _.map((e) => ` - ${e}`).join("\n") + "\nNode polyfill globals may fail to resolve. Reinstall @seedprotocol/sdk, or set includeNodePolyfills: false and configure polyfills yourself.") : _.length === 0 && f("Resolved vite-plugin-node-polyfills shims to absolute paths");
336
- let S = {
314
+ function U(e = {}) {
315
+ let { fsModules: t = l, autoInit: r = !1, debug: a = !1, includeNodePolyfills: o = !0, isolationHeaders: s } = e, u = y(s), f = "production", p = (...e) => {
316
+ a && console.log("[seed-vite-plugin]", ...e);
317
+ }, { paths: v, unresolved: x } = N(), w = I(v);
318
+ o && x.length > 0 ? console.warn("[seed-vite-plugin] Could not resolve vite-plugin-node-polyfills shims from the SDK package:\n" + x.map((e) => ` - ${e}`).join("\n") + "\nNode polyfill globals may fail to resolve. Reinstall @seedprotocol/sdk, or set includeNodePolyfills: false and configure polyfills yourself.") : x.length === 0 && p("Resolved vite-plugin-node-polyfills shims to absolute paths");
319
+ let T = {
337
320
  name: "seed-protocol:config",
338
321
  enforce: "pre",
339
322
  configResolved(e) {
340
- let t = E(e.server.fs.allow);
341
- t.length > 0 && f("Extended server.fs.allow for linked SDK / sqlocal worker paths:", t);
323
+ let t = O(e.server.fs.allow);
324
+ t.length > 0 && p("Extended server.fs.allow for linked SDK / sqlocal worker paths:", t);
342
325
  },
343
- config(e, n) {
344
- n?.mode && (u = n.mode);
345
- let r = [];
326
+ config(e, r) {
327
+ r?.mode && (f = r.mode);
328
+ let i = [];
346
329
  for (let e of t) {
347
330
  let t = e.includes("promises") ? "@zenfs/core/promises" : "@zenfs/core";
348
- r.push({
331
+ i.push({
349
332
  find: e,
350
333
  replacement: t
351
334
  });
352
335
  }
353
- let i = x("eventemitter3", "dist/eventemitter3.esm.js");
354
- i && r.push({
336
+ let a = C("eventemitter3", "dist/eventemitter3.esm.js");
337
+ a && i.push({
355
338
  find: "eventemitter3",
356
- replacement: i
339
+ replacement: a
357
340
  }, {
358
341
  find: "eventemitter3/index.mjs",
359
- replacement: i
342
+ replacement: a
360
343
  }, {
361
344
  find: "eventemitter3/index.js",
362
- replacement: i
345
+ replacement: a
363
346
  });
364
- let a = x("arweave", "bundles/web.bundle.js");
365
- a && r.push({
347
+ let o = C("arweave", "bundles/web.bundle.js");
348
+ o && i.push({
366
349
  find: /^arweave$/,
367
350
  replacement: d
368
351
  }, {
@@ -370,39 +353,30 @@ function W(e = {}) {
370
353
  replacement: d
371
354
  }, {
372
355
  find: /^arweave\/bundles\/web\.bundle\.js$/,
373
- replacement: a
374
- }), R(r), P(r, p);
375
- let o = e.resolve ?? {}, c = O(D(o.alias), r), l = [
356
+ replacement: o
357
+ }), z(i), F(i, v);
358
+ let s = e.resolve ?? {}, c = A(k(s.alias), i), l = [
376
359
  "@zenfs/core",
377
360
  "@zenfs/dom",
378
- "kerium",
379
- "utilium",
380
- "memium",
381
- "readable-stream",
382
- "viem",
383
- "isows",
384
361
  ...m
385
- ].filter((e) => !!x(e, "package.json")), f = e.optimizeDeps, _ = z(), v = B(), y = {
386
- ...U(f),
362
+ ], p = n.resolve(e.root ?? process.cwd()), y = [...l.filter((e) => !!C(e, "package.json")), ...g.filter((e) => S(e, p))], b = e.optimizeDeps, x = B(), T = V(), E = {
387
363
  exclude: [
388
- ...f?.exclude ?? [],
389
364
  "@seedprotocol/sdk",
390
365
  "drizzle-orm",
391
366
  "better-sqlite3",
392
367
  "sqlocal"
393
368
  ],
394
369
  include: [
395
- ...f?.include ?? [],
396
- ...l,
370
+ ...y,
397
371
  ...h,
398
- ...g
372
+ ..._
399
373
  ],
400
- rolldownOptions: H(f, {
374
+ rolldownOptions: H(b, {
401
375
  define: { global: "globalThis" },
402
376
  alias: {
403
- ..._,
404
- ...v,
405
- ...b
377
+ ...x,
378
+ ...T,
379
+ ...w
406
380
  }
407
381
  })
408
382
  };
@@ -414,10 +388,10 @@ function W(e = {}) {
414
388
  "process.platform": "\"browser\""
415
389
  },
416
390
  resolve: {
417
- ...o,
391
+ ...s,
418
392
  alias: c,
419
393
  dedupe: Array.from(/* @__PURE__ */ new Set([
420
- ...o.dedupe ?? [],
394
+ ...s.dedupe ?? [],
421
395
  "react",
422
396
  "react-dom",
423
397
  "thirdweb",
@@ -431,70 +405,63 @@ function W(e = {}) {
431
405
  "@zenfs/dom"
432
406
  ]))
433
407
  },
434
- optimizeDeps: y,
435
- ...s ? {
408
+ optimizeDeps: E,
409
+ ...u ? {
436
410
  server: {
437
411
  ...e.server ?? {},
438
412
  headers: {
439
413
  ...e.server?.headers ?? {},
440
- ...s
414
+ ...u
441
415
  }
442
416
  },
443
417
  preview: {
444
418
  ...e.preview ?? {},
445
419
  headers: {
446
420
  ...e.preview?.headers ?? {},
447
- ...s
421
+ ...u
448
422
  }
449
423
  }
450
424
  } : {}
451
425
  };
452
426
  }
453
- }, C = {
427
+ }, E = {
454
428
  name: "seed-protocol:polyfill-resolve",
455
429
  enforce: "post",
456
430
  config(e) {
457
- if (Object.keys(b).length === 0) return;
458
- let t = e.resolve ?? {}, n = L(D(t.alias), p), r = e.optimizeDeps;
459
- return {
460
- resolve: {
461
- ...t,
462
- alias: n
463
- },
464
- optimizeDeps: { rolldownOptions: H(r, { alias: b }) }
431
+ if (Object.keys(w).length !== 0) return {
432
+ resolve: { alias: R(k((e.resolve ?? {}).alias), v) },
433
+ optimizeDeps: { rolldownOptions: H(void 0, {
434
+ define: { global: "globalThis" },
435
+ alias: w
436
+ }) }
465
437
  };
466
438
  },
467
439
  resolveId: {
468
440
  order: "pre",
469
441
  handler(e) {
470
- return e === "vite-plugin-node-polyfills/shims/buffer" ? p.buffer ?? null : e === "vite-plugin-node-polyfills/shims/global" ? p.global ?? null : e === "vite-plugin-node-polyfills/shims/process" ? p.process ?? null : a ? e === "buffer" || e === "node:buffer" ? p.buffer ?? null : e === "global" ? p.global ?? null : e === "process" || e === "node:process" ? p.process ?? null : null : null;
442
+ return e === "vite-plugin-node-polyfills/shims/buffer" ? v.buffer ?? null : e === "vite-plugin-node-polyfills/shims/global" ? v.global ?? null : e === "vite-plugin-node-polyfills/shims/process" ? v.process ?? null : o ? e === "buffer" || e === "node:buffer" ? v.buffer ?? null : e === "global" ? v.global ?? null : e === "process" || e === "node:process" ? v.process ?? null : null : null;
471
443
  }
472
444
  },
473
445
  transform: {
474
446
  order: "post",
475
447
  handler(e) {
476
- let t = (e.match(/import\s+__buffer_polyfill\b/g) || []).length, n = e, r = !1;
477
- if (t > 1) {
478
- let e = M(n, p);
479
- e && (n = e, r = !0);
480
- }
481
- let i = N(n, p);
482
- return i && (n = i, r = !0), r ? {
483
- code: n,
448
+ let t = P(e, v);
449
+ return t ? {
450
+ code: t,
484
451
  map: null
485
452
  } : null;
486
453
  }
487
454
  }
488
- }, w = [
489
- S,
455
+ }, D = [
456
+ T,
490
457
  {
491
458
  name: "seed-protocol:main",
492
459
  enforce: "post",
493
460
  configureServer(e) {
494
- s && y(e, s);
461
+ u && b(e, u);
495
462
  },
496
463
  configurePreviewServer(e) {
497
- s && y(e, s);
464
+ u && b(e, u);
498
465
  },
499
466
  config(e) {
500
467
  let t = e.build ?? {}, n = t.commonjsOptions ?? {}, r = t.rollupOptions ?? {}, i = t.rolldownOptions, a = r.external ?? [], o = [
@@ -553,12 +520,12 @@ function W(e = {}) {
553
520
  let t = `<script>
554
521
  (function(){
555
522
  if(typeof globalThis.global==='undefined')globalThis.global=globalThis;
556
- if(typeof globalThis.process==='undefined')globalThis.process={env:{NODE_ENV:${JSON.stringify(u)}},browser:true,version:'v18.0.0',versions:{},platform:'browser',cwd:function(){return'/'},nextTick:function(fn){setTimeout(fn,0)}};
523
+ if(typeof globalThis.process==='undefined')globalThis.process={env:{NODE_ENV:${JSON.stringify(f)}},browser:true,version:'v18.0.0',versions:{},platform:'browser',cwd:function(){return'/'},nextTick:function(fn){setTimeout(fn,0)}};
557
524
  })();
558
- <\/script>`, r = e;
559
- if (r = r.includes("<head>") ? r.replace("<head>", `<head>\n${t}`) : t + r, !n) return r;
525
+ <\/script>`, n = e;
526
+ if (n = n.includes("<head>") ? n.replace("<head>", `<head>\n${t}`) : t + n, !r) return n;
560
527
  let i = "\n<script type=\"module\">\nimport { configure } from '@zenfs/core';\nimport { IndexedDB } from '@zenfs/dom';\n\nif (!window.__seedFsReady) {\n window.__seedFsReady = configure({\n mounts: { '/': IndexedDB },\n }).catch((err) => {\n console.error('[seed-vite-plugin] ZenFS initialization failed', err);\n });\n}\n<\/script>";
561
- return r.includes("</head>") ? r.replace("</head>", `${i}\n</head>`) : r + i;
528
+ return n.includes("</head>") ? n.replace("</head>", `${i}\n</head>`) : n + i;
562
529
  }
563
530
  },
564
531
  {
@@ -574,8 +541,8 @@ function W(e = {}) {
574
541
  }
575
542
  }
576
543
  ];
577
- if (a) {
578
- f("Including vite-plugin-node-polyfills with default settings");
544
+ if (o) {
545
+ p("Including vite-plugin-node-polyfills with default settings");
579
546
  let e = i({
580
547
  exclude: ["readline"],
581
548
  include: [
@@ -592,11 +559,11 @@ function W(e = {}) {
592
559
  },
593
560
  protocolImports: !0
594
561
  });
595
- Array.isArray(e) ? w.push(...e) : w.push(e);
562
+ Array.isArray(e) ? D.push(...e) : D.push(e);
596
563
  }
597
- return Object.keys(b).length > 0 && w.push(C), w;
564
+ return Object.keys(w).length > 0 && D.push(E), D;
598
565
  }
599
566
  //#endregion
600
- export { W as seedVitePlugin };
567
+ export { U as seedVitePlugin };
601
568
 
602
569
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import type { ConfigEnv, Plugin, PreviewServer, UserConfig, ViteDevServer } from 'vite'\nimport fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { nodePolyfills } from 'vite-plugin-node-polyfills'\n\nconst _req = createRequire(import.meta.url)\n\nexport interface SeedVitePluginOptions {\n /**\n * Additional modules to alias to ZenFS equivalents.\n * @default ['fs', 'fs/promises', 'node:fs', 'node:fs/promises']\n */\n fsModules?: string[]\n\n /**\n * Whether to inject automatic ZenFS initialization script into index.html.\n * When true, injects a &lt;script type=\"module\"&gt; that imports from '@zenfs/core'/'@zenfs/dom'.\n * Browsers cannot resolve those bare specifiers, so the script fails at runtime unless you use\n * an import map or load ZenFS another way. Prefer false and initialize ZenFS in your entry:\n * import { configure } from '@zenfs/core'; import { IndexedDB } from '@zenfs/dom';\n * await configure({ mounts: { '/': IndexedDB } });\n * @default false\n */\n autoInit?: boolean\n\n /**\n * Enable debug logging.\n * @default false\n */\n debug?: boolean\n\n /**\n * Whether to automatically include vite-plugin-node-polyfills with sensible defaults.\n * The SDK depends on that package and aliases its injected shim imports to absolute\n * paths, so consuming apps do not need to install vite-plugin-node-polyfills themselves.\n * Default include list omits full `stream`/`crypto` polyfills (those pull\n * stream-browserify and break Vite SSR / React Router prerender). A minimal\n * `stream` stub is still aliased so sax/rss-parser do not warn. Use `false`\n * for Framework Mode / prerender.\n * @default true\n */\n includeNodePolyfills?: boolean\n\n /**\n * Cross-origin isolation headers for sqlocal / SharedArrayBuffer / OPFS.\n * Applied in configureServer and configurePreviewServer, including writeHead,\n * because Vite `server.headers` is not copied onto Framework-Mode HTML responses.\n * Set `false` to disable. Pass `{ coop, coep, corp }` to override values.\n * @default true (`COOP: same-origin`, `COEP: credentialless`, `CORP: same-origin`)\n */\n isolationHeaders?: boolean | {\n coop?: string\n coep?: string\n corp?: string\n }\n}\n\n// Node.js globals that are undefined in browsers and will throw at runtime.\n// Keyed by identifier; value is the safe typeof-guard pattern so we can skip those.\nconst BROWSER_DANGEROUS_GLOBALS: Record<string, RegExp> = {\n global: /\\btypeof\\s+global\\b/,\n process: /\\btypeof\\s+process\\b/,\n Buffer: /\\btypeof\\s+Buffer\\b/,\n __dirname: /\\btypeof\\s+__dirname\\b/,\n __filename: /\\btypeof\\s+__filename\\b/,\n}\n\n/**\n * Strip JS string literals, template literals, and comments from source text\n * so that identifier searches don't false-positive on string content.\n * This is intentionally approximate — good enough for a lint-style warning pass.\n */\nfunction stripStringsAndComments(code: string): string {\n return code\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, (m) => ' '.repeat(m.length)) // /* block comments */\n .replace(/\\/\\/[^\\n]*/g, (m) => ' '.repeat(m.length)) // // line comments\n .replace(/`(?:[^`\\\\]|\\\\.)*`/gs, (m) => '`' + ' '.repeat(m.length - 2) + '`') // template literals\n .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (m) => '\"' + ' '.repeat(m.length - 2) + '\"') // double-quoted strings\n .replace(/'(?:[^'\\\\]|\\\\.)*'/g, (m) => \"'\" + ' '.repeat(m.length - 2) + \"'\") // single-quoted strings\n}\n\ninterface GlobalHit {\n global: string\n /** zero-based character offset in the stripped source */\n offset: number\n /** 1-based line number */\n line: number\n /** surrounding raw source for context */\n context: string\n}\n\nfunction findDangerousGlobals(rawCode: string): GlobalHit[] {\n const stripped = stripStringsAndComments(rawCode)\n const hits: GlobalHit[] = []\n\n for (const [name, typeofGuard] of Object.entries(BROWSER_DANGEROUS_GLOBALS)) {\n // Skip globalThis when checking 'global'\n const re = new RegExp(`(?<![.\\\\w$])\\\\b${name}\\\\b(?!This)(?![\\\\w$])`, 'g')\n let m: RegExpExecArray | null\n while ((m = re.exec(stripped)) !== null) {\n const offset = m.index\n // Check for typeof guard in the ~20 chars before the match\n const before = stripped.slice(Math.max(0, offset - 20), offset)\n if (typeofGuard.test(before)) continue\n\n // Compute 1-based line number from raw source (positions are preserved because\n // we replace with equal-length spaces, so offsets are stable)\n const linesBefore = rawCode.slice(0, offset).split('\\n')\n const line = linesBefore.length\n const colOffset = linesBefore.at(-1)?.length ?? 0\n const rawLine = rawCode.split('\\n')[line - 1] ?? ''\n const ctx = rawLine.slice(Math.max(0, colOffset - 40), colOffset + name.length + 40).trim()\n\n hits.push({ global: name, offset, line, context: ctx })\n }\n }\n\n return hits\n}\n\nconst DEFAULT_FS_MODULES = [\n 'fs',\n 'fs/promises',\n 'node:fs',\n 'node:fs/promises',\n]\nconst SDK_DIST_DIR = path.dirname(fileURLToPath(import.meta.url))\nconst ARWEAVE_SHIM_FILE = path.join(SDK_DIST_DIR, 'arweave-default-shim.js')\nconst DEBUG_SHIM_FILE = path.join(SDK_DIST_DIR, 'debug-default-shim.js')\nconst STREAM_SHIM_FILE = path.join(SDK_DIST_DIR, 'stream-default-shim.js')\n\n/** Fragile renderer deps pre-bundled for stable CJS/ESM interop (aligned with permapress). */\nconst FRAGILE_RENDERER_OPTIMIZE_INCLUDES = [\n 'debug',\n 'random',\n 'seedrandom',\n '@georgedoescode/generative-utils',\n 'nanoid-dictionary',\n] as const\n\n/**\n * Always force-include (do not gate on resolvePackageFile): under bun these live nested\n * under @seedprotocol/sdk, and eas-sdk's ESM named-imports CJS eas-contracts. Without\n * prebundling, Vite serves raw /@fs CJS and the browser throws\n * \"does not provide an export named 'EAS__factory'\" during SchemaEncoder encode.\n */\nconst EAS_OPTIMIZE_INCLUDES = [\n '@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk',\n '@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk > @ethereum-attestation-service/eas-contracts',\n] as const\n\n/** CJS packages Seed ESM default-imports. Always include (do not gate on resolve). */\nconst CJS_OPTIMIZE_INCLUDES = ['pluralize'] as const\n\nconst DEFAULT_ISOLATION_HEADERS = {\n 'Cross-Origin-Opener-Policy': 'same-origin',\n 'Cross-Origin-Embedder-Policy': 'credentialless',\n 'Cross-Origin-Resource-Policy': 'same-origin',\n} as const\n\nfunction resolveIsolationHeaders(\n option: SeedVitePluginOptions['isolationHeaders'],\n): Record<string, string> | null {\n if (option === false) return null\n const overrides = typeof option === 'object' && option ? option : {}\n return {\n 'Cross-Origin-Opener-Policy': overrides.coop ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Opener-Policy'],\n 'Cross-Origin-Embedder-Policy': overrides.coep ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Embedder-Policy'],\n 'Cross-Origin-Resource-Policy': overrides.corp ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Resource-Policy'],\n }\n}\n\nfunction applyIsolationHeaderMiddleware(\n server: ViteDevServer | PreviewServer,\n headers: Record<string, string>,\n): void {\n server.middlewares.use((_req, res, next) => {\n const apply = () => {\n for (const [key, value] of Object.entries(headers)) {\n if (!res.getHeader(key)) {\n res.setHeader(key, value)\n }\n }\n }\n const originalWriteHead = res.writeHead.bind(res)\n res.writeHead = ((...args: Parameters<typeof res.writeHead>) => {\n apply()\n return originalWriteHead(...args)\n }) as typeof res.writeHead\n apply()\n next()\n })\n}\n\ntype AliasEntry = { find: string | RegExp; replacement: string }\n\nfunction pushBunPackageCandidates(\n bunDir: string,\n packageName: string,\n relativePath: string,\n candidates: string[],\n): void {\n if (!fs.existsSync(bunDir)) return\n // Nested scopes (@scope/name) live under .bun as @scope+name@version/...\n const bunPrefix = packageName.startsWith('@')\n ? packageName.replace('/', '+')\n : packageName\n for (const entry of fs.readdirSync(bunDir)) {\n if (!entry.startsWith(`${bunPrefix}@`) && !entry.startsWith(`${packageName}@`)) continue\n candidates.push(path.join(bunDir, entry, `node_modules/${packageName}`, relativePath))\n }\n}\n\nfunction resolvePackageFile(packageName: string, relativePath: string): string | undefined {\n const candidates: string[] = []\n const sdkRoot = path.resolve(SDK_DIST_DIR, '..')\n\n try {\n const pkgJson = _req.resolve(`${packageName}/package.json`)\n candidates.push(path.join(path.dirname(pkgJson), relativePath))\n } catch {\n // Many packages (e.g. sqlocal) omit package.json from \"exports\". Resolve an\n // entry file and walk up to the package root instead.\n try {\n const entry = _req.resolve(packageName)\n let dir = path.dirname(entry)\n for (let i = 0; i < 8; i++) {\n const pkgJsonPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgName = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8')).name\n if (pkgName === packageName) {\n candidates.push(path.join(dir, relativePath))\n break\n }\n } catch {\n // ignore invalid package.json\n }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n } catch {\n // package may be hoisted/unavailable in this graph\n }\n }\n\n // Linked/file installs: deps often live under the SDK package, not the app cwd.\n candidates.push(path.join(sdkRoot, 'node_modules', packageName, relativePath))\n\n const cwdNodeModules = path.join(process.cwd(), 'node_modules')\n candidates.push(path.join(cwdNodeModules, packageName, relativePath))\n\n pushBunPackageCandidates(\n path.join(cwdNodeModules, '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n pushBunPackageCandidates(\n path.join(sdkRoot, 'node_modules', '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n const bunInstallRoot = findNodeModulesBunRoot(sdkRoot)\n if (bunInstallRoot) {\n pushBunPackageCandidates(\n path.join(bunInstallRoot, 'node_modules', '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n }\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) return candidate\n }\n return undefined\n}\n\n/** Walk up from startDir looking for a directory that contains node_modules/.bun. */\nfunction findNodeModulesBunRoot(startDir: string): string | undefined {\n let dir = path.resolve(startDir)\n for (let i = 0; i < 8; i++) {\n if (fs.existsSync(path.join(dir, 'node_modules', '.bun'))) return dir\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n return undefined\n}\n\nfunction isFsAllowCovering(allow: readonly string[], filePath: string): boolean {\n const child = path.resolve(filePath)\n return allow.some((uri) => {\n const parent = path.resolve(String(uri))\n return (\n child === parent ||\n child.startsWith(parent.endsWith(path.sep) ? parent : parent + path.sep)\n )\n })\n}\n\nfunction realpathOrResolve(p: string): string {\n try {\n return fs.realpathSync(p)\n } catch {\n return path.resolve(p)\n }\n}\n\n/**\n * When the SDK is linked (file:/symlink) into an external app, sqlocal's worker\n * and sqlite-wasm assets resolve into the SDK install tree (often bun's .bun\n * store). Vite's default server.fs.allow only covers the consumer workspace, so\n * those absolute /@fs requests 403 unless we allowlist the install roots.\n */\nfunction collectDevServerFsAllowPaths(): string[] {\n const paths = new Set<string>()\n const add = (p?: string) => {\n if (!p) return\n paths.add(realpathOrResolve(p))\n }\n\n let sdkPkgDir: string\n try {\n sdkPkgDir = path.dirname(_req.resolve('@seedprotocol/sdk/package.json'))\n } catch {\n sdkPkgDir = path.resolve(SDK_DIST_DIR, '..')\n }\n add(sdkPkgDir)\n\n const bunInstallRoot = findNodeModulesBunRoot(sdkPkgDir)\n if (bunInstallRoot) add(bunInstallRoot)\n\n for (const pkg of ['sqlocal', '@sqlite.org/sqlite-wasm'] as const) {\n const pkgJson = resolvePackageFile(pkg, 'package.json')\n if (pkgJson) add(path.dirname(pkgJson))\n }\n\n return [...paths]\n}\n\nfunction ensureDevServerFsAllow(allow: string[]): string[] {\n const added: string[] = []\n for (const dir of collectDevServerFsAllowPaths()) {\n if (isFsAllowCovering(allow, dir)) continue\n allow.push(dir)\n added.push(dir)\n }\n return added\n}\n\nfunction normalizeAliasEntries(\n alias: NonNullable<UserConfig['resolve']>['alias'] | undefined\n): AliasEntry[] {\n if (!alias) return []\n if (Array.isArray(alias)) {\n return alias\n .filter((entry): entry is AliasEntry => !!entry && !!(entry as AliasEntry).replacement)\n .map((entry) => ({ find: entry.find, replacement: entry.replacement }))\n }\n\n return Object.entries(alias).map(([find, replacement]) => ({\n find,\n replacement: String(replacement),\n }))\n}\n\nfunction mergeAliasEntries(existing: AliasEntry[], additions: AliasEntry[]): AliasEntry[] {\n const merged = [...existing]\n const keyOf = (find: string | RegExp) =>\n typeof find === 'string' ? `s:${find}` : `r:${find.toString()}`\n const seen = new Set(merged.map((entry) => keyOf(entry.find)))\n\n for (const entry of additions) {\n const key = keyOf(entry.find)\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(entry)\n }\n\n return merged\n}\n\n/** Bare IDs that vite-plugin-node-polyfills injects into every transformed module. */\nconst NODE_POLYFILL_SHIM_IDS = [\n 'vite-plugin-node-polyfills/shims/buffer',\n 'vite-plugin-node-polyfills/shims/global',\n 'vite-plugin-node-polyfills/shims/process',\n] as const\n\ntype NodePolyfillShimPaths = {\n buffer?: string\n global?: string\n process?: string\n}\n\n/**\n * Prefer the package \"import\" ESM build (index.js). createRequire resolves the\n * \"require\" condition (index.cjs); Vite then serves `/@fs/...cjs?import` and\n * default-import fails in the browser.\n */\nfunction resolvePolyfillShimFile(shimId: string): string {\n const resolved = _req.resolve(shimId)\n if (resolved.endsWith('.cjs')) {\n const esm = resolved.slice(0, -4) + '.js'\n if (fs.existsSync(esm)) return esm\n }\n return resolved\n}\n\nfunction resolveNodePolyfillShimPaths(): {\n paths: NodePolyfillShimPaths\n unresolved: string[]\n} {\n const paths: NodePolyfillShimPaths = {}\n const unresolved: string[] = []\n for (const id of NODE_POLYFILL_SHIM_IDS) {\n try {\n const abs = resolvePolyfillShimFile(id)\n if (id.endsWith('/buffer')) paths.buffer = abs\n else if (id.endsWith('/global')) paths.global = abs\n else if (id.endsWith('/process')) paths.process = abs\n } catch {\n unresolved.push(id)\n }\n }\n return { paths, unresolved }\n}\n\n/**\n * Collapse repeated vite-plugin-node-polyfills globals banners (Vite 8 optimizer + serve).\n * Re-inject with absolute ESM paths: this runs in transform order \"post\" (after\n * import-analysis), so bare package ids would reach the browser unresolved\n * (\"Relative references must start with /, ./, or ../\").\n */\nfunction dedupeNodePolyfillBanner(\n code: string,\n paths: NodePolyfillShimPaths,\n): string | null {\n const importCount = (code.match(/import\\s+__buffer_polyfill\\b/g) || []).length\n if (importCount <= 1) return null\n if (!paths.buffer || !paths.global || !paths.process) return null\n\n const bannerRe =\n /import\\s+__buffer_polyfill\\s+from\\s+['\"][^'\"]+['\"];?\\s*\\n\\s*globalThis\\.Buffer\\s*=\\s*globalThis\\.Buffer\\s*\\|\\|\\s*__buffer_polyfill;?\\s*\\n\\s*import\\s+__global_polyfill\\s+from\\s+['\"][^'\"]+['\"];?\\s*\\n\\s*globalThis\\.global\\s*=\\s*globalThis\\.global\\s*\\|\\|\\s*__global_polyfill;?\\s*\\n\\s*import\\s+__process_polyfill\\s+from\\s+['\"][^'\"]+['\"];?\\s*\\n\\s*globalThis\\.process\\s*=\\s*globalThis\\.process\\s*\\|\\|\\s*__process_polyfill;?\\s*\\n?/g\n\n const cleaned = code.replace(bannerRe, '')\n if (cleaned === code) return null\n\n const banner =\n `import __buffer_polyfill from ${JSON.stringify(paths.buffer)};\\n` +\n 'globalThis.Buffer = globalThis.Buffer || __buffer_polyfill;\\n' +\n `import __global_polyfill from ${JSON.stringify(paths.global)};\\n` +\n 'globalThis.global = globalThis.global || __global_polyfill;\\n' +\n `import __process_polyfill from ${JSON.stringify(paths.process)};\\n` +\n 'globalThis.process = globalThis.process || __process_polyfill;\\n'\n\n return banner + cleaned\n}\n\n/** Rewrite leftover bare shim package ids to absolute ESM files (post import-analysis). */\nfunction rewriteBarePolyfillShimImports(\n code: string,\n paths: NodePolyfillShimPaths,\n): string | null {\n let next = code\n let changed = false\n const replacements: Array<[string, string]> = []\n if (paths.buffer) {\n replacements.push(['vite-plugin-node-polyfills/shims/buffer', paths.buffer])\n }\n if (paths.global) {\n replacements.push(['vite-plugin-node-polyfills/shims/global', paths.global])\n }\n if (paths.process) {\n replacements.push(['vite-plugin-node-polyfills/shims/process', paths.process])\n }\n for (const [bare, abs] of replacements) {\n const absLiteral = JSON.stringify(abs)\n for (const quote of ['\"', \"'\"] as const) {\n const from = `${quote}${bare}${quote}`\n if (!next.includes(from)) continue\n next = next.split(from).join(absLiteral)\n changed = true\n }\n }\n return changed ? next : null\n}\n\n/**\n * Alias polyfill shim bare imports + buffer/process/global module ids to absolute\n * paths resolved from this package. Nested installs under @seedprotocol/sdk are\n * invisible to consumer-project resolution (and to Vite 8's Rolldown optimizer)\n * unless we rewrite to absolute files.\n */\nfunction addNodePolyfillShimAliases(\n aliasEntries: AliasEntry[],\n paths: NodePolyfillShimPaths,\n): void {\n if (paths.buffer) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/buffer', replacement: paths.buffer },\n { find: /^buffer$/, replacement: paths.buffer },\n { find: /^node:buffer$/, replacement: paths.buffer },\n )\n }\n if (paths.global) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/global', replacement: paths.global },\n { find: /^global$/, replacement: paths.global },\n )\n }\n if (paths.process) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/process', replacement: paths.process },\n { find: /^process$/, replacement: paths.process },\n { find: /^node:process$/, replacement: paths.process },\n )\n }\n}\n\n/** Object-form aliases for optimizeDeps.rolldown/rollup resolve (string keys). */\nfunction nodePolyfillShimAliasObject(paths: NodePolyfillShimPaths): Record<string, string> {\n const alias: Record<string, string> = {}\n if (paths.buffer) {\n alias['vite-plugin-node-polyfills/shims/buffer'] = paths.buffer\n alias.buffer = paths.buffer\n alias['node:buffer'] = paths.buffer\n }\n if (paths.global) {\n alias['vite-plugin-node-polyfills/shims/global'] = paths.global\n alias.global = paths.global\n }\n if (paths.process) {\n alias['vite-plugin-node-polyfills/shims/process'] = paths.process\n alias.process = paths.process\n alias['node:process'] = paths.process\n }\n return alias\n}\n\nconst POLYFILL_ALIAS_FINDS_TO_REPLACE = new Set([\n 'vite-plugin-node-polyfills/shims/buffer',\n 'vite-plugin-node-polyfills/shims/global',\n 'vite-plugin-node-polyfills/shims/process',\n 'buffer',\n 'node:buffer',\n 'process',\n 'node:process',\n 'global',\n])\n\n/**\n * Put absolute polyfill aliases first and drop bare/package-id entries that\n * vite-plugin-node-polyfills may have added for the same modules (first match wins).\n */\nfunction withPreferredPolyfillAliases(\n existing: AliasEntry[],\n paths: NodePolyfillShimPaths,\n): AliasEntry[] {\n const preferred: AliasEntry[] = []\n addNodePolyfillShimAliases(preferred, paths)\n if (preferred.length === 0) return existing\n\n const filtered = existing.filter((entry) => {\n if (typeof entry.find !== 'string') return true\n return !POLYFILL_ALIAS_FINDS_TO_REPLACE.has(entry.find)\n })\n return [...preferred, ...filtered]\n}\n\nfunction addRendererCompatibilityAliases(aliasEntries: AliasEntry[]): void {\n const nanoidDictionaryEsm = resolvePackageFile(\n 'nanoid-dictionary',\n 'dist/dictionary.esm.js',\n )\n if (nanoidDictionaryEsm) {\n aliasEntries.push({\n find: /^nanoid-dictionary$/,\n replacement: nanoidDictionaryEsm,\n })\n }\n\n const zenfsCoreIndex = resolvePackageFile('@zenfs/core', 'dist/index.js')\n const zenfsCorePath = resolvePackageFile('@zenfs/core', 'dist/path.js')\n if (zenfsCoreIndex) {\n aliasEntries.push({ find: /^@zenfs\\/core$/, replacement: zenfsCoreIndex })\n }\n if (zenfsCorePath) {\n aliasEntries.push({ find: /^@zenfs\\/core\\/path$/, replacement: zenfsCorePath })\n }\n\n const zenfsDomIndex = resolvePackageFile('@zenfs/dom', 'dist/index.js')\n if (zenfsDomIndex) {\n aliasEntries.push({ find: /^@zenfs\\/dom$/, replacement: zenfsDomIndex })\n }\n\n if (fs.existsSync(DEBUG_SHIM_FILE)) {\n // Only alias the package root. Do not alias debug/src/browser.js to this shim:\n // the shim imports that path and aliasing it back creates a circular module.\n aliasEntries.push({ find: /^debug$/, replacement: DEBUG_SHIM_FILE })\n }\n\n const debugBrowserEntry = resolvePackageFile('debug', 'src/browser.js')\n if (debugBrowserEntry) {\n aliasEntries.push({\n find: /^debug\\/src\\/browser\\.js$/,\n replacement: debugBrowserEntry,\n })\n }\n\n // Minimal stream stub (not stream-browserify) so sax/rss-parser init is quiet.\n if (fs.existsSync(STREAM_SHIM_FILE)) {\n aliasEntries.push(\n { find: /^stream$/, replacement: STREAM_SHIM_FILE },\n { find: /^node:stream$/, replacement: STREAM_SHIM_FILE },\n )\n }\n}\n\n/** Object-form aliases for optimizeDeps pre-bundle (debug shim subpath). */\nfunction debugShimOptimizeAliasObject(): Record<string, string> {\n const debugBrowserEntry = resolvePackageFile('debug', 'src/browser.js')\n return debugBrowserEntry ? { 'debug/src/browser.js': debugBrowserEntry } : {}\n}\n\n/** Object-form aliases so optimizeDeps prebundles (rss-parser → sax) use our stream stub. */\nfunction streamShimOptimizeAliasObject(): Record<string, string> {\n if (!fs.existsSync(STREAM_SHIM_FILE)) return {}\n return {\n stream: STREAM_SHIM_FILE,\n 'node:stream': STREAM_SHIM_FILE,\n }\n}\n\ntype OptimizeDepsConfig = NonNullable<UserConfig['optimizeDeps']>\n\n/** Read Rolldown optimizer options, falling back to deprecated rollup/esbuild shapes. */\nfunction readOptimizeDepsRolldownBase(\n existing: OptimizeDepsConfig | undefined,\n): Record<string, unknown> {\n const opt = existing ?? {}\n return (\n opt.rolldownOptions ??\n (opt as { rollupOptions?: Record<string, unknown> }).rollupOptions ??\n {}\n ) as Record<string, unknown>\n}\n\n/**\n * Merge Vite 8 `optimizeDeps.rolldownOptions` without returning deprecated\n * `esbuildOptions` / `rollupOptions` keys from plugin config hooks.\n */\nfunction mergeOptimizeDepsRolldownOptions(\n existing: OptimizeDepsConfig | undefined,\n patch: {\n define?: Record<string, string>\n alias?: Record<string, string>\n },\n): OptimizeDepsConfig['rolldownOptions'] {\n const base = readOptimizeDepsRolldownBase(existing)\n const existingResolve = (base.resolve as { alias?: Record<string, string> } | undefined) ?? {}\n const existingTransform = (base.transform as { define?: Record<string, string> } | undefined) ?? {}\n const legacyDefine = existing?.esbuildOptions?.define ?? {}\n\n const mergedDefine = {\n ...legacyDefine,\n ...existingTransform.define,\n ...patch.define,\n }\n const mergedAlias = {\n ...existingResolve.alias,\n ...patch.alias,\n }\n\n return {\n ...base,\n ...(Object.keys(mergedDefine).length > 0\n ? {\n transform: {\n ...existingTransform,\n define: mergedDefine,\n },\n }\n : {}),\n ...(Object.keys(mergedAlias).length > 0\n ? {\n resolve: {\n ...existingResolve,\n alias: mergedAlias,\n },\n }\n : {}),\n }\n}\n\n/** Spread optimizeDeps while omitting deprecated optimizer option keys. */\nfunction omitDeprecatedOptimizeDepsKeys(\n existing: OptimizeDepsConfig | undefined,\n): Omit<OptimizeDepsConfig, 'esbuildOptions' | 'rollupOptions'> {\n const { esbuildOptions: _e, rollupOptions: _r, ...rest } = existing ?? {}\n return rest\n}\n\n/**\n * Minimal Vite plugin to make the SDK work in browser/Electron renderer:\n * - Aliases fs → @zenfs/core (and promises variant)\n * - Aliases path → path-browserify\n * - Ensures CommonJS in SDK dist is transformed by Vite's CommonJS plugin\n * - Allowlists linked SDK / sqlocal worker paths on server.fs.allow for Vite dev\n * - Optionally injects a simple ZenFS initialization script\n * - Optionally wires up vite-plugin-node-polyfills with safe defaults\n *\n * This plugin assumes the SDK does not bundle Node-only code in the browser entry.\n * For Electron, Node-only work (e.g. better-sqlite3) should run in the\n * main process; the renderer should only use browser-safe SDK usage.\n *\n * For the renderer build:\n * - Use the SDK's ESM entry: import from '@seedprotocol/sdk' (resolves to dist/main.js).\n * - When autoInit is false (default), initialize ZenFS in your entry:\n * import { configure } from '@zenfs/core'; import { IndexedDB } from '@zenfs/dom';\n * await configure({ mounts: { '/': IndexedDB } });\n */\nexport function seedVitePlugin(options: SeedVitePluginOptions = {}): Plugin[] {\n const {\n fsModules = DEFAULT_FS_MODULES,\n autoInit = false,\n debug = false,\n includeNodePolyfills = true,\n isolationHeaders: isolationHeadersOption,\n } = options\n\n const isolationHeaders = resolveIsolationHeaders(isolationHeadersOption)\n let htmlNodeEnv = 'production'\n\n const log = (...args: unknown[]) => {\n if (debug) console.log('[seed-vite-plugin]', ...args)\n }\n\n const { paths: polyfillShimPaths, unresolved: unresolvedPolyfillShims } =\n resolveNodePolyfillShimPaths()\n const polyfillShimAliasObj = nodePolyfillShimAliasObject(polyfillShimPaths)\n\n if (includeNodePolyfills && unresolvedPolyfillShims.length > 0) {\n console.warn(\n '[seed-vite-plugin] Could not resolve vite-plugin-node-polyfills shims from the SDK package:\\n' +\n unresolvedPolyfillShims.map((id) => ` - ${id}`).join('\\n') +\n '\\nNode polyfill globals may fail to resolve. Reinstall @seedprotocol/sdk, or set includeNodePolyfills: false and configure polyfills yourself.',\n )\n } else if (unresolvedPolyfillShims.length === 0) {\n log('Resolved vite-plugin-node-polyfills shims to absolute paths')\n }\n\n /**\n * Pre-plugin: configure aliases and optimizeDeps.\n */\n const configPlugin: Plugin = {\n name: 'seed-protocol:config',\n enforce: 'pre',\n\n configResolved(resolvedConfig) {\n const addedAllowPaths = ensureDevServerFsAllow(resolvedConfig.server.fs.allow)\n if (addedAllowPaths.length > 0) {\n log(\n 'Extended server.fs.allow for linked SDK / sqlocal worker paths:',\n addedAllowPaths,\n )\n }\n },\n\n config(userConfig, env) {\n if (env?.mode) {\n htmlNodeEnv = env.mode\n }\n const aliasEntries: AliasEntry[] = []\n for (const mod of fsModules) {\n const isPromises = mod.includes('promises')\n const target = isPromises ? '@zenfs/core/promises' : '@zenfs/core'\n aliasEntries.push({ find: mod, replacement: target })\n }\n\n const eventEmitterEsm = resolvePackageFile('eventemitter3', 'dist/eventemitter3.esm.js')\n if (eventEmitterEsm) {\n aliasEntries.push(\n { find: 'eventemitter3', replacement: eventEmitterEsm },\n { find: 'eventemitter3/index.mjs', replacement: eventEmitterEsm },\n { find: 'eventemitter3/index.js', replacement: eventEmitterEsm },\n )\n }\n\n const arweaveBundle = resolvePackageFile('arweave', 'bundles/web.bundle.js')\n if (arweaveBundle) {\n aliasEntries.push(\n { find: /^arweave$/, replacement: ARWEAVE_SHIM_FILE },\n { find: /^arweave\\/web\\/index\\.js$/, replacement: ARWEAVE_SHIM_FILE },\n { find: /^arweave\\/bundles\\/web\\.bundle\\.js$/, replacement: arweaveBundle },\n )\n }\n\n addRendererCompatibilityAliases(aliasEntries)\n addNodePolyfillShimAliases(aliasEntries, polyfillShimPaths)\n\n const existingResolve = userConfig.resolve ?? {}\n const mergedAlias = mergeAliasEntries(\n normalizeAliasEntries(existingResolve.alias),\n aliasEntries,\n )\n\n const desiredOptimizeIncludes = [\n '@zenfs/core',\n '@zenfs/dom',\n 'kerium',\n 'utilium',\n 'memium',\n 'readable-stream',\n 'viem',\n 'isows',\n ...FRAGILE_RENDERER_OPTIMIZE_INCLUDES,\n ]\n const resolvableOptimizeIncludes = desiredOptimizeIncludes.filter(\n (dep) => !!resolvePackageFile(dep, 'package.json'),\n )\n\n const existingOptimize = userConfig.optimizeDeps\n const debugOptimizeAliases = debugShimOptimizeAliasObject()\n const streamOptimizeAliases = streamShimOptimizeAliasObject()\n\n const optimizeDeps: UserConfig['optimizeDeps'] = {\n ...omitDeprecatedOptimizeDepsKeys(existingOptimize),\n exclude: [\n ...(existingOptimize?.exclude ?? []),\n // Do not prebundle the SDK itself or clearly node-only tools\n '@seedprotocol/sdk',\n 'drizzle-orm',\n 'better-sqlite3',\n // sqlocal uses workers and should not be prebundled\n 'sqlocal',\n ],\n include: [\n ...(existingOptimize?.include ?? []),\n ...resolvableOptimizeIncludes,\n ...EAS_OPTIMIZE_INCLUDES,\n ...CJS_OPTIMIZE_INCLUDES,\n ],\n // Keep `global` shim in optimizer Rolldown options; top-level Vite `define`\n // can be rejected by Rolldown in some consumer setups.\n rolldownOptions: mergeOptimizeDepsRolldownOptions(existingOptimize, {\n define: { global: 'globalThis' },\n alias: {\n ...debugOptimizeAliases,\n ...streamOptimizeAliases,\n ...polyfillShimAliasObj,\n },\n }),\n }\n\n return {\n // Apply global → globalThis for Rollup production builds too.\n // optimizeDeps.rolldownOptions.transform.define only covers the dev pre-bundle step;\n // this top-level define is picked up by @rollup/plugin-replace during build\n // and covers all chunks, including code-split migrator/commonjs-helper chunks.\n define: {\n ...(userConfig.define ?? {}),\n global: 'globalThis',\n // process is referenced by path-browserify and other CJS modules.\n // Point at globalThis.process which is set by the synchronous inline\n // shim script injected into index.html before any modules load.\n // Do not define process.env.NODE_ENV — Vite already sets it from mode,\n // and forcing \"production\" during `vite serve` compiles out React Refresh.\n 'process.browser': 'true',\n 'process.platform': '\"browser\"',\n },\n resolve: {\n ...existingResolve,\n alias: mergedAlias,\n // Prevent duplicate React/thirdweb instances when @seedprotocol/publish is workspace-linked.\n // Multiple copies break context (e.g. useActiveAccount must be used within ThirdwebProvider).\n // Also dedupe XState and Seed packages: two xstate copies cause Object.assign _version errors;\n // two @seedprotocol/sdk copies leave BaseDb facade / Db.appDb on different module instances\n // (\"App DB not found\", undefined.$with on PostsPage).\n // Two @zenfs copies leave configureSingle / WebAccess on different module instances\n // and can remount OPFS against a stale handle.\n dedupe: Array.from(\n new Set([\n ...(existingResolve.dedupe ?? []),\n 'react',\n 'react-dom',\n 'thirdweb',\n 'xstate',\n '@xstate/react',\n '@seedprotocol/sdk',\n '@seedprotocol/react',\n '@seedprotocol/publish',\n '@seedprotocol/feed',\n '@zenfs/core',\n '@zenfs/dom',\n ])\n ),\n },\n optimizeDeps,\n ...(isolationHeaders\n ? {\n server: {\n ...(userConfig.server ?? {}),\n headers: {\n ...(userConfig.server?.headers ?? {}),\n ...isolationHeaders,\n },\n },\n preview: {\n ...(userConfig.preview ?? {}),\n headers: {\n ...(userConfig.preview?.headers ?? {}),\n ...isolationHeaders,\n },\n },\n }\n : {}),\n }\n },\n }\n\n /**\n * Runs after vite-plugin-node-polyfills so absolute shim aliases win over its bare\n * package-id aliases in both resolve.alias and the Rolldown optimizeDeps graph.\n */\n const polyfillResolvePlugin: Plugin = {\n name: 'seed-protocol:polyfill-resolve',\n enforce: 'post',\n\n config(userConfig) {\n if (Object.keys(polyfillShimAliasObj).length === 0) return\n\n const existingResolve = userConfig.resolve ?? {}\n const mergedAlias = withPreferredPolyfillAliases(\n normalizeAliasEntries(existingResolve.alias),\n polyfillShimPaths,\n )\n\n const existingOptimize = userConfig.optimizeDeps\n\n return {\n resolve: {\n ...existingResolve,\n alias: mergedAlias,\n },\n optimizeDeps: {\n rolldownOptions: mergeOptimizeDepsRolldownOptions(existingOptimize, {\n // Later merge overwrites bare shim ids from vite-plugin-node-polyfills.\n alias: polyfillShimAliasObj,\n }),\n },\n }\n },\n\n resolveId: {\n order: 'pre',\n handler(id) {\n // Always rewrite injected shim package ids (safe even if nested under the SDK).\n if (id === 'vite-plugin-node-polyfills/shims/buffer') {\n return polyfillShimPaths.buffer ?? null\n }\n if (id === 'vite-plugin-node-polyfills/shims/global') {\n return polyfillShimPaths.global ?? null\n }\n if (id === 'vite-plugin-node-polyfills/shims/process') {\n return polyfillShimPaths.process ?? null\n }\n // Only remap node globals when we own the polyfills plugin config.\n if (!includeNodePolyfills) return null\n if (id === 'buffer' || id === 'node:buffer') return polyfillShimPaths.buffer ?? null\n if (id === 'global') return polyfillShimPaths.global ?? null\n if (id === 'process' || id === 'node:process') return polyfillShimPaths.process ?? null\n return null\n },\n },\n\n transform: {\n // After polyfills banner/inject so we collapse duplicates left in optimized deps.\n // Must emit absolute shim paths: order \"post\" runs after import-analysis.\n order: 'post',\n handler(code) {\n const count = (code.match(/import\\s+__buffer_polyfill\\b/g) || []).length\n let next = code\n let mutated = false\n\n if (count > 1) {\n const deduped = dedupeNodePolyfillBanner(next, polyfillShimPaths)\n if (deduped) {\n next = deduped\n mutated = true\n }\n }\n\n const rewritten = rewriteBarePolyfillShimImports(next, polyfillShimPaths)\n if (rewritten) {\n next = rewritten\n mutated = true\n }\n\n if (mutated) return { code: next, map: null }\n return null\n },\n },\n }\n\n /**\n * Post-plugin: build configuration + optional ZenFS init.\n */\n const mainPlugin: Plugin = {\n name: 'seed-protocol:main',\n enforce: 'post',\n\n configureServer(server) {\n if (isolationHeaders) applyIsolationHeaderMiddleware(server, isolationHeaders)\n },\n\n configurePreviewServer(server) {\n if (isolationHeaders) applyIsolationHeaderMiddleware(server, isolationHeaders)\n },\n\n config(userConfig) {\n const existingBuild = userConfig.build ?? {}\n const existingCommonjs = existingBuild.commonjsOptions ?? {}\n const existingRollupOptions = existingBuild.rollupOptions ?? {}\n const existingRolldownOptions = (existingBuild as Record<string, unknown>).rolldownOptions as\n | Record<string, unknown>\n | undefined\n const existingExternal = existingRollupOptions.external ?? []\n\n const include = [\n // Anything the user already had\n ...(Array.isArray(existingCommonjs.include)\n ? existingCommonjs.include\n : existingCommonjs.include\n ? [existingCommonjs.include]\n : []),\n // Always process node_modules and the SDK dist so require() is transformed\n /node_modules/,\n /seed-protocol-sdk[\\\\/]+dist[\\\\/]/,\n ]\n\n // Exclude packages that are already ESM or have special worker handling\n const exclude = [\n ...(Array.isArray(existingCommonjs.exclude)\n ? existingCommonjs.exclude\n : existingCommonjs.exclude\n ? [existingCommonjs.exclude]\n : []),\n // sqlocal is ESM and uses workers - don't transform it\n /node_modules[\\\\/]+sqlocal[\\\\/]/,\n ]\n\n const commonjsOptions = {\n ...existingCommonjs,\n include,\n exclude,\n transformMixedEsModules: true,\n }\n\n // Externalize Node.js-only packages that should never be bundled for the browser\n const nodeOnlyPackages = [\n 'better-sqlite3', // Native SQLite binding (Node.js only)\n ]\n\n const isNodeOnlyExternal = (id: string) =>\n nodeOnlyPackages.some(\n (pkg) =>\n id === pkg ||\n id.startsWith(`${pkg}/`) ||\n id.includes(`/${pkg}/`) ||\n id.endsWith(`/${pkg}`)\n )\n\n const externalList = (id: string, importer?: string, isResolved?: boolean) => {\n if (isNodeOnlyExternal(id)) return true\n if (typeof existingExternal === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (existingExternal as any)(id, importer, isResolved ?? false)\n }\n if (Array.isArray(existingExternal)) {\n return existingExternal.some((ext) => ext === id || id.startsWith(`${ext}/`))\n }\n return false\n }\n\n const rollupOptions = {\n ...existingRollupOptions,\n external: externalList,\n }\n\n const build: Record<string, unknown> = {\n ...existingBuild,\n commonjsOptions,\n }\n if (existingRolldownOptions) {\n build.rolldownOptions = {\n ...existingRolldownOptions,\n external: externalList,\n }\n } else {\n build.rollupOptions = rollupOptions\n }\n\n // Worker options are TOP-LEVEL in Vite config, not under build.\n // Default 'iife' breaks when workers use code-splitting (e.g. sqlocal).\n const existingWorker = userConfig.worker ?? {}\n const worker = {\n ...existingWorker,\n format: existingWorker.format ?? 'es',\n }\n\n return {\n build,\n worker,\n }\n },\n\n generateBundle(_options, bundle) {\n const allHits: Array<{ chunk: string } & GlobalHit> = []\n\n for (const [chunkName, asset] of Object.entries(bundle)) {\n if (asset.type !== 'chunk') continue\n const hits = findDangerousGlobals(asset.code)\n for (const hit of hits) {\n allHits.push({ chunk: chunkName, ...hit })\n }\n }\n\n if (allHits.length === 0) return\n\n console.warn(\n '\\n[seed-vite-plugin] ⚠️ Bare Node.js globals detected in browser bundle chunks.' +\n ' These will throw ReferenceError at runtime unless shimmed.\\n'\n )\n const byChunk = new Map<string, typeof allHits>()\n for (const hit of allHits) {\n const list = byChunk.get(hit.chunk) ?? []\n list.push(hit)\n byChunk.set(hit.chunk, list)\n }\n for (const [chunk, hits] of byChunk) {\n console.warn(` ${chunk}`)\n for (const h of hits) {\n console.warn(` line ${h.line}: \\`${h.global}\\` — ${h.context}`)\n }\n }\n console.warn('')\n },\n\n transformIndexHtml(html) {\n // Synchronous inline script runs before any <script type=\"module\">, so\n // global and process are guaranteed to exist when CJS wrappers evaluate.\n // vite-plugin-node-polyfills injects polyfills via module imports, which\n // resolve too late for @rollup/plugin-commonjs-generated wrapper code.\n const nodeEnvLiteral = JSON.stringify(htmlNodeEnv)\n const shimScript = `<script>\n(function(){\n if(typeof globalThis.global==='undefined')globalThis.global=globalThis;\n if(typeof globalThis.process==='undefined')globalThis.process={env:{NODE_ENV:${nodeEnvLiteral}},browser:true,version:'v18.0.0',versions:{},platform:'browser',cwd:function(){return'/'},nextTick:function(fn){setTimeout(fn,0)}};\n})();\n</script>`\n\n let result = html\n if (result.includes('<head>')) {\n result = result.replace('<head>', `<head>\\n${shimScript}`)\n } else {\n result = shimScript + result\n }\n\n if (!autoInit) return result\n\n const initScript = `\n<script type=\"module\">\nimport { configure } from '@zenfs/core';\nimport { IndexedDB } from '@zenfs/dom';\n\nif (!window.__seedFsReady) {\n window.__seedFsReady = configure({\n mounts: { '/': IndexedDB },\n }).catch((err) => {\n console.error('[seed-vite-plugin] ZenFS initialization failed', err);\n });\n}\n</script>`\n\n if (result.includes('</head>')) {\n return result.replace('</head>', `${initScript}\\n</head>`)\n }\n\n return result + initScript\n },\n }\n\n const sdkImportFixPlugin: Plugin = {\n name: 'seed-protocol:sdk-import-fix',\n enforce: 'post',\n transform(code, id) {\n if (!id.includes('@seedprotocol/sdk') || !id.includes('FileManager')) {\n return null\n }\n const hasDefaultPathBrowserifyImport =\n /import\\s+path\\s+from\\s+['\"]path-browserify['\"]/.test(code)\n if (!hasDefaultPathBrowserifyImport) {\n return null\n }\n const transformed = code.replace(\n /import\\s+path\\s+from\\s+['\"]path-browserify['\"];/g,\n \"import * as path from 'path';\",\n )\n if (transformed === code) {\n return null\n }\n return { code: transformed, map: null }\n },\n }\n\n const plugins: Plugin[] = [configPlugin, mainPlugin, sdkImportFixPlugin]\n\n if (includeNodePolyfills) {\n log('Including vite-plugin-node-polyfills with default settings')\n // vite-plugin-node-polyfills ≥0.27 returns Plugin[]; older versions returned a single Plugin.\n const polyfillPlugins = nodePolyfills({\n // Let fs be handled by @zenfs/core instead of polyfills\n exclude: ['readline',],\n // Common set of browser-friendly polyfills used by many deps\n include: ['path', 'buffer', 'events', 'string_decoder', 'util'],\n globals: {\n Buffer: true,\n global: true,\n process: true,\n },\n protocolImports: true,\n }) as unknown as Plugin | Plugin[]\n if (Array.isArray(polyfillPlugins)) {\n plugins.push(...polyfillPlugins)\n } else {\n plugins.push(polyfillPlugins)\n }\n }\n\n // After nodePolyfills so config() can overwrite its bare shim aliases.\n if (Object.keys(polyfillShimAliasObj).length > 0) {\n plugins.push(polyfillResolvePlugin)\n }\n\n return plugins\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["fs","path","_req","createRequire","BROWSER_DANGEROUS_GLOBALS","stripStringsAndComments","code","m","findDangerousGlobals","stripped","rawCode","hits","name","typeofGuard","re","offset","before","linesBefore","line","colOffset","ctx","DEFAULT_FS_MODULES","SDK_DIST_DIR","fileURLToPath","ARWEAVE_SHIM_FILE","DEBUG_SHIM_FILE","STREAM_SHIM_FILE","FRAGILE_RENDERER_OPTIMIZE_INCLUDES","EAS_OPTIMIZE_INCLUDES","APP_OPTIONAL_OPTIMIZE_INCLUDES","CJS_OPTIMIZE_INCLUDES","DEFAULT_ISOLATION_HEADERS","resolveIsolationHeaders","option","overrides","applyIsolationHeaderMiddleware","apply","key","value","headers","res","originalWriteHead","args","next","pushBunPackageCandidates","bunDir","bunPrefix","packageName","entry","candidates","relativePath","isResolvableFromRoot","root","dir","resolvePackageFile","sdkRoot","pkgJson","i","pkgJsonPath","parent","cwdNodeModules","bunInstallRoot","findNodeModulesBunRoot","candidate","startDir","isFsAllowCovering","child","filePath","allow","uri","realpathOrResolve","p","collectDevServerFsAllowPaths","paths","add","sdkPkgDir","pkg","ensureDevServerFsAllow","added","normalizeAliasEntries","alias","find","replacement","mergeAliasEntries","merged","existing","keyOf","seen","additions","NODE_POLYFILL_SHIM_IDS","resolvePolyfillShimFile","resolved","shimId","esm","resolveNodePolyfillShimPaths","unresolved","id","abs","rewriteBarePolyfillShimImports","changed","replacements","bare","absLiteral","quote","from","addNodePolyfillShimAliases","aliasEntries","nodePolyfillShimAliasObject","POLYFILL_ALIAS_FINDS_TO_REPLACE","withPreferredPolyfillAliases","preferred","filtered","addRendererCompatibilityAliases","nanoidDictionaryEsm","zenfsCoreIndex","zenfsCorePath","zenfsDomIndex","debugBrowserEntry","debugShimOptimizeAliasObject","streamShimOptimizeAliasObject","optimizeDepsRolldownPatch","define","patch","seedVitePlugin","isolationHeadersOption","options","isolationHeaders","htmlNodeEnv","log","debug","polyfillShimPaths","unresolvedPolyfillShims","polyfillShimAliasObj","includeNodePolyfills","configPlugin","addedAllowPaths","resolvedConfig","env","mod","fsModules","target","eventEmitterEsm","arweaveBundle","existingResolve","userConfig","mergedAlias","desiredOptimizeIncludes","appRoot","resolvableOptimizeIncludes","dep","existingOptimize","debugOptimizeAliases","streamOptimizeAliases","optimizeDeps","polyfillResolvePlugin","rewritten","plugins","server","existingBuild","existingCommonjs","existingRollupOptions","existingRolldownOptions","existingExternal","include","exclude","commonjsOptions","nodeOnlyPackages","isNodeOnlyExternal","externalList","importer","isResolved","ext","rollupOptions","build","existingWorker","allHits","chunkName","asset","bundle","hit","byChunk","list","chunk","h","shimScript","result","html","autoInit","initScript","transformed","polyfillPlugins","nodePolyfills"],"sources":["../src/index.ts"],"sourcesContent":["import type { ConfigEnv, Plugin, PreviewServer, UserConfig, ViteDevServer } from 'vite'\nimport fs from 'node:fs'\nimport { createRequire } from 'node:module'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\nimport { nodePolyfills } from 'vite-plugin-node-polyfills'\n\nconst _req = createRequire(import.meta.url)\n\nexport interface SeedVitePluginOptions {\n /**\n * Additional modules to alias to ZenFS equivalents.\n * @default ['fs', 'fs/promises', 'node:fs', 'node:fs/promises']\n */\n fsModules?: string[]\n\n /**\n * Whether to inject automatic ZenFS initialization script into index.html.\n * When true, injects a &lt;script type=\"module\"&gt; that imports from '@zenfs/core'/'@zenfs/dom'.\n * Browsers cannot resolve those bare specifiers, so the script fails at runtime unless you use\n * an import map or load ZenFS another way. Prefer false and initialize ZenFS in your entry:\n * import { configure } from '@zenfs/core'; import { IndexedDB } from '@zenfs/dom';\n * await configure({ mounts: { '/': IndexedDB } });\n * @default false\n */\n autoInit?: boolean\n\n /**\n * Enable debug logging.\n * @default false\n */\n debug?: boolean\n\n /**\n * Whether to automatically include vite-plugin-node-polyfills with sensible defaults.\n * The SDK depends on that package and aliases its injected shim imports to absolute\n * paths, so consuming apps do not need to install vite-plugin-node-polyfills themselves.\n * Default include list omits full `stream`/`crypto` polyfills (those pull\n * stream-browserify and break Vite SSR / React Router prerender). A minimal\n * `stream` stub is still aliased so sax/rss-parser do not warn. Use `false`\n * for Framework Mode / prerender.\n * @default true\n */\n includeNodePolyfills?: boolean\n\n /**\n * Cross-origin isolation headers for sqlocal / SharedArrayBuffer / OPFS.\n * Applied in configureServer and configurePreviewServer, including writeHead,\n * because Vite `server.headers` is not copied onto Framework-Mode HTML responses.\n * Set `false` to disable. Pass `{ coop, coep, corp }` to override values.\n * @default true (`COOP: same-origin`, `COEP: credentialless`, `CORP: same-origin`)\n */\n isolationHeaders?: boolean | {\n coop?: string\n coep?: string\n corp?: string\n }\n}\n\n// Node.js globals that are undefined in browsers and will throw at runtime.\n// Keyed by identifier; value is the safe typeof-guard pattern so we can skip those.\nconst BROWSER_DANGEROUS_GLOBALS: Record<string, RegExp> = {\n global: /\\btypeof\\s+global\\b/,\n process: /\\btypeof\\s+process\\b/,\n Buffer: /\\btypeof\\s+Buffer\\b/,\n __dirname: /\\btypeof\\s+__dirname\\b/,\n __filename: /\\btypeof\\s+__filename\\b/,\n}\n\n/**\n * Strip JS string literals, template literals, and comments from source text\n * so that identifier searches don't false-positive on string content.\n * This is intentionally approximate — good enough for a lint-style warning pass.\n */\nfunction stripStringsAndComments(code: string): string {\n return code\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, (m) => ' '.repeat(m.length)) // /* block comments */\n .replace(/\\/\\/[^\\n]*/g, (m) => ' '.repeat(m.length)) // // line comments\n .replace(/`(?:[^`\\\\]|\\\\.)*`/gs, (m) => '`' + ' '.repeat(m.length - 2) + '`') // template literals\n .replace(/\"(?:[^\"\\\\]|\\\\.)*\"/g, (m) => '\"' + ' '.repeat(m.length - 2) + '\"') // double-quoted strings\n .replace(/'(?:[^'\\\\]|\\\\.)*'/g, (m) => \"'\" + ' '.repeat(m.length - 2) + \"'\") // single-quoted strings\n}\n\ninterface GlobalHit {\n global: string\n /** zero-based character offset in the stripped source */\n offset: number\n /** 1-based line number */\n line: number\n /** surrounding raw source for context */\n context: string\n}\n\nfunction findDangerousGlobals(rawCode: string): GlobalHit[] {\n const stripped = stripStringsAndComments(rawCode)\n const hits: GlobalHit[] = []\n\n for (const [name, typeofGuard] of Object.entries(BROWSER_DANGEROUS_GLOBALS)) {\n // Skip globalThis when checking 'global'\n const re = new RegExp(`(?<![.\\\\w$])\\\\b${name}\\\\b(?!This)(?![\\\\w$])`, 'g')\n let m: RegExpExecArray | null\n while ((m = re.exec(stripped)) !== null) {\n const offset = m.index\n // Check for typeof guard in the ~20 chars before the match\n const before = stripped.slice(Math.max(0, offset - 20), offset)\n if (typeofGuard.test(before)) continue\n\n // Compute 1-based line number from raw source (positions are preserved because\n // we replace with equal-length spaces, so offsets are stable)\n const linesBefore = rawCode.slice(0, offset).split('\\n')\n const line = linesBefore.length\n const colOffset = linesBefore.at(-1)?.length ?? 0\n const rawLine = rawCode.split('\\n')[line - 1] ?? ''\n const ctx = rawLine.slice(Math.max(0, colOffset - 40), colOffset + name.length + 40).trim()\n\n hits.push({ global: name, offset, line, context: ctx })\n }\n }\n\n return hits\n}\n\nconst DEFAULT_FS_MODULES = [\n 'fs',\n 'fs/promises',\n 'node:fs',\n 'node:fs/promises',\n]\nconst SDK_DIST_DIR = path.dirname(fileURLToPath(import.meta.url))\nconst ARWEAVE_SHIM_FILE = path.join(SDK_DIST_DIR, 'arweave-default-shim.js')\nconst DEBUG_SHIM_FILE = path.join(SDK_DIST_DIR, 'debug-default-shim.js')\nconst STREAM_SHIM_FILE = path.join(SDK_DIST_DIR, 'stream-default-shim.js')\n\n/** Fragile renderer deps pre-bundled for stable CJS/ESM interop (aligned with permapress). */\nconst FRAGILE_RENDERER_OPTIMIZE_INCLUDES = [\n 'debug',\n 'random',\n 'seedrandom',\n '@georgedoescode/generative-utils',\n 'nanoid-dictionary',\n] as const\n\n/**\n * Always force-include (do not gate on resolvePackageFile): under bun these live nested\n * under @seedprotocol/sdk, and eas-sdk's ESM named-imports CJS eas-contracts. Without\n * prebundling, Vite serves raw /@fs CJS and the browser throws\n * \"does not provide an export named 'EAS__factory'\" during SchemaEncoder encode.\n */\nconst EAS_OPTIMIZE_INCLUDES = [\n '@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk',\n '@seedprotocol/sdk > @ethereum-attestation-service/eas-sdk > @ethereum-attestation-service/eas-contracts',\n] as const\n\n/**\n * Prebundled only when the app itself can resolve them. Vite resolves `include`\n * entries from the app root, so finding them under a linked SDK is not enough\n * (Vite would skip them with \"Failed to resolve dependency\"). The zenfs helpers\n * are bundled into the @zenfs chunks anyway; viem/isows come from\n * @seedprotocol/publish, not the SDK.\n */\nconst APP_OPTIONAL_OPTIMIZE_INCLUDES = [\n 'kerium',\n 'utilium',\n 'memium',\n 'readable-stream',\n 'viem',\n 'isows',\n] as const\n\n/** CJS packages Seed ESM default-imports. Always include (do not gate on resolve). */\nconst CJS_OPTIMIZE_INCLUDES = ['pluralize'] as const\n\nconst DEFAULT_ISOLATION_HEADERS = {\n 'Cross-Origin-Opener-Policy': 'same-origin',\n 'Cross-Origin-Embedder-Policy': 'credentialless',\n 'Cross-Origin-Resource-Policy': 'same-origin',\n} as const\n\nfunction resolveIsolationHeaders(\n option: SeedVitePluginOptions['isolationHeaders'],\n): Record<string, string> | null {\n if (option === false) return null\n const overrides = typeof option === 'object' && option ? option : {}\n return {\n 'Cross-Origin-Opener-Policy': overrides.coop ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Opener-Policy'],\n 'Cross-Origin-Embedder-Policy': overrides.coep ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Embedder-Policy'],\n 'Cross-Origin-Resource-Policy': overrides.corp ?? DEFAULT_ISOLATION_HEADERS['Cross-Origin-Resource-Policy'],\n }\n}\n\nfunction applyIsolationHeaderMiddleware(\n server: ViteDevServer | PreviewServer,\n headers: Record<string, string>,\n): void {\n server.middlewares.use((_req, res, next) => {\n const apply = () => {\n for (const [key, value] of Object.entries(headers)) {\n if (!res.getHeader(key)) {\n res.setHeader(key, value)\n }\n }\n }\n const originalWriteHead = res.writeHead.bind(res)\n res.writeHead = ((...args: Parameters<typeof res.writeHead>) => {\n apply()\n return originalWriteHead(...args)\n }) as typeof res.writeHead\n apply()\n next()\n })\n}\n\ntype AliasEntry = { find: string | RegExp; replacement: string }\n\nfunction pushBunPackageCandidates(\n bunDir: string,\n packageName: string,\n relativePath: string,\n candidates: string[],\n): void {\n if (!fs.existsSync(bunDir)) return\n // Nested scopes (@scope/name) live under .bun as @scope+name@version/...\n const bunPrefix = packageName.startsWith('@')\n ? packageName.replace('/', '+')\n : packageName\n for (const entry of fs.readdirSync(bunDir)) {\n if (!entry.startsWith(`${bunPrefix}@`) && !entry.startsWith(`${packageName}@`)) continue\n candidates.push(path.join(bunDir, entry, `node_modules/${packageName}`, relativePath))\n }\n}\n\n/** Whether a package is installed where Vite's optimizer looks for it (the app root upward). */\nfunction isResolvableFromRoot(packageName: string, root: string): boolean {\n const lookupDirs = createRequire(path.join(root, 'package.json')).resolve.paths(packageName) ?? []\n return lookupDirs.some((dir) => fs.existsSync(path.join(dir, packageName, 'package.json')))\n}\n\nfunction resolvePackageFile(packageName: string, relativePath: string): string | undefined {\n const candidates: string[] = []\n const sdkRoot = path.resolve(SDK_DIST_DIR, '..')\n\n try {\n const pkgJson = _req.resolve(`${packageName}/package.json`)\n candidates.push(path.join(path.dirname(pkgJson), relativePath))\n } catch {\n // Many packages (e.g. sqlocal) omit package.json from \"exports\". Resolve an\n // entry file and walk up to the package root instead.\n try {\n const entry = _req.resolve(packageName)\n let dir = path.dirname(entry)\n for (let i = 0; i < 8; i++) {\n const pkgJsonPath = path.join(dir, 'package.json')\n if (fs.existsSync(pkgJsonPath)) {\n try {\n const pkgName = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf8')).name\n if (pkgName === packageName) {\n candidates.push(path.join(dir, relativePath))\n break\n }\n } catch {\n // ignore invalid package.json\n }\n }\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n } catch {\n // package may be hoisted/unavailable in this graph\n }\n }\n\n // Linked/file installs: deps often live under the SDK package, not the app cwd.\n candidates.push(path.join(sdkRoot, 'node_modules', packageName, relativePath))\n\n const cwdNodeModules = path.join(process.cwd(), 'node_modules')\n candidates.push(path.join(cwdNodeModules, packageName, relativePath))\n\n pushBunPackageCandidates(\n path.join(cwdNodeModules, '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n pushBunPackageCandidates(\n path.join(sdkRoot, 'node_modules', '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n const bunInstallRoot = findNodeModulesBunRoot(sdkRoot)\n if (bunInstallRoot) {\n pushBunPackageCandidates(\n path.join(bunInstallRoot, 'node_modules', '.bun'),\n packageName,\n relativePath,\n candidates,\n )\n }\n\n for (const candidate of candidates) {\n if (fs.existsSync(candidate)) return candidate\n }\n return undefined\n}\n\n/** Walk up from startDir looking for a directory that contains node_modules/.bun. */\nfunction findNodeModulesBunRoot(startDir: string): string | undefined {\n let dir = path.resolve(startDir)\n for (let i = 0; i < 8; i++) {\n if (fs.existsSync(path.join(dir, 'node_modules', '.bun'))) return dir\n const parent = path.dirname(dir)\n if (parent === dir) break\n dir = parent\n }\n return undefined\n}\n\nfunction isFsAllowCovering(allow: readonly string[], filePath: string): boolean {\n const child = path.resolve(filePath)\n return allow.some((uri) => {\n const parent = path.resolve(String(uri))\n return (\n child === parent ||\n child.startsWith(parent.endsWith(path.sep) ? parent : parent + path.sep)\n )\n })\n}\n\nfunction realpathOrResolve(p: string): string {\n try {\n return fs.realpathSync(p)\n } catch {\n return path.resolve(p)\n }\n}\n\n/**\n * When the SDK is linked (file:/symlink) into an external app, sqlocal's worker\n * and sqlite-wasm assets resolve into the SDK install tree (often bun's .bun\n * store). Vite's default server.fs.allow only covers the consumer workspace, so\n * those absolute /@fs requests 403 unless we allowlist the install roots.\n */\nfunction collectDevServerFsAllowPaths(): string[] {\n const paths = new Set<string>()\n const add = (p?: string) => {\n if (!p) return\n paths.add(realpathOrResolve(p))\n }\n\n let sdkPkgDir: string\n try {\n sdkPkgDir = path.dirname(_req.resolve('@seedprotocol/sdk/package.json'))\n } catch {\n sdkPkgDir = path.resolve(SDK_DIST_DIR, '..')\n }\n add(sdkPkgDir)\n\n const bunInstallRoot = findNodeModulesBunRoot(sdkPkgDir)\n if (bunInstallRoot) add(bunInstallRoot)\n\n for (const pkg of ['sqlocal', '@sqlite.org/sqlite-wasm'] as const) {\n const pkgJson = resolvePackageFile(pkg, 'package.json')\n if (pkgJson) add(path.dirname(pkgJson))\n }\n\n return [...paths]\n}\n\nfunction ensureDevServerFsAllow(allow: string[]): string[] {\n const added: string[] = []\n for (const dir of collectDevServerFsAllowPaths()) {\n if (isFsAllowCovering(allow, dir)) continue\n allow.push(dir)\n added.push(dir)\n }\n return added\n}\n\nfunction normalizeAliasEntries(\n alias: NonNullable<UserConfig['resolve']>['alias'] | undefined\n): AliasEntry[] {\n if (!alias) return []\n if (Array.isArray(alias)) {\n return alias\n .filter((entry): entry is AliasEntry => !!entry && !!(entry as AliasEntry).replacement)\n .map((entry) => ({ find: entry.find, replacement: entry.replacement }))\n }\n\n return Object.entries(alias).map(([find, replacement]) => ({\n find,\n replacement: String(replacement),\n }))\n}\n\nfunction mergeAliasEntries(existing: AliasEntry[], additions: AliasEntry[]): AliasEntry[] {\n const merged = [...existing]\n const keyOf = (find: string | RegExp) =>\n typeof find === 'string' ? `s:${find}` : `r:${find.toString()}`\n const seen = new Set(merged.map((entry) => keyOf(entry.find)))\n\n for (const entry of additions) {\n const key = keyOf(entry.find)\n if (seen.has(key)) continue\n seen.add(key)\n merged.push(entry)\n }\n\n return merged\n}\n\n/** Bare IDs that vite-plugin-node-polyfills injects into every transformed module. */\nconst NODE_POLYFILL_SHIM_IDS = [\n 'vite-plugin-node-polyfills/shims/buffer',\n 'vite-plugin-node-polyfills/shims/global',\n 'vite-plugin-node-polyfills/shims/process',\n] as const\n\ntype NodePolyfillShimPaths = {\n buffer?: string\n global?: string\n process?: string\n}\n\n/**\n * Prefer the package \"import\" ESM build (index.js). createRequire resolves the\n * \"require\" condition (index.cjs); Vite then serves `/@fs/...cjs?import` and\n * default-import fails in the browser.\n */\nfunction resolvePolyfillShimFile(shimId: string): string {\n const resolved = _req.resolve(shimId)\n if (resolved.endsWith('.cjs')) {\n const esm = resolved.slice(0, -4) + '.js'\n if (fs.existsSync(esm)) return esm\n }\n return resolved\n}\n\nfunction resolveNodePolyfillShimPaths(): {\n paths: NodePolyfillShimPaths\n unresolved: string[]\n} {\n const paths: NodePolyfillShimPaths = {}\n const unresolved: string[] = []\n for (const id of NODE_POLYFILL_SHIM_IDS) {\n try {\n const abs = resolvePolyfillShimFile(id)\n if (id.endsWith('/buffer')) paths.buffer = abs\n else if (id.endsWith('/global')) paths.global = abs\n else if (id.endsWith('/process')) paths.process = abs\n } catch {\n unresolved.push(id)\n }\n }\n return { paths, unresolved }\n}\n\n/** Rewrite leftover bare shim package ids to absolute ESM files (post import-analysis). */\nfunction rewriteBarePolyfillShimImports(\n code: string,\n paths: NodePolyfillShimPaths,\n): string | null {\n let next = code\n let changed = false\n const replacements: Array<[string, string]> = []\n if (paths.buffer) {\n replacements.push(['vite-plugin-node-polyfills/shims/buffer', paths.buffer])\n }\n if (paths.global) {\n replacements.push(['vite-plugin-node-polyfills/shims/global', paths.global])\n }\n if (paths.process) {\n replacements.push(['vite-plugin-node-polyfills/shims/process', paths.process])\n }\n for (const [bare, abs] of replacements) {\n const absLiteral = JSON.stringify(abs)\n for (const quote of ['\"', \"'\"] as const) {\n const from = `${quote}${bare}${quote}`\n if (!next.includes(from)) continue\n next = next.split(from).join(absLiteral)\n changed = true\n }\n }\n return changed ? next : null\n}\n\n/**\n * Alias polyfill shim bare imports + buffer/process/global module ids to absolute\n * paths resolved from this package. Nested installs under @seedprotocol/sdk are\n * invisible to consumer-project resolution (and to Vite 8's Rolldown optimizer)\n * unless we rewrite to absolute files.\n */\nfunction addNodePolyfillShimAliases(\n aliasEntries: AliasEntry[],\n paths: NodePolyfillShimPaths,\n): void {\n if (paths.buffer) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/buffer', replacement: paths.buffer },\n { find: /^buffer$/, replacement: paths.buffer },\n { find: /^node:buffer$/, replacement: paths.buffer },\n )\n }\n if (paths.global) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/global', replacement: paths.global },\n { find: /^global$/, replacement: paths.global },\n )\n }\n if (paths.process) {\n aliasEntries.push(\n { find: 'vite-plugin-node-polyfills/shims/process', replacement: paths.process },\n { find: /^process$/, replacement: paths.process },\n { find: /^node:process$/, replacement: paths.process },\n )\n }\n}\n\n/** Object-form aliases for optimizeDeps.rolldown/rollup resolve (string keys). */\nfunction nodePolyfillShimAliasObject(paths: NodePolyfillShimPaths): Record<string, string> {\n const alias: Record<string, string> = {}\n if (paths.buffer) {\n alias['vite-plugin-node-polyfills/shims/buffer'] = paths.buffer\n alias.buffer = paths.buffer\n alias['node:buffer'] = paths.buffer\n }\n if (paths.global) {\n alias['vite-plugin-node-polyfills/shims/global'] = paths.global\n alias.global = paths.global\n }\n if (paths.process) {\n alias['vite-plugin-node-polyfills/shims/process'] = paths.process\n alias.process = paths.process\n alias['node:process'] = paths.process\n }\n return alias\n}\n\nconst POLYFILL_ALIAS_FINDS_TO_REPLACE = new Set([\n 'vite-plugin-node-polyfills/shims/buffer',\n 'vite-plugin-node-polyfills/shims/global',\n 'vite-plugin-node-polyfills/shims/process',\n 'buffer',\n 'node:buffer',\n 'process',\n 'node:process',\n 'global',\n])\n\n/**\n * Put absolute polyfill aliases first and drop bare/package-id entries that\n * vite-plugin-node-polyfills may have added for the same modules (first match wins).\n */\nfunction withPreferredPolyfillAliases(\n existing: AliasEntry[],\n paths: NodePolyfillShimPaths,\n): AliasEntry[] {\n const preferred: AliasEntry[] = []\n addNodePolyfillShimAliases(preferred, paths)\n if (preferred.length === 0) return existing\n\n const filtered = existing.filter((entry) => {\n if (typeof entry.find !== 'string') return true\n return !POLYFILL_ALIAS_FINDS_TO_REPLACE.has(entry.find)\n })\n return [...preferred, ...filtered]\n}\n\nfunction addRendererCompatibilityAliases(aliasEntries: AliasEntry[]): void {\n const nanoidDictionaryEsm = resolvePackageFile(\n 'nanoid-dictionary',\n 'dist/dictionary.esm.js',\n )\n if (nanoidDictionaryEsm) {\n aliasEntries.push({\n find: /^nanoid-dictionary$/,\n replacement: nanoidDictionaryEsm,\n })\n }\n\n const zenfsCoreIndex = resolvePackageFile('@zenfs/core', 'dist/index.js')\n const zenfsCorePath = resolvePackageFile('@zenfs/core', 'dist/path.js')\n if (zenfsCoreIndex) {\n aliasEntries.push({ find: /^@zenfs\\/core$/, replacement: zenfsCoreIndex })\n }\n if (zenfsCorePath) {\n aliasEntries.push({ find: /^@zenfs\\/core\\/path$/, replacement: zenfsCorePath })\n }\n\n const zenfsDomIndex = resolvePackageFile('@zenfs/dom', 'dist/index.js')\n if (zenfsDomIndex) {\n aliasEntries.push({ find: /^@zenfs\\/dom$/, replacement: zenfsDomIndex })\n }\n\n if (fs.existsSync(DEBUG_SHIM_FILE)) {\n // Only alias the package root. Do not alias debug/src/browser.js to this shim:\n // the shim imports that path and aliasing it back creates a circular module.\n aliasEntries.push({ find: /^debug$/, replacement: DEBUG_SHIM_FILE })\n }\n\n const debugBrowserEntry = resolvePackageFile('debug', 'src/browser.js')\n if (debugBrowserEntry) {\n aliasEntries.push({\n find: /^debug\\/src\\/browser\\.js$/,\n replacement: debugBrowserEntry,\n })\n }\n\n // Minimal stream stub (not stream-browserify) so sax/rss-parser init is quiet.\n if (fs.existsSync(STREAM_SHIM_FILE)) {\n aliasEntries.push(\n { find: /^stream$/, replacement: STREAM_SHIM_FILE },\n { find: /^node:stream$/, replacement: STREAM_SHIM_FILE },\n )\n }\n}\n\n/** Object-form aliases for optimizeDeps pre-bundle (debug shim subpath). */\nfunction debugShimOptimizeAliasObject(): Record<string, string> {\n const debugBrowserEntry = resolvePackageFile('debug', 'src/browser.js')\n return debugBrowserEntry ? { 'debug/src/browser.js': debugBrowserEntry } : {}\n}\n\n/** Object-form aliases so optimizeDeps prebundles (rss-parser → sax) use our stream stub. */\nfunction streamShimOptimizeAliasObject(): Record<string, string> {\n if (!fs.existsSync(STREAM_SHIM_FILE)) return {}\n return {\n stream: STREAM_SHIM_FILE,\n 'node:stream': STREAM_SHIM_FILE,\n }\n}\n\ntype OptimizeDepsConfig = NonNullable<UserConfig['optimizeDeps']>\n\n/**\n * Build a Vite 8 `optimizeDeps.rolldownOptions` patch for a plugin `config()` hook.\n *\n * Returns only what this plugin adds. Vite deep-merges hook results into the\n * user config and concatenates arrays, so echoing existing options back would\n * duplicate them — e.g. vite-plugin-node-polyfills' optimizer banner plugin,\n * which then declares `__buffer_polyfill` twice in every prebundled chunk.\n * Legacy `esbuildOptions.define` is carried into `transform.define` so\n * definitions survive the move off the deprecated key.\n */\nfunction optimizeDepsRolldownPatch(\n existing: OptimizeDepsConfig | undefined,\n patch: {\n define?: Record<string, string>\n alias?: Record<string, string>\n },\n): OptimizeDepsConfig['rolldownOptions'] {\n const define = {\n ...existing?.esbuildOptions?.define,\n ...patch.define,\n }\n const alias = patch.alias ?? {}\n\n return {\n ...(Object.keys(define).length > 0 ? { transform: { define } } : {}),\n ...(Object.keys(alias).length > 0 ? { resolve: { alias } } : {}),\n }\n}\n\n/**\n * Minimal Vite plugin to make the SDK work in browser/Electron renderer:\n * - Aliases fs → @zenfs/core (and promises variant)\n * - Aliases path → path-browserify\n * - Ensures CommonJS in SDK dist is transformed by Vite's CommonJS plugin\n * - Allowlists linked SDK / sqlocal worker paths on server.fs.allow for Vite dev\n * - Optionally injects a simple ZenFS initialization script\n * - Optionally wires up vite-plugin-node-polyfills with safe defaults\n *\n * This plugin assumes the SDK does not bundle Node-only code in the browser entry.\n * For Electron, Node-only work (e.g. better-sqlite3) should run in the\n * main process; the renderer should only use browser-safe SDK usage.\n *\n * For the renderer build:\n * - Use the SDK's ESM entry: import from '@seedprotocol/sdk' (resolves to dist/main.js).\n * - When autoInit is false (default), initialize ZenFS in your entry:\n * import { configure } from '@zenfs/core'; import { IndexedDB } from '@zenfs/dom';\n * await configure({ mounts: { '/': IndexedDB } });\n */\nexport function seedVitePlugin(options: SeedVitePluginOptions = {}): Plugin[] {\n const {\n fsModules = DEFAULT_FS_MODULES,\n autoInit = false,\n debug = false,\n includeNodePolyfills = true,\n isolationHeaders: isolationHeadersOption,\n } = options\n\n const isolationHeaders = resolveIsolationHeaders(isolationHeadersOption)\n let htmlNodeEnv = 'production'\n\n const log = (...args: unknown[]) => {\n if (debug) console.log('[seed-vite-plugin]', ...args)\n }\n\n const { paths: polyfillShimPaths, unresolved: unresolvedPolyfillShims } =\n resolveNodePolyfillShimPaths()\n const polyfillShimAliasObj = nodePolyfillShimAliasObject(polyfillShimPaths)\n\n if (includeNodePolyfills && unresolvedPolyfillShims.length > 0) {\n console.warn(\n '[seed-vite-plugin] Could not resolve vite-plugin-node-polyfills shims from the SDK package:\\n' +\n unresolvedPolyfillShims.map((id) => ` - ${id}`).join('\\n') +\n '\\nNode polyfill globals may fail to resolve. Reinstall @seedprotocol/sdk, or set includeNodePolyfills: false and configure polyfills yourself.',\n )\n } else if (unresolvedPolyfillShims.length === 0) {\n log('Resolved vite-plugin-node-polyfills shims to absolute paths')\n }\n\n /**\n * Pre-plugin: configure aliases and optimizeDeps.\n */\n const configPlugin: Plugin = {\n name: 'seed-protocol:config',\n enforce: 'pre',\n\n configResolved(resolvedConfig) {\n const addedAllowPaths = ensureDevServerFsAllow(resolvedConfig.server.fs.allow)\n if (addedAllowPaths.length > 0) {\n log(\n 'Extended server.fs.allow for linked SDK / sqlocal worker paths:',\n addedAllowPaths,\n )\n }\n },\n\n config(userConfig, env) {\n if (env?.mode) {\n htmlNodeEnv = env.mode\n }\n const aliasEntries: AliasEntry[] = []\n for (const mod of fsModules) {\n const isPromises = mod.includes('promises')\n const target = isPromises ? '@zenfs/core/promises' : '@zenfs/core'\n aliasEntries.push({ find: mod, replacement: target })\n }\n\n const eventEmitterEsm = resolvePackageFile('eventemitter3', 'dist/eventemitter3.esm.js')\n if (eventEmitterEsm) {\n aliasEntries.push(\n { find: 'eventemitter3', replacement: eventEmitterEsm },\n { find: 'eventemitter3/index.mjs', replacement: eventEmitterEsm },\n { find: 'eventemitter3/index.js', replacement: eventEmitterEsm },\n )\n }\n\n const arweaveBundle = resolvePackageFile('arweave', 'bundles/web.bundle.js')\n if (arweaveBundle) {\n aliasEntries.push(\n { find: /^arweave$/, replacement: ARWEAVE_SHIM_FILE },\n { find: /^arweave\\/web\\/index\\.js$/, replacement: ARWEAVE_SHIM_FILE },\n { find: /^arweave\\/bundles\\/web\\.bundle\\.js$/, replacement: arweaveBundle },\n )\n }\n\n addRendererCompatibilityAliases(aliasEntries)\n addNodePolyfillShimAliases(aliasEntries, polyfillShimPaths)\n\n const existingResolve = userConfig.resolve ?? {}\n const mergedAlias = mergeAliasEntries(\n normalizeAliasEntries(existingResolve.alias),\n aliasEntries,\n )\n\n const desiredOptimizeIncludes = [\n '@zenfs/core',\n '@zenfs/dom',\n ...FRAGILE_RENDERER_OPTIMIZE_INCLUDES,\n ]\n const appRoot = path.resolve(userConfig.root ?? process.cwd())\n const resolvableOptimizeIncludes = [\n ...desiredOptimizeIncludes.filter((dep) => !!resolvePackageFile(dep, 'package.json')),\n ...APP_OPTIONAL_OPTIMIZE_INCLUDES.filter((dep) => isResolvableFromRoot(dep, appRoot)),\n ]\n\n const existingOptimize = userConfig.optimizeDeps\n const debugOptimizeAliases = debugShimOptimizeAliasObject()\n const streamOptimizeAliases = streamShimOptimizeAliasObject()\n\n // Only this plugin's additions: Vite concatenates them onto the user's arrays.\n const optimizeDeps: UserConfig['optimizeDeps'] = {\n exclude: [\n // Do not prebundle the SDK itself or clearly node-only tools\n '@seedprotocol/sdk',\n 'drizzle-orm',\n 'better-sqlite3',\n // sqlocal uses workers and should not be prebundled\n 'sqlocal',\n ],\n include: [\n ...resolvableOptimizeIncludes,\n ...EAS_OPTIMIZE_INCLUDES,\n ...CJS_OPTIMIZE_INCLUDES,\n ],\n // Keep `global` shim in optimizer Rolldown options; top-level Vite `define`\n // can be rejected by Rolldown in some consumer setups.\n rolldownOptions: optimizeDepsRolldownPatch(existingOptimize, {\n define: { global: 'globalThis' },\n alias: {\n ...debugOptimizeAliases,\n ...streamOptimizeAliases,\n ...polyfillShimAliasObj,\n },\n }),\n }\n\n return {\n // Apply global → globalThis for Rollup production builds too.\n // optimizeDeps.rolldownOptions.transform.define only covers the dev pre-bundle step;\n // this top-level define is picked up by @rollup/plugin-replace during build\n // and covers all chunks, including code-split migrator/commonjs-helper chunks.\n define: {\n ...(userConfig.define ?? {}),\n global: 'globalThis',\n // process is referenced by path-browserify and other CJS modules.\n // Point at globalThis.process which is set by the synchronous inline\n // shim script injected into index.html before any modules load.\n // Do not define process.env.NODE_ENV — Vite already sets it from mode,\n // and forcing \"production\" during `vite serve` compiles out React Refresh.\n 'process.browser': 'true',\n 'process.platform': '\"browser\"',\n },\n resolve: {\n ...existingResolve,\n alias: mergedAlias,\n // Prevent duplicate React/thirdweb instances when @seedprotocol/publish is workspace-linked.\n // Multiple copies break context (e.g. useActiveAccount must be used within ThirdwebProvider).\n // Also dedupe XState and Seed packages: two xstate copies cause Object.assign _version errors;\n // two @seedprotocol/sdk copies leave BaseDb facade / Db.appDb on different module instances\n // (\"App DB not found\", undefined.$with on PostsPage).\n // Two @zenfs copies leave configureSingle / WebAccess on different module instances\n // and can remount OPFS against a stale handle.\n dedupe: Array.from(\n new Set([\n ...(existingResolve.dedupe ?? []),\n 'react',\n 'react-dom',\n 'thirdweb',\n 'xstate',\n '@xstate/react',\n '@seedprotocol/sdk',\n '@seedprotocol/react',\n '@seedprotocol/publish',\n '@seedprotocol/feed',\n '@zenfs/core',\n '@zenfs/dom',\n ])\n ),\n },\n optimizeDeps,\n ...(isolationHeaders\n ? {\n server: {\n ...(userConfig.server ?? {}),\n headers: {\n ...(userConfig.server?.headers ?? {}),\n ...isolationHeaders,\n },\n },\n preview: {\n ...(userConfig.preview ?? {}),\n headers: {\n ...(userConfig.preview?.headers ?? {}),\n ...isolationHeaders,\n },\n },\n }\n : {}),\n }\n },\n }\n\n /**\n * Runs after vite-plugin-node-polyfills so absolute shim aliases win over its bare\n * package-id aliases in both resolve.alias and the Rolldown optimizeDeps graph.\n */\n const polyfillResolvePlugin: Plugin = {\n name: 'seed-protocol:polyfill-resolve',\n enforce: 'post',\n\n config(userConfig) {\n if (Object.keys(polyfillShimAliasObj).length === 0) return\n\n const existingResolve = userConfig.resolve ?? {}\n const mergedAlias = withPreferredPolyfillAliases(\n normalizeAliasEntries(existingResolve.alias),\n polyfillShimPaths,\n )\n\n return {\n resolve: {\n alias: mergedAlias,\n },\n optimizeDeps: {\n rolldownOptions: optimizeDepsRolldownPatch(undefined, {\n // Later merges overwrite vite-plugin-node-polyfills' serve-time\n // `global: 'global'` define and its bare shim-id aliases.\n define: { global: 'globalThis' },\n alias: polyfillShimAliasObj,\n }),\n },\n }\n },\n\n resolveId: {\n order: 'pre',\n handler(id) {\n // Always rewrite injected shim package ids (safe even if nested under the SDK).\n if (id === 'vite-plugin-node-polyfills/shims/buffer') {\n return polyfillShimPaths.buffer ?? null\n }\n if (id === 'vite-plugin-node-polyfills/shims/global') {\n return polyfillShimPaths.global ?? null\n }\n if (id === 'vite-plugin-node-polyfills/shims/process') {\n return polyfillShimPaths.process ?? null\n }\n // Only remap node globals when we own the polyfills plugin config.\n if (!includeNodePolyfills) return null\n if (id === 'buffer' || id === 'node:buffer') return polyfillShimPaths.buffer ?? null\n if (id === 'global') return polyfillShimPaths.global ?? null\n if (id === 'process' || id === 'node:process') return polyfillShimPaths.process ?? null\n return null\n },\n },\n\n transform: {\n // Must emit absolute shim paths: order \"post\" runs after import-analysis.\n order: 'post',\n handler(code) {\n const rewritten = rewriteBarePolyfillShimImports(code, polyfillShimPaths)\n return rewritten ? { code: rewritten, map: null } : null\n },\n },\n }\n\n /**\n * Post-plugin: build configuration + optional ZenFS init.\n */\n const mainPlugin: Plugin = {\n name: 'seed-protocol:main',\n enforce: 'post',\n\n configureServer(server) {\n if (isolationHeaders) applyIsolationHeaderMiddleware(server, isolationHeaders)\n },\n\n configurePreviewServer(server) {\n if (isolationHeaders) applyIsolationHeaderMiddleware(server, isolationHeaders)\n },\n\n config(userConfig) {\n const existingBuild = userConfig.build ?? {}\n const existingCommonjs = existingBuild.commonjsOptions ?? {}\n const existingRollupOptions = existingBuild.rollupOptions ?? {}\n const existingRolldownOptions = (existingBuild as Record<string, unknown>).rolldownOptions as\n | Record<string, unknown>\n | undefined\n const existingExternal = existingRollupOptions.external ?? []\n\n const include = [\n // Anything the user already had\n ...(Array.isArray(existingCommonjs.include)\n ? existingCommonjs.include\n : existingCommonjs.include\n ? [existingCommonjs.include]\n : []),\n // Always process node_modules and the SDK dist so require() is transformed\n /node_modules/,\n /seed-protocol-sdk[\\\\/]+dist[\\\\/]/,\n ]\n\n // Exclude packages that are already ESM or have special worker handling\n const exclude = [\n ...(Array.isArray(existingCommonjs.exclude)\n ? existingCommonjs.exclude\n : existingCommonjs.exclude\n ? [existingCommonjs.exclude]\n : []),\n // sqlocal is ESM and uses workers - don't transform it\n /node_modules[\\\\/]+sqlocal[\\\\/]/,\n ]\n\n const commonjsOptions = {\n ...existingCommonjs,\n include,\n exclude,\n transformMixedEsModules: true,\n }\n\n // Externalize Node.js-only packages that should never be bundled for the browser\n const nodeOnlyPackages = [\n 'better-sqlite3', // Native SQLite binding (Node.js only)\n ]\n\n const isNodeOnlyExternal = (id: string) =>\n nodeOnlyPackages.some(\n (pkg) =>\n id === pkg ||\n id.startsWith(`${pkg}/`) ||\n id.includes(`/${pkg}/`) ||\n id.endsWith(`/${pkg}`)\n )\n\n const externalList = (id: string, importer?: string, isResolved?: boolean) => {\n if (isNodeOnlyExternal(id)) return true\n if (typeof existingExternal === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (existingExternal as any)(id, importer, isResolved ?? false)\n }\n if (Array.isArray(existingExternal)) {\n return existingExternal.some((ext) => ext === id || id.startsWith(`${ext}/`))\n }\n return false\n }\n\n const rollupOptions = {\n ...existingRollupOptions,\n external: externalList,\n }\n\n const build: Record<string, unknown> = {\n ...existingBuild,\n commonjsOptions,\n }\n if (existingRolldownOptions) {\n build.rolldownOptions = {\n ...existingRolldownOptions,\n external: externalList,\n }\n } else {\n build.rollupOptions = rollupOptions\n }\n\n // Worker options are TOP-LEVEL in Vite config, not under build.\n // Default 'iife' breaks when workers use code-splitting (e.g. sqlocal).\n const existingWorker = userConfig.worker ?? {}\n const worker = {\n ...existingWorker,\n format: existingWorker.format ?? 'es',\n }\n\n return {\n build,\n worker,\n }\n },\n\n generateBundle(_options, bundle) {\n const allHits: Array<{ chunk: string } & GlobalHit> = []\n\n for (const [chunkName, asset] of Object.entries(bundle)) {\n if (asset.type !== 'chunk') continue\n const hits = findDangerousGlobals(asset.code)\n for (const hit of hits) {\n allHits.push({ chunk: chunkName, ...hit })\n }\n }\n\n if (allHits.length === 0) return\n\n console.warn(\n '\\n[seed-vite-plugin] ⚠️ Bare Node.js globals detected in browser bundle chunks.' +\n ' These will throw ReferenceError at runtime unless shimmed.\\n'\n )\n const byChunk = new Map<string, typeof allHits>()\n for (const hit of allHits) {\n const list = byChunk.get(hit.chunk) ?? []\n list.push(hit)\n byChunk.set(hit.chunk, list)\n }\n for (const [chunk, hits] of byChunk) {\n console.warn(` ${chunk}`)\n for (const h of hits) {\n console.warn(` line ${h.line}: \\`${h.global}\\` — ${h.context}`)\n }\n }\n console.warn('')\n },\n\n transformIndexHtml(html) {\n // Synchronous inline script runs before any <script type=\"module\">, so\n // global and process are guaranteed to exist when CJS wrappers evaluate.\n // vite-plugin-node-polyfills injects polyfills via module imports, which\n // resolve too late for @rollup/plugin-commonjs-generated wrapper code.\n const nodeEnvLiteral = JSON.stringify(htmlNodeEnv)\n const shimScript = `<script>\n(function(){\n if(typeof globalThis.global==='undefined')globalThis.global=globalThis;\n if(typeof globalThis.process==='undefined')globalThis.process={env:{NODE_ENV:${nodeEnvLiteral}},browser:true,version:'v18.0.0',versions:{},platform:'browser',cwd:function(){return'/'},nextTick:function(fn){setTimeout(fn,0)}};\n})();\n</script>`\n\n let result = html\n if (result.includes('<head>')) {\n result = result.replace('<head>', `<head>\\n${shimScript}`)\n } else {\n result = shimScript + result\n }\n\n if (!autoInit) return result\n\n const initScript = `\n<script type=\"module\">\nimport { configure } from '@zenfs/core';\nimport { IndexedDB } from '@zenfs/dom';\n\nif (!window.__seedFsReady) {\n window.__seedFsReady = configure({\n mounts: { '/': IndexedDB },\n }).catch((err) => {\n console.error('[seed-vite-plugin] ZenFS initialization failed', err);\n });\n}\n</script>`\n\n if (result.includes('</head>')) {\n return result.replace('</head>', `${initScript}\\n</head>`)\n }\n\n return result + initScript\n },\n }\n\n const sdkImportFixPlugin: Plugin = {\n name: 'seed-protocol:sdk-import-fix',\n enforce: 'post',\n transform(code, id) {\n if (!id.includes('@seedprotocol/sdk') || !id.includes('FileManager')) {\n return null\n }\n const hasDefaultPathBrowserifyImport =\n /import\\s+path\\s+from\\s+['\"]path-browserify['\"]/.test(code)\n if (!hasDefaultPathBrowserifyImport) {\n return null\n }\n const transformed = code.replace(\n /import\\s+path\\s+from\\s+['\"]path-browserify['\"];/g,\n \"import * as path from 'path';\",\n )\n if (transformed === code) {\n return null\n }\n return { code: transformed, map: null }\n },\n }\n\n const plugins: Plugin[] = [configPlugin, mainPlugin, sdkImportFixPlugin]\n\n if (includeNodePolyfills) {\n log('Including vite-plugin-node-polyfills with default settings')\n // vite-plugin-node-polyfills ≥0.27 returns Plugin[]; older versions returned a single Plugin.\n const polyfillPlugins = nodePolyfills({\n // Let fs be handled by @zenfs/core instead of polyfills\n exclude: ['readline',],\n // Common set of browser-friendly polyfills used by many deps\n include: ['path', 'buffer', 'events', 'string_decoder', 'util'],\n globals: {\n Buffer: true,\n global: true,\n process: true,\n },\n protocolImports: true,\n }) as unknown as Plugin | Plugin[]\n if (Array.isArray(polyfillPlugins)) {\n plugins.push(...polyfillPlugins)\n } else {\n plugins.push(polyfillPlugins)\n }\n }\n\n // After nodePolyfills so config() can overwrite its bare shim aliases.\n if (Object.keys(polyfillShimAliasObj).length > 0) {\n plugins.push(polyfillResolvePlugin)\n }\n\n return plugins\n}\n"],"mappings":";;;;;;AAOA,IAAME,IAAOC,EAAc,YAAY,GAAG,GAsDpCC,IAAoD;CACxD,QAAY;CACZ,SAAY;CACZ,QAAY;CACZ,WAAY;CACZ,YAAY;AACd;AAOA,SAASC,EAAwB,GAAsB;CACrD,OAAOC,EACJ,QAAQ,sBAAsB,MAAM,IAAI,OAAOC,EAAE,MAAM,CAAC,CAAC,CACzD,QAAQ,gBAAgB,MAAM,IAAI,OAAOA,EAAE,MAAM,CAAC,CAAC,CACnD,QAAQ,wBAAwB,MAAM,MAAM,IAAI,OAAOA,EAAE,SAAS,CAAC,IAAI,GAAG,CAAC,CAC3E,QAAQ,uBAAuB,MAAM,OAAM,IAAI,OAAOA,EAAE,SAAS,CAAC,IAAI,IAAG,CAAC,CAC1E,QAAQ,uBAAuB,MAAM,MAAM,IAAI,OAAOA,EAAE,SAAS,CAAC,IAAI,GAAG;AAC9E;AAYA,SAASC,EAAqB,GAA8B;CAC1D,IAAMC,IAAWJ,EAAwBK,CAAO,GAC1CC,IAAoB,CAAC;CAE3B,KAAK,IAAM,CAACC,GAAMC,MAAgB,OAAO,QAAQT,CAAyB,GAAG;EAE3E,IAAMU,IAAS,OAAO,kBAAkBF,EAAK,wBAAwB,GAAG,GACpEL;EACJ,QAAQ,IAAIO,EAAG,KAAKL,CAAQ,OAAO,OAAM;GACvC,IAAMM,IAASR,EAAE,OAEXS,IAASP,EAAS,MAAM,KAAK,IAAI,GAAGM,IAAS,EAAE,GAAGA,CAAM;GAC9D,IAAIF,EAAY,KAAKG,CAAM,GAAG;GAI9B,IAAMC,IAAcP,EAAQ,MAAM,GAAGK,CAAM,CAAC,CAAC,MAAM,IAAI,GACjDG,IAAOD,EAAY,QACnBE,IAAYF,EAAY,GAAG,EAAE,CAAC,EAAE,UAAU,GAE1CG,KADUV,EAAQ,MAAM,IAAI,CAAC,CAACQ,IAAO,MAAM,GAAA,CAC7B,MAAM,KAAK,IAAI,GAAGC,IAAY,EAAE,GAAGA,IAAYP,EAAK,SAAS,EAAE,CAAC,CAAC,KAAK;GAE1F,EAAK,KAAK;IAAE,QAAQA;IAAM;IAAQ;IAAM,SAASQ;GAAI,CAAC;EACxD;CACF;CAEA,OAAOT;AACT;AAEA,IAAMU,IAAqB;CACzB;CACA;CACA;CACA;AACF,GACMC,IAAerB,EAAK,QAAQsB,EAAc,YAAY,GAAG,CAAC,GAC1DC,IAAoBvB,EAAK,KAAKqB,GAAc,yBAAyB,GACrEG,IAAkBxB,EAAK,KAAKqB,GAAc,uBAAuB,GACjEI,IAAmBzB,EAAK,KAAKqB,GAAc,wBAAwB,GAGnEK,IAAqC;CACzC;CACA;CACA;CACA;CACA;AACF,GAQMC,IAAwB,CAC5B,6DACA,yGACF,GASMC,IAAiC;CACrC;CACA;CACA;CACA;CACA;CACA;AACF,GAGMC,IAAwB,CAAC,WAAW,GAEpCC,IAA4B;CAChC,8BAA8B;CAC9B,gCAAgC;CAChC,gCAAgC;AAClC;AAEA,SAASC,EACP,GAC+B;CAC/B,IAAIC,MAAW,IAAO,OAAO;CAC7B,IAAMC,IAAY,OAAOD,KAAW,YAAYA,IAASA,IAAS,CAAC;CACnE,OAAO;EACL,8BAA8BC,EAAU,QAAQH,EAA0B;EAC1E,gCAAgCG,EAAU,QAAQH,EAA0B;EAC5E,gCAAgCG,EAAU,QAAQH,EAA0B;CAC9E;AACF;AAEA,SAASI,EACP,GACA,GACM;CACN,EAAO,YAAY,KAAK,GAAM,GAAK,MAAS;EAC1C,IAAMC,UAAc;GAClB,KAAK,IAAM,CAACC,GAAKC,MAAU,OAAO,QAAQC,CAAO,GAC/C,AAAKC,EAAI,UAAUH,CAAG,KACpBG,EAAI,UAAUH,GAAKC,CAAK;EAG9B,GACMG,IAAoBD,EAAI,UAAU,KAAKA,CAAG;EAMhD,AALA,EAAI,cAAc,GAAGE,OACnBN,EAAM,GACCK,EAAkB,GAAGC,CAAI,KAElCN,EAAM,GACNO,EAAK;CACP,CAAC;AACH;AAIA,SAASC,EACP,GACA,GACA,GACA,GACM;CACN,IAAI,CAAC5C,EAAG,WAAW6C,CAAM,GAAG;CAE5B,IAAMC,IAAYC,EAAY,WAAW,GAAG,IACxCA,EAAY,QAAQ,KAAK,GAAG,IAC5BA;CACJ,KAAK,IAAMC,KAAShD,EAAG,YAAY6C,CAAM,GACvC,CAAKG,EAAM,WAAW,GAAGF,EAAU,EAAE,KAAME,EAAM,WAAW,GAAGD,EAAY,EAAE,MAC7EE,EAAW,KAAKhD,EAAK,KAAK4C,GAAQG,GAAO,gBAAgBD,KAAeG,CAAY,CAAC;AAEzF;AAGA,SAASC,EAAqB,GAAqB,GAAuB;CAExE,QADmBhD,EAAcF,EAAK,KAAKmD,GAAM,cAAc,CAAC,CAAC,CAAC,QAAQ,MAAML,CAAW,KAAK,CAAC,EAAA,CAC/E,MAAM,MAAQ/C,EAAG,WAAWC,EAAK,KAAKoD,GAAKN,GAAa,cAAc,CAAC,CAAC;AAC5F;AAEA,SAASO,EAAmB,GAAqB,GAA0C;CACzF,IAAML,IAAuB,CAAC,GACxBM,IAAUtD,EAAK,QAAQqB,GAAc,IAAI;CAE/C,IAAI;EACF,IAAMkC,IAAUtD,EAAK,QAAQ,GAAG6C,EAAY,cAAc;EAC1D,EAAW,KAAK9C,EAAK,KAAKA,EAAK,QAAQuD,CAAO,GAAGN,CAAY,CAAC;CAChE,QAAQ;EAGN,IAAI;GACF,IAAMF,IAAQ9C,EAAK,QAAQ6C,CAAW,GAClCM,IAAMpD,EAAK,QAAQ+C,CAAK;GAC5B,KAAK,IAAIS,IAAI,GAAGA,IAAI,GAAG,KAAK;IAC1B,IAAMC,IAAczD,EAAK,KAAKoD,GAAK,cAAc;IACjD,IAAIrD,EAAG,WAAW0D,CAAW,GAC3B,IAAI;KAEF,IADgB,KAAK,MAAM1D,EAAG,aAAa0D,GAAa,MAAM,CAAC,CAAC,CAAC,SACjDX,GAAa;MAC3B,EAAW,KAAK9C,EAAK,KAAKoD,GAAKH,CAAY,CAAC;MAC5C;KACF;IACF,QAAQ,CAER;IAEF,IAAMS,IAAS1D,EAAK,QAAQoD,CAAG;IAC/B,IAAIM,MAAWN,GAAK;IACpB,IAAMM;GACR;EACF,QAAQ,CAER;CACF;CAGA,EAAW,KAAK1D,EAAK,KAAKsD,GAAS,gBAAgBR,GAAaG,CAAY,CAAC;CAE7E,IAAMU,IAAiB3D,EAAK,KAAK,QAAQ,IAAI,GAAG,cAAc;CAS9D,AARAgD,EAAW,KAAKhD,EAAK,KAAK2D,GAAgBb,GAAaG,CAAY,CAAC,GAEpEN,EACE3C,EAAK,KAAK2D,GAAgB,MAAM,GAChCb,GACAG,GACAD,CACF,GACAL,EACE3C,EAAK,KAAKsD,GAAS,gBAAgB,MAAM,GACzCR,GACAG,GACAD,CACF;CACA,IAAMY,IAAiBC,EAAuBP,CAAO;CACrD,AAAIM,KACFjB,EACE3C,EAAK,KAAK4D,GAAgB,gBAAgB,MAAM,GAChDd,GACAG,GACAD,CACF;CAGF,KAAK,IAAMc,KAAad,GACtB,IAAIjD,EAAG,WAAW+D,CAAS,GAAG,OAAOA;AAGzC;AAGA,SAASD,EAAuB,GAAsC;CACpE,IAAIT,IAAMpD,EAAK,QAAQ+D,CAAQ;CAC/B,KAAK,IAAIP,IAAI,GAAGA,IAAI,GAAG,KAAK;EAC1B,IAAIzD,EAAG,WAAWC,EAAK,KAAKoD,GAAK,gBAAgB,MAAM,CAAC,GAAG,OAAOA;EAClE,IAAMM,IAAS1D,EAAK,QAAQoD,CAAG;EAC/B,IAAIM,MAAWN,GAAK;EACpB,IAAMM;CACR;AAEF;AAEA,SAASM,EAAkB,GAA0B,GAA2B;CAC9E,IAAMC,IAAQjE,EAAK,QAAQkE,CAAQ;CACnC,OAAOC,EAAM,MAAM,MAAQ;EACzB,IAAMT,IAAS1D,EAAK,QAAQ,OAAOoE,CAAG,CAAC;EACvC,OACEH,MAAUP,KACVO,EAAM,WAAWP,EAAO,SAAS1D,EAAK,GAAG,IAAI0D,IAASA,IAAS1D,EAAK,GAAG;CAE3E,CAAC;AACH;AAEA,SAASqE,EAAkB,GAAmB;CAC5C,IAAI;EACF,OAAOtE,EAAG,aAAauE,CAAC;CAC1B,QAAQ;EACN,OAAOtE,EAAK,QAAQsE,CAAC;CACvB;AACF;AAQA,SAASC,IAAyC;CAChD,IAAMC,oBAAQ,IAAI,IAAY,GACxBC,KAAO,MAAe;EAC1B,AAAKH,KACLE,EAAM,IAAIH,EAAkBC,CAAC,CAAC;CAChC,GAEII;CACJ,IAAI;EACF,IAAY1E,EAAK,QAAQC,EAAK,QAAQ,gCAAgC,CAAC;CACzE,QAAQ;EACN,IAAYD,EAAK,QAAQqB,GAAc,IAAI;CAC7C;CACA,EAAIqD,CAAS;CAEb,IAAMd,IAAiBC,EAAuBa,CAAS;CACvD,AAAId,KAAgBa,EAAIb,CAAc;CAEtC,KAAK,IAAMe,KAAO,CAAC,WAAW,yBAAyB,GAAY;EACjE,IAAMpB,IAAUF,EAAmBsB,GAAK,cAAc;EACtD,AAAIpB,KAASkB,EAAIzE,EAAK,QAAQuD,CAAO,CAAC;CACxC;CAEA,OAAO,CAAC,GAAGiB,CAAK;AAClB;AAEA,SAASI,EAAuB,GAA2B;CACzD,IAAMC,IAAkB,CAAC;CACzB,KAAK,IAAMzB,KAAOmB,EAA6B,GAC7C,AAAIP,EAAkBG,GAAOf,CAAG,MAChCe,EAAM,KAAKf,CAAG,GACdyB,EAAM,KAAKzB,CAAG;CAEhB,OAAOyB;AACT;AAEA,SAASC,EACP,GACc;CAQd,OAPKC,IACD,MAAM,QAAQA,CAAK,IACdA,EACJ,QAAQ,MAA+B,CAAC,CAAChC,KAAS,CAAC,CAAEA,EAAqB,WAAW,CAAC,CACtF,KAAK,OAAW;EAAE,MAAMA,EAAM;EAAM,aAAaA,EAAM;CAAY,EAAE,IAGnE,OAAO,QAAQgC,CAAK,CAAC,CAAC,KAAK,CAACC,GAAMC,QAAkB;EACzD;EACA,aAAa,OAAOA,CAAW;CACjC,EAAE,IAViB,CAAC;AAWtB;AAEA,SAASC,EAAkB,GAAwB,GAAuC;CACxF,IAAMC,IAAS,CAAC,GAAGC,CAAQ,GACrBC,KAAS,MACb,OAAOL,KAAS,WAAW,KAAKA,MAAS,KAAKA,EAAK,SAAS,KACxDM,IAAO,IAAI,IAAIH,EAAO,KAAK,MAAUE,EAAMtC,EAAM,IAAI,CAAC,CAAC;CAE7D,KAAK,IAAMA,KAASwC,GAAW;EAC7B,IAAMnD,IAAMiD,EAAMtC,EAAM,IAAI;EAC5B,AAAIuC,EAAK,IAAIlD,CAAG,MAChBkD,EAAK,IAAIlD,CAAG,GACZ+C,EAAO,KAAKpC,CAAK;CACnB;CAEA,OAAOoC;AACT;AAGA,IAAMK,IAAyB;CAC7B;CACA;CACA;AACF;AAaA,SAASC,EAAwB,GAAwB;CACvD,IAAMC,IAAWzF,EAAK,QAAQ0F,CAAM;CACpC,IAAID,EAAS,SAAS,MAAM,GAAG;EAC7B,IAAME,IAAMF,EAAS,MAAM,GAAG,EAAE,IAAI;EACpC,IAAI3F,EAAG,WAAW6F,CAAG,GAAG,OAAOA;CACjC;CACA,OAAOF;AACT;AAEA,SAASG,IAGP;CACA,IAAMrB,IAA+B,CAAC,GAChCsB,IAAuB,CAAC;CAC9B,KAAK,IAAMC,KAAMP,GACf,IAAI;EACF,IAAMQ,IAAMP,EAAwBM,CAAE;EACtC,AAAIA,EAAG,SAAS,SAAS,IAAG,EAAM,SAASC,IAClCD,EAAG,SAAS,SAAS,IAAG,EAAM,SAASC,IACvCD,EAAG,SAAS,UAAU,MAAG,EAAM,UAAUC;CACpD,QAAQ;EACN,EAAW,KAAKD,CAAE;CACpB;CAEF,OAAO;EAAE;EAAO;CAAW;AAC7B;AAGA,SAASE,EACP,GACA,GACe;CACf,IAAIvD,IAAOrC,GACP6F,IAAU,IACRC,IAAwC,CAAC;CAO/C,AANI3B,EAAM,UACR2B,EAAa,KAAK,CAAC,2CAA2C3B,EAAM,MAAM,CAAC,GAEzEA,EAAM,UACR2B,EAAa,KAAK,CAAC,2CAA2C3B,EAAM,MAAM,CAAC,GAEzEA,EAAM,WACR2B,EAAa,KAAK,CAAC,4CAA4C3B,EAAM,OAAO,CAAC;CAE/E,KAAK,IAAM,CAAC4B,GAAMJ,MAAQG,GAAc;EACtC,IAAME,IAAa,KAAK,UAAUL,CAAG;EACrC,KAAK,IAAMM,KAAS,CAAC,MAAK,GAAG,GAAY;GACvC,IAAMC,IAAO,GAAGD,IAAQF,IAAOE;GAC/B,AAAK5D,EAAK,SAAS6D,CAAI,MACvB,IAAO7D,EAAK,MAAM6D,CAAI,CAAC,CAAC,KAAKF,CAAU,GACvC,IAAU;EACZ;CACF;CACA,OAAOH,IAAUxD,IAAO;AAC1B;AAQA,SAAS8D,EACP,GACA,GACM;CAcN,AAbIhC,EAAM,UACRiC,EAAa,KACX;EAAE,MAAM;EAA2C,aAAajC,EAAM;CAAO,GAC7E;EAAE,MAAM;EAAY,aAAaA,EAAM;CAAO,GAC9C;EAAE,MAAM;EAAiB,aAAaA,EAAM;CAAO,CACrD,GAEEA,EAAM,UACRiC,EAAa,KACX;EAAE,MAAM;EAA2C,aAAajC,EAAM;CAAO,GAC7E;EAAE,MAAM;EAAY,aAAaA,EAAM;CAAO,CAChD,GAEEA,EAAM,WACRiC,EAAa,KACX;EAAE,MAAM;EAA4C,aAAajC,EAAM;CAAQ,GAC/E;EAAE,MAAM;EAAa,aAAaA,EAAM;CAAQ,GAChD;EAAE,MAAM;EAAkB,aAAaA,EAAM;CAAQ,CACvD;AAEJ;AAGA,SAASkC,EAA4B,GAAsD;CACzF,IAAM3B,IAAgC,CAAC;CAevC,OAdIP,EAAM,WACR,EAAM,6CAA6CA,EAAM,QACzD,EAAM,SAASA,EAAM,QACrB,EAAM,iBAAiBA,EAAM,SAE3BA,EAAM,WACR,EAAM,6CAA6CA,EAAM,QACzD,EAAM,SAASA,EAAM,SAEnBA,EAAM,YACR,EAAM,8CAA8CA,EAAM,SAC1D,EAAM,UAAUA,EAAM,SACtB,EAAM,kBAAkBA,EAAM,UAEzBO;AACT;AAEA,IAAM4B,oBAAkC,IAAI,IAAI;CAC9C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAMD,SAASC,EACP,GACA,GACc;CACd,IAAMC,IAA0B,CAAC;CAEjC,IADAL,EAA2BK,GAAWrC,CAAK,GACvCqC,EAAU,WAAW,GAAG,OAAOzB;CAEnC,IAAM0B,IAAW1B,EAAS,QAAQ,MAC5B,OAAOrC,EAAM,QAAS,YACnB,CAAC4D,EAAgC,IAAI5D,EAAM,IAAI,CACvD;CACD,OAAO,CAAC,GAAG8D,GAAW,GAAGC,CAAQ;AACnC;AAEA,SAASC,EAAgC,GAAkC;CACzE,IAAMC,IAAsB3D,EAC1B,qBACA,wBACF;CACA,AAAI2D,KACFP,EAAa,KAAK;EAChB,MAAM;EACN,aAAaO;CACf,CAAC;CAGH,IAAMC,IAAiB5D,EAAmB,eAAe,eAAe,GAClE6D,IAAgB7D,EAAmB,eAAe,cAAc;CAItE,AAHI4D,KACFR,EAAa,KAAK;EAAE,MAAM;EAAkB,aAAaQ;CAAe,CAAC,GAEvEC,KACFT,EAAa,KAAK;EAAE,MAAM;EAAwB,aAAaS;CAAc,CAAC;CAGhF,IAAMC,IAAgB9D,EAAmB,cAAc,eAAe;CAKtE,AAJI8D,KACFV,EAAa,KAAK;EAAE,MAAM;EAAiB,aAAaU;CAAc,CAAC,GAGrEpH,EAAG,WAAWyB,CAAe,KAG/BiF,EAAa,KAAK;EAAE,MAAM;EAAW,aAAajF;CAAgB,CAAC;CAGrE,IAAM4F,IAAoB/D,EAAmB,SAAS,gBAAgB;CAStE,AARI+D,KACFX,EAAa,KAAK;EAChB,MAAM;EACN,aAAaW;CACf,CAAC,GAICrH,EAAG,WAAW0B,CAAgB,KAChCgF,EAAa,KACX;EAAE,MAAM;EAAY,aAAahF;CAAiB,GAClD;EAAE,MAAM;EAAiB,aAAaA;CAAiB,CACzD;AAEJ;AAGA,SAAS4F,IAAuD;CAC9D,IAAMD,IAAoB/D,EAAmB,SAAS,gBAAgB;CACtE,OAAO+D,IAAoB,EAAE,wBAAwBA,EAAkB,IAAI,CAAC;AAC9E;AAGA,SAASE,IAAwD;CAE/D,OADKvH,EAAG,WAAW0B,CAAgB,IAC5B;EACL,QAAQA;EACR,eAAeA;CACjB,IAJ6C,CAAC;AAKhD;AAcA,SAAS8F,EACP,GACA,GAIuC;CACvC,IAAMC,IAAS;EACb,GAAGpC,GAAU,gBAAgB;EAC7B,GAAGqC,EAAM;CACX,GACM1C,IAAQ0C,EAAM,SAAS,CAAC;CAE9B,OAAO;EACL,GAAI,OAAO,KAAKD,CAAM,CAAC,CAAC,SAAS,IAAI,EAAE,WAAW,EAAE,UAAO,EAAE,IAAI,CAAC;EAClE,GAAI,OAAO,KAAKzC,CAAK,CAAC,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,SAAM,EAAE,IAAI,CAAC;CAChE;AACF;AAqBA,SAAgB2C,EAAe,IAAiC,CAAC,GAAa;CAC5E,IAAM,EACJ,eAAYtG,GACZ,cAAW,IACX,WAAQ,IACR,0BAAuB,IACvB,kBAAkBuG,MAChBC,GAEEC,IAAmB9F,EAAwB4F,CAAsB,GACnEG,IAAc,cAEZC,KAAO,GAAGtF,MAAoB;EAClC,AAAIuF,KAAO,QAAQ,IAAI,sBAAsB,GAAGvF,CAAI;CACtD,GAEM,EAAE,OAAOwF,GAAmB,YAAYC,MAC5CrC,EAA6B,GACzBsC,IAAuBzB,EAA4BuB,CAAiB;CAE1E,AAAIG,KAAwBF,EAAwB,SAAS,IAC3D,QAAQ,KACN,kGACEA,EAAwB,KAAK,MAAO,OAAOnC,GAAI,CAAC,CAAC,KAAK,IAAI,IAC1D,gJACJ,IACSmC,EAAwB,WAAW,KAC5CH,EAAI,6DAA6D;CAMnE,IAAMM,IAAuB;EAC3B,MAAM;EACN,SAAS;EAET,eAAe,GAAgB;GAC7B,IAAMC,IAAkB1D,EAAuB2D,EAAe,OAAO,GAAG,KAAK;GAC7E,AAAID,EAAgB,SAAS,KAC3BP,EACE,mEACAO,CACF;EAEJ;EAEA,OAAO,GAAY,GAAK;GACtB,AAAIE,GAAK,SACP,IAAcA,EAAI;GAEpB,IAAM/B,IAA6B,CAAC;GACpC,KAAK,IAAMgC,KAAOC,GAAW;IAE3B,IAAMC,IADaF,EAAI,SAAS,UACjB,IAAa,yBAAyB;IACrD,EAAa,KAAK;KAAE,MAAMA;KAAK,aAAaE;IAAO,CAAC;GACtD;GAEA,IAAMC,IAAkBvF,EAAmB,iBAAiB,2BAA2B;GACvF,AAAIuF,KACFnC,EAAa,KACX;IAAE,MAAM;IAAiB,aAAamC;GAAgB,GACtD;IAAE,MAAM;IAA2B,aAAaA;GAAgB,GAChE;IAAE,MAAM;IAA0B,aAAaA;GAAgB,CACjE;GAGF,IAAMC,IAAgBxF,EAAmB,WAAW,uBAAuB;GAU3E,AATIwF,KACFpC,EAAa,KACX;IAAE,MAAM;IAAa,aAAalF;GAAkB,GACpD;IAAE,MAAM;IAA6B,aAAaA;GAAkB,GACpE;IAAE,MAAM;IAAuC,aAAasH;GAAc,CAC5E,GAGF9B,EAAgCN,CAAY,GAC5CD,EAA2BC,GAAcwB,CAAiB;GAE1D,IAAMa,IAAkBC,EAAW,WAAW,CAAC,GACzCC,IAAc9D,EAClBJ,EAAsBgE,EAAgB,KAAK,GAC3CrC,CACF,GAEMwC,IAA0B;IAC9B;IACA;IACA,GAAGvH;GACL,GACMwH,IAAUlJ,EAAK,QAAQ+I,EAAW,QAAQ,QAAQ,IAAI,CAAC,GACvDI,IAA6B,CACjC,GAAGF,EAAwB,QAAQ,MAAQ,CAAC,CAAC5F,EAAmB+F,GAAK,cAAc,CAAC,GACpF,GAAGxH,EAA+B,QAAQ,MAAQsB,EAAqBkG,GAAKF,CAAO,CAAC,CACtF,GAEMG,IAAmBN,EAAW,cAC9BO,IAAuBjC,EAA6B,GACpDkC,IAAwBjC,EAA8B,GAGtDkC,IAA2C;IAC/C,SAAS;KAEP;KACA;KACA;KAEA;IACF;IACA,SAAS;KACP,GAAGL;KACH,GAAGxH;KACH,GAAGE;IACL;IAGA,iBAAiB0F,EAA0B8B,GAAkB;KAC3D,QAAQ,EAAE,QAAQ,aAAa;KAC/B,OAAO;MACL,GAAGC;MACH,GAAGC;MACH,GAAGpB;KACL;IACF,CAAC;GACH;GAEA,OAAO;IAKL,QAAQ;KACN,GAAIY,EAAW,UAAU,CAAC;KAC1B,QAAQ;KAMR,mBAAmB;KACnB,oBAAoB;IACtB;IACA,SAAS;KACP,GAAGD;KACH,OAAOE;KAQP,QAAQ,MAAM,qBACZ,IAAI,IAAI;MACN,GAAIF,EAAgB,UAAU,CAAC;MAC/B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;KACF,CAAC,CACH;IACF;IACA;IACA,GAAIjB,IACA;KACE,QAAQ;MACN,GAAIkB,EAAW,UAAU,CAAC;MAC1B,SAAS;OACP,GAAIA,EAAW,QAAQ,WAAW,CAAC;OACnC,GAAGlB;MACL;KACF;KACA,SAAS;MACP,GAAIkB,EAAW,WAAW,CAAC;MAC3B,SAAS;OACP,GAAIA,EAAW,SAAS,WAAW,CAAC;OACpC,GAAGlB;MACL;KACF;IACF,IACA,CAAC;GACP;EACF;CACF,GAMM4B,IAAgC;EACpC,MAAM;EACN,SAAS;EAET,OAAO,GAAY;GACjB,IAAI,OAAO,KAAKtB,CAAoB,CAAC,CAAC,WAAW,GAQjD,OAAO;IACL,SAAS,EACP,OAPgBvB,EAClB9B,GAFsBiE,EAAW,WAAW,CAAC,EAAA,CAEP,KAAK,GAC3Cd,CAKS,EACT;IACA,cAAc,EACZ,iBAAiBV,EAA0B,KAAA,GAAW;KAGpD,QAAQ,EAAE,QAAQ,aAAa;KAC/B,OAAOY;IACT,CAAC,EACH;GACF;EACF;EAEA,WAAW;GACT,OAAO;GACP,QAAQ,GAAI;IAgBV,OAdIpC,MAAO,4CACFkC,EAAkB,UAAU,OAEjClC,MAAO,4CACFkC,EAAkB,UAAU,OAEjClC,MAAO,6CACFkC,EAAkB,WAAW,OAGjCG,IACDrC,MAAO,YAAYA,MAAO,gBAAsBkC,EAAkB,UAAU,OAC5ElC,MAAO,WAAiBkC,EAAkB,UAAU,OACpDlC,MAAO,aAAaA,MAAO,iBAAuBkC,EAAkB,WAAW,OAC5E,OAJ2B;GAKpC;EACF;EAEA,WAAW;GAET,OAAO;GACP,QAAQ,GAAM;IACZ,IAAMyB,IAAYzD,EAA+B5F,GAAM4H,CAAiB;IACxE,OAAOyB,IAAY;KAAE,MAAMA;KAAW,KAAK;IAAK,IAAI;GACtD;EACF;CACF,GAqNMC,IAAoB;EAACtB;EAAc;GA/MvC,MAAM;GACN,SAAS;GAET,gBAAgB,GAAQ;IACtB,AAAIR,KAAkB3F,EAA+B0H,GAAQ/B,CAAgB;GAC/E;GAEA,uBAAuB,GAAQ;IAC7B,AAAIA,KAAkB3F,EAA+B0H,GAAQ/B,CAAgB;GAC/E;GAEA,OAAO,GAAY;IACjB,IAAMgC,IAAgBd,EAAW,SAAS,CAAC,GACrCe,IAAmBD,EAAc,mBAAmB,CAAC,GACrDE,IAAwBF,EAAc,iBAAiB,CAAC,GACxDG,IAA2BH,EAA0C,iBAGrEI,IAAmBF,EAAsB,YAAY,CAAC,GAEtDG,IAAU;KAEd,GAAI,MAAM,QAAQJ,EAAiB,OAAO,IACtCA,EAAiB,UACjBA,EAAiB,UACjB,CAACA,EAAiB,OAAO,IACzB,CAAC;KAEL;KACA;IACF,GAGMK,IAAU,CACd,GAAI,MAAM,QAAQL,EAAiB,OAAO,IACtCA,EAAiB,UACjBA,EAAiB,UACjB,CAACA,EAAiB,OAAO,IACzB,CAAC,GAEL,gCACF,GAEMM,IAAkB;KACtB,GAAGN;KACH;KACA;KACA,yBAAyB;IAC3B,GAGMO,IAAmB,CACvB,gBACF,GAEMC,KAAsB,MAC1BD,EAAiB,MACd,MACCtE,MAAOpB,KACPoB,EAAG,WAAW,GAAGpB,EAAI,EAAE,KACvBoB,EAAG,SAAS,IAAIpB,EAAI,EAAE,KACtBoB,EAAG,SAAS,IAAIpB,GAAK,CACzB,GAEI4F,KAAgB,GAAY,GAAmB,MAC/CD,EAAmBvE,CAAE,IAAU,KAC/B,OAAOkE,KAAqB,aAEtBA,EAAyBlE,GAAIyE,GAAUC,KAAc,EAAK,IAEhE,MAAM,QAAQR,CAAgB,IACzBA,EAAiB,MAAM,MAAQS,MAAQ3E,KAAMA,EAAG,WAAW,GAAG2E,EAAI,EAAE,CAAC,IAEvE,IAGHC,IAAgB;KACpB,GAAGZ;KACH,UAAUQ;IACZ,GAEMK,IAAiC;KACrC,GAAGf;KACH;IACF;IACA,AAAIG,IACF,EAAM,kBAAkB;KACtB,GAAGA;KACH,UAAUO;IACZ,IAEA,EAAM,gBAAgBI;IAKxB,IAAME,IAAiB9B,EAAW,UAAU,CAAC;IAM7C,OAAO;KACL;KACA,QAAA;MANA,GAAG8B;MACH,QAAQA,EAAe,UAAU;KAKjC;IACF;GACF;GAEA,eAAe,GAAU,GAAQ;IAC/B,IAAMC,IAAgD,CAAC;IAEvD,KAAK,IAAM,CAACC,GAAWC,MAAU,OAAO,QAAQC,CAAM,GAAG;KACvD,IAAID,EAAM,SAAS,SAAS;KAC5B,IAAMtK,IAAOH,EAAqByK,EAAM,IAAI;KAC5C,KAAK,IAAME,KAAOxK,GAChB,EAAQ,KAAK;MAAE,OAAOqK;MAAW,GAAGG;KAAI,CAAC;IAE7C;IAEA,IAAIJ,EAAQ,WAAW,GAAG;IAE1B,QAAQ,KACN,+IAEF;IACA,IAAMK,oBAAU,IAAI,IAA4B;IAChD,KAAK,IAAMD,KAAOJ,GAAS;KACzB,IAAMM,IAAOD,EAAQ,IAAID,EAAI,KAAK,KAAK,CAAC;KAExC,AADAE,EAAK,KAAKF,CAAG,GACbC,EAAQ,IAAID,EAAI,OAAOE,CAAI;IAC7B;IACA,KAAK,IAAM,CAACC,GAAO3K,MAASyK,GAAS;KACnC,QAAQ,KAAK,KAAKE,GAAO;KACzB,KAAK,IAAMC,KAAK5K,GACd,QAAQ,KAAK,YAAY4K,EAAE,KAAK,MAAMA,EAAE,OAAO,QAAQA,EAAE,SAAS;IAEtE;IACA,QAAQ,KAAK,EAAE;GACjB;GAEA,mBAAmB,GAAM;IAMvB,IAAMC,IAAa;;;iFADI,KAAK,UAAUzD,CAIqC,EAAe;;aAItF0D,IAASC;IAOb,IANA,AAGED,IAHEA,EAAO,SAAS,QAAQ,IACjBA,EAAO,QAAQ,UAAU,WAAWD,GAAY,IAEhDA,IAAaC,GAGpB,CAACE,GAAU,OAAOF;IAEtB,IAAMG,IAAa;IAkBnB,OAJIH,EAAO,SAAS,SAAS,IACpBA,EAAO,QAAQ,WAAW,GAAGG,EAAW,UAAU,IAGpDH,IAASG;GAClB;EA0BuC;EAAY;GAtBnD,MAAM;GACN,SAAS;GACT,UAAU,GAAM,GAAI;IAMlB,IALI,CAAC5F,EAAG,SAAS,mBAAmB,KAAK,CAACA,EAAG,SAAS,aAAa,KAK/D,CADF,iDAAiD,KAAK1F,CACnD,GACH,OAAO;IAET,IAAMuL,IAAcvL,EAAK,QACvB,oDACA,+BACF;IAIA,OAHIuL,MAAgBvL,IACX,OAEF;KAAE,MAAMuL;KAAa,KAAK;IAAK;GACxC;EAGmD;CAAkB;CAEvE,IAAIxD,GAAsB;EACxB,EAAI,4DAA4D;EAEhE,IAAMyD,IAAkBC,EAAc;GAEpC,SAAS,CAAC,UAAW;GAErB,SAAS;IAAC;IAAQ;IAAU;IAAU;IAAkB;GAAM;GAC9D,SAAS;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;GACX;GACA,iBAAiB;EACnB,CAAC;EACD,AAAI,MAAM,QAAQD,CAAe,IAC/BlC,EAAQ,KAAK,GAAGkC,CAAe,IAE/BlC,EAAQ,KAAKkC,CAAe;CAEhC;CAOA,OAJI,OAAO,KAAK1D,CAAoB,CAAC,CAAC,SAAS,KAC7CwB,EAAQ,KAAKF,CAAqB,GAG7BE;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seedprotocol/vite",
3
- "version": "0.7.0",
3
+ "version": "0.7.2-next.593.gd5bd4ea",
4
4
  "description": "Vite plugin for Seed Protocol browser/renderer apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -49,10 +49,15 @@
49
49
  "rimraf": "^6.0.1",
50
50
  "typescript": "~5.9.3",
51
51
  "vite": "^8.0.0",
52
- "vitest": "^3.0.0"
52
+ "vitest": "^4.1.11"
53
53
  },
54
54
  "author": "Keith Axline <keith@journodao.xyz>",
55
55
  "license": "MIT",
56
+ "repository": {
57
+ "type": "git",
58
+ "url": "git+https://github.com/JournoLabs/seed-protocol-sdk.git",
59
+ "directory": "packages/vite"
60
+ },
56
61
  "publishConfig": {
57
62
  "access": "public"
58
63
  }