@vizhub/runtime 3.0.0 → 4.0.0

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,14 +1,14 @@
1
- import { magicSandbox as O } from "magic-sandbox";
2
- import { isVizId as L, getFileText as F, generateVizId as M, fileCollectionToVizFiles as J, vizFilesToFileCollection as D } from "@vizhub/viz-utils";
3
- import { transform as A } from "sucrase";
4
- const ge = () => (Math.random() + "").slice(2);
5
- function W(e = {}) {
1
+ import { magicSandbox as $ } from "magic-sandbox";
2
+ import { isVizId as J, getFileText as L, generateVizId as D, fileCollectionToVizFiles as B, vizFilesToFileCollection as A } from "@vizhub/viz-utils";
3
+ import { transform as q } from "sucrase";
4
+ const Nt = () => (Math.random() + "").slice(2);
5
+ function C(t = {}) {
6
6
  return {
7
7
  name: "sucrase",
8
- transform(t, n) {
8
+ transform(e, n) {
9
9
  if (!n.match(/\.(?:js|[jt]sx)$/))
10
10
  return null;
11
- const r = A(t, {
11
+ const r = q(e, {
12
12
  transforms: ["jsx", "typescript"],
13
13
  // For source maps
14
14
  filePath: n,
@@ -16,7 +16,7 @@ function W(e = {}) {
16
16
  compiledFilename: "bundle.js"
17
17
  },
18
18
  production: !0,
19
- ...e
19
+ ...t
20
20
  });
21
21
  return {
22
22
  code: r.code,
@@ -25,45 +25,45 @@ function W(e = {}) {
25
25
  }
26
26
  };
27
27
  }
28
- const $ = {
28
+ const M = {
29
29
  dependencies: {},
30
30
  vizhub: {},
31
31
  license: "MIT"
32
- }, B = !1, S = (e) => {
33
- const t = e["package.json"];
32
+ }, _ = !1, S = (t) => {
33
+ const e = t["package.json"];
34
34
  try {
35
- const n = t ? JSON.parse(t) : $;
36
- return B && console.log(
35
+ const n = e ? JSON.parse(e) : M;
36
+ return _ && console.log(
37
37
  "[packageJSON] pkg:",
38
38
  JSON.stringify(n, null, 2)
39
39
  ), n;
40
40
  } catch {
41
- return $;
41
+ return M;
42
42
  }
43
- }, k = (e) => S(e).dependencies || {}, P = (e) => (S(e).vizhub || {}).libraries || {}, U = ({ name: e, version: t }, n, r = "jsdelivr") => {
44
- const o = n[e] && n[e].path || "";
45
- return r === "jsdelivr" ? `https://cdn.jsdelivr.net/npm/${e}@${t}${o}` : `https://unpkg.com/${e}@${t}${o}`;
46
- }, q = (e) => {
43
+ }, R = (t) => S(t).dependencies || {}, T = (t) => (S(t).vizhub || {}).libraries || {}, F = ({ name: t, version: e }, n, r = "jsdelivr") => {
44
+ const o = n[t] && n[t].path || "";
45
+ return r === "jsdelivr" ? `https://cdn.jsdelivr.net/npm/${t}@${e}${o}` : `https://unpkg.com/${t}@${e}${o}`;
46
+ }, G = (t) => {
47
47
  var n;
48
- const t = (n = e == null ? void 0 : e.vizhub) == null ? void 0 : n.libraries;
49
- return t ? Object.entries(t).reduce(
48
+ const e = (n = t == null ? void 0 : t.vizhub) == null ? void 0 : n.libraries;
49
+ return e ? Object.entries(e).reduce(
50
50
  (r, [o, s]) => (s.global && (r[o] = s.global), r),
51
51
  {}
52
52
  ) : {};
53
- }, _ = {
53
+ }, Y = {
54
54
  d3: "d3",
55
55
  react: "React",
56
56
  "react-dom": "ReactDOM"
57
- }, z = (e) => {
58
- const t = q(e);
57
+ }, U = (t) => {
58
+ const e = G(t);
59
59
  return {
60
- ..._,
61
- ...t
60
+ ...Y,
61
+ ...e
62
62
  };
63
- }, x = (e) => {
64
- const [t, ...n] = e.split("/"), r = n.join("/");
65
- return { vizId: t, fileName: r };
66
- }, G = `var EOL = {},
63
+ }, b = (t) => {
64
+ const [e, ...n] = t.split("/"), r = n.join("/");
65
+ return { vizId: e, fileName: r };
66
+ }, H = `var EOL = {},
67
67
  EOF = {},
68
68
  QUOTE = 34,
69
69
  NEWLINE = 10,
@@ -183,34 +183,34 @@ var tsv = dsv(' ');
183
183
 
184
184
  var tsvParse = tsv.parse;
185
185
 
186
- export { csvParse, tsvParse };`, Y = (e) => (
186
+ export { csvParse, tsvParse };`, Q = (t) => (
187
187
  // str.replace(/`/g, '\\`');
188
- e.replace(/\\/g, "\\\\").replace(/`/g, "\\`")
189
- ), Q = () => ({
188
+ t.replace(/\\/g, "\\\\").replace(/`/g, "\\`")
189
+ ), X = () => ({
190
190
  name: "transformDSV",
191
191
  // `id` here is of the form
192
192
  // `{vizId}/{fileName}`
193
- transform: async (e, t) => {
194
- const { fileName: n } = x(t), r = n.endsWith(".csv"), o = n.endsWith(".tsv");
193
+ transform: async (t, e) => {
194
+ const { fileName: n } = b(e), r = n.endsWith(".csv"), o = n.endsWith(".tsv");
195
195
  if (r || o)
196
196
  return {
197
197
  code: `
198
- ${G}
199
- const data = ${r ? "csvParse" : "tsvParse"}(\`${Y(e)}\`);
198
+ ${H}
199
+ const data = ${r ? "csvParse" : "tsvParse"}(\`${Q(t)}\`);
200
200
  export default data;
201
201
  `,
202
202
  map: { mappings: "" }
203
203
  };
204
204
  }
205
- }), H = (e) => {
206
- const t = /^@([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)$/, n = e.match(t);
205
+ }), Z = (t) => {
206
+ const e = /^@([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)$/, n = t.match(e);
207
207
  return n ? {
208
208
  userName: n[1],
209
209
  idOrSlug: n[2]
210
210
  } : null;
211
- }, X = ({
212
- vizId: e,
213
- slugCache: t
211
+ }, K = ({
212
+ vizId: t,
213
+ slugCache: e
214
214
  }) => ({
215
215
  name: "vizResolve",
216
216
  resolveId: async (n, r) => {
@@ -220,31 +220,31 @@ export { csvParse, tsvParse };`, Y = (e) => (
220
220
  const {
221
221
  vizId: i,
222
222
  fileName: a
223
- } = x(r), c = a.split("/").slice(0, -1).join("/"), l = c ? `${c}/${s}` : s;
223
+ } = b(r), c = a.split("/").slice(0, -1).join("/"), l = c ? `${c}/${s}` : s;
224
224
  return `${i}/${l}`;
225
225
  }
226
- return e + "/" + s;
226
+ return t + "/" + s;
227
227
  }
228
- const o = H(n);
228
+ const o = Z(n);
229
229
  if (o) {
230
230
  let s;
231
- if (L(o.idOrSlug))
231
+ if (J(o.idOrSlug))
232
232
  s = o.idOrSlug;
233
233
  else {
234
- if (!t)
234
+ if (!e)
235
235
  throw new Error(
236
236
  "slugCache is required to import by slug in v3 runtime"
237
237
  );
238
- s = await t.get(
238
+ s = await e.get(
239
239
  `${o.userName}/${o.idOrSlug}`
240
240
  );
241
241
  }
242
242
  return s + "/index.js";
243
243
  }
244
244
  }
245
- }), Z = ({
246
- vizCache: e,
247
- trackCSSImport: t,
245
+ }), tt = ({
246
+ vizCache: t,
247
+ trackCSSImport: e,
248
248
  vizId: n,
249
249
  files: r
250
250
  }) => ({
@@ -252,15 +252,15 @@ export { csvParse, tsvParse };`, Y = (e) => (
252
252
  // `id` here is of the form
253
253
  // `{vizId}/{fileName}`
254
254
  load: async (o) => {
255
- const s = x(o), i = s.vizId, a = s.fileName;
255
+ const s = b(o), i = s.vizId, a = s.fileName;
256
256
  if (a.endsWith(".css"))
257
- return t(o), "";
257
+ return e(o), "";
258
258
  let c = null;
259
259
  if (i === n && r)
260
260
  c = r[a] || null;
261
261
  else {
262
- const l = await e.get(i);
263
- c = F(l, a);
262
+ const l = await t.get(i);
263
+ c = L(l, a);
264
264
  }
265
265
  if (c === null)
266
266
  throw new Error(
@@ -268,112 +268,112 @@ export { csvParse, tsvParse };`, Y = (e) => (
268
268
  );
269
269
  return c;
270
270
  }
271
- }), C = /* @__PURE__ */ new Map();
271
+ }), P = /* @__PURE__ */ new Map();
272
272
  let I;
273
- const g = "https://cdn.jsdelivr.net/npm/svelte@4.2.9", xe = `${g}/compiler.cjs`, K = ({
274
- getSvelteCompiler: e
273
+ const x = "https://cdn.jsdelivr.net/npm/svelte@4.2.9", Ct = `${x}/compiler.cjs`, et = ({
274
+ getSvelteCompiler: t
275
275
  }) => ({
276
276
  name: "transformSvelte",
277
- load: async (t) => {
278
- if (!t.startsWith(g))
277
+ load: async (e) => {
278
+ if (!e.startsWith(x))
279
279
  return;
280
- const n = C.get(t);
280
+ const n = P.get(e);
281
281
  if (n) return n;
282
- const r = await fetch(t).then(
282
+ const r = await fetch(e).then(
283
283
  (o) => o.text()
284
284
  );
285
- return C.set(t, r), r;
285
+ return P.set(e, r), r;
286
286
  },
287
287
  // From https://github.com/sveltejs/sites/blob/master/packages/repl/src/lib/workers/bundler/index.js#L255C2-L271C5
288
- resolveId: async (t, n) => {
289
- if (t === "svelte")
290
- return `${g}/src/runtime/index.js`;
291
- if (t.startsWith("svelte/")) {
292
- const r = t.slice(7);
293
- return `${g}/src/runtime/${r}/index.js`;
288
+ resolveId: async (e, n) => {
289
+ if (e === "svelte")
290
+ return `${x}/src/runtime/index.js`;
291
+ if (e.startsWith("svelte/")) {
292
+ const r = e.slice(7);
293
+ return `${x}/src/runtime/${r}/index.js`;
294
294
  }
295
- if (/^https?:/.test(t)) return t;
296
- if (t.startsWith(".") && n && n.startsWith(g)) {
297
- const r = new URL(t, n).href;
298
- return new URL(t, n).href, r;
295
+ if (/^https?:/.test(e)) return e;
296
+ if (e.startsWith(".") && n && n.startsWith(x)) {
297
+ const r = new URL(e, n).href;
298
+ return new URL(e, n).href, r;
299
299
  }
300
300
  },
301
- transform: async (t, n) => {
302
- const { fileName: r } = x(n);
301
+ transform: async (e, n) => {
302
+ const { fileName: r } = b(n);
303
303
  if (r.endsWith(".svelte")) {
304
304
  if (!I) {
305
- if (!e)
305
+ if (!t)
306
306
  throw new Error("Svelte compiler not available");
307
- I = await e();
307
+ I = await t();
308
308
  }
309
- return I(t, {
309
+ return I(e, {
310
310
  filename: r,
311
311
  hydratable: !0
312
312
  }).js;
313
313
  }
314
314
  }
315
- }), ee = async ({
316
- files: e,
317
- rollup: t,
315
+ }), nt = async ({
316
+ files: t,
317
+ rollup: e,
318
318
  enableSourcemap: n = !0,
319
319
  vizCache: r,
320
320
  vizId: o,
321
321
  slugCache: s,
322
322
  getSvelteCompiler: i
323
323
  }) => {
324
- const a = /* @__PURE__ */ new Set(), c = (d) => {
325
- a.add(d);
324
+ const a = /* @__PURE__ */ new Set(), c = (u) => {
325
+ a.add(u);
326
326
  };
327
- if (!e["index.js"])
327
+ if (!t["index.js"])
328
328
  throw new Error("Missing index.js");
329
- const u = {
329
+ const d = {
330
330
  input: "./index.js",
331
331
  plugins: [
332
- ...o ? [X({ vizId: o, slugCache: s })] : [],
333
- Q(),
334
- W(),
335
- K({ getSvelteCompiler: i }),
332
+ ...o ? [K({ vizId: o, slugCache: s })] : [],
333
+ X(),
334
+ C(),
335
+ et({ getSvelteCompiler: i }),
336
336
  ...r ? [
337
- Z({
337
+ tt({
338
338
  vizCache: r,
339
339
  trackCSSImport: c,
340
340
  vizId: o,
341
- files: e
341
+ files: t
342
342
  })
343
343
  ] : []
344
344
  ],
345
- onwarn(d, m) {
346
- d.code !== "UNRESOLVED_IMPORT" && m(d);
345
+ onwarn(u, f) {
346
+ u.code !== "UNRESOLVED_IMPORT" && f(u);
347
347
  }
348
- }, f = {
348
+ }, m = {
349
349
  format: "umd",
350
350
  name: "Viz",
351
351
  sourcemap: !!n,
352
352
  compact: !0
353
- }, v = S(e);
354
- if (v) {
355
- const d = z(v);
356
- d && (u.external = Object.keys(d), f.globals = d);
353
+ }, w = S(t);
354
+ if (w) {
355
+ const u = U(w);
356
+ u && (d.external = Object.keys(u), m.globals = u);
357
357
  }
358
- const E = await t(u), { output: h } = await E.generate(f);
358
+ const y = await e(d), { output: h } = await y.generate(m);
359
359
  return {
360
360
  src: h[0].code,
361
361
  cssFiles: Array.from(a)
362
362
  };
363
363
  };
364
- function te() {
364
+ function rt() {
365
365
  return Math.random().toString().slice(2, 7);
366
366
  }
367
- const ne = ({
368
- cdn: e,
369
- src: t,
367
+ const st = ({
368
+ cdn: t,
369
+ src: e,
370
370
  styles: n
371
371
  }) => {
372
- const o = `viz-container-${te()}`;
372
+ const o = `viz-container-${rt()}`;
373
373
  return `<!DOCTYPE html>
374
374
  <html>
375
375
  <head>
376
- <meta charset="utf-8">${e}${n}
376
+ <meta charset="utf-8">${t}${n}
377
377
  <style>
378
378
  body {
379
379
  margin: 0;
@@ -386,7 +386,7 @@ const ne = ({
386
386
  </head>
387
387
  <body>
388
388
  <div id="${o}"></div>
389
- <script id="injected-script">${t}<\/script>
389
+ <script id="injected-script">${e}<\/script>
390
390
  <script>
391
391
  (() => {
392
392
  let cleanup;
@@ -449,18 +449,18 @@ const ne = ({
449
449
  <\/script>
450
450
  </body>
451
451
  </html>`;
452
- }, re = async ({
453
- files: e,
454
- rollup: t,
452
+ }, ot = async ({
453
+ files: t,
454
+ rollup: e,
455
455
  enableSourcemap: n = !0,
456
456
  vizCache: r,
457
457
  vizId: o,
458
458
  slugCache: s,
459
459
  getSvelteCompiler: i
460
460
  }) => {
461
- const { src: a, cssFiles: c } = await ee({
462
- files: e,
463
- rollup: t,
461
+ const { src: a, cssFiles: c } = await nt({
462
+ files: t,
463
+ rollup: e,
464
464
  enableSourcemap: n,
465
465
  vizCache: r,
466
466
  vizId: o,
@@ -470,55 +470,55 @@ const ne = ({
470
470
  let l = [];
471
471
  if (c.length > 0)
472
472
  for (let h = 0; h < c.length; h++) {
473
- const d = c[h], m = x(d), b = m.vizId, y = m.fileName;
474
- let w = null;
475
- if (b === o && e)
476
- w = e[y] || null;
473
+ const u = c[h], f = b(u), E = f.vizId, j = f.fileName;
474
+ let v = null;
475
+ if (E === o && t)
476
+ v = t[j] || null;
477
477
  else {
478
- const V = await r.get(b);
479
- w = F(V, y);
478
+ const V = await r.get(E);
479
+ v = L(V, j);
480
480
  }
481
- w && l.push(w);
481
+ v && l.push(v);
482
482
  }
483
- const u = l.join(`
484
- `), f = `
485
- <style id="injected-style">${u}</style>`;
486
- let v = "";
487
- const E = Object.entries(
488
- k(e)
483
+ const d = l.join(`
484
+ `), m = `
485
+ <style id="injected-style">${d}</style>`;
486
+ let w = "";
487
+ const y = Object.entries(
488
+ R(t)
489
489
  );
490
- if (E.length > 0) {
491
- const h = P(e);
492
- v = E.map(([d, m], b) => {
493
- const y = U(
494
- { name: d, version: m },
490
+ if (y.length > 0) {
491
+ const h = T(t);
492
+ w = y.map(([u, f], E) => {
493
+ const j = F(
494
+ { name: u, version: f },
495
495
  h
496
496
  );
497
- return `${b > 0 ? " " : `
498
- `}<script src="${y}"><\/script>`;
497
+ return `${E > 0 ? " " : `
498
+ `}<script src="${j}"><\/script>`;
499
499
  }).join("");
500
500
  }
501
501
  return {
502
- html: ne({ cdn: v, src: a, styles: f }),
503
- css: u,
502
+ html: st({ cdn: w, src: a, styles: m }),
503
+ css: d,
504
504
  js: a
505
505
  };
506
- }, se = ({
507
- initialContents: e,
508
- handleCacheMiss: t
506
+ }, it = ({
507
+ initialContents: t,
508
+ handleCacheMiss: e
509
509
  }) => {
510
510
  const n = new Map(
511
- e.map((i) => [i.id, i])
511
+ t.map((i) => [i.id, i])
512
512
  );
513
513
  return { get: async (i) => {
514
514
  const a = n.get(i);
515
515
  if (a !== void 0)
516
516
  return a;
517
- if (!t)
517
+ if (!e)
518
518
  throw new Error(
519
519
  `Unresolved import from vizId ${i}, cache miss handler not provided.`
520
520
  );
521
- const c = await t(i);
521
+ const c = await e(i);
522
522
  if (c)
523
523
  return n.set(i, c), c;
524
524
  throw new Error(
@@ -529,159 +529,281 @@ const ne = ({
529
529
  }, invalidate: (i) => {
530
530
  n.delete(i);
531
531
  } };
532
- }, Ee = ({
533
- initialMappings: e = {},
534
- handleCacheMiss: t
532
+ }, Rt = ({
533
+ initialMappings: t = {},
534
+ handleCacheMiss: e
535
535
  }) => ({ get: async (s) => {
536
- const i = e[s];
536
+ const i = t[s];
537
537
  if (i !== void 0)
538
538
  return i;
539
- if (!t)
539
+ if (!e)
540
540
  throw new Error(
541
541
  `Unresolved slug ${s}, cache miss handler not provided.`
542
542
  );
543
- const a = await t(s);
543
+ const a = await e(s);
544
544
  if (a)
545
- return e[s] = a, a;
545
+ return t[s] = a, a;
546
546
  throw new Error(`Unresolved slug ${s}`);
547
547
  }, set: (s, i) => {
548
- e[s] = i;
548
+ t[s] = i;
549
549
  }, invalidate: (s) => {
550
- delete e[s];
551
- } }), oe = (e, t = "Sample Content for Exporting", n = M()) => ({
550
+ delete t[s];
551
+ } }), ct = (t, e = "Sample Content for Exporting", n = D()) => ({
552
552
  id: n,
553
- files: J(e),
554
- title: t
555
- }), ie = (e) => {
556
- if (Object.keys(e).length === 0)
553
+ files: B(t),
554
+ title: e
555
+ }), at = (t) => {
556
+ if (Object.keys(t).length === 0)
557
557
  return null;
558
- const t = "index.html" in e, n = "index.js" in e, r = "index.jsx" in e;
559
- return t ? e["index.html"].includes('type="module"') ? "v4" : n || r ? "v2" : "v1" : !t && n ? "v3" : null;
560
- }, N = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), ce = (e) => {
561
- const t = e.trim();
562
- return N(t, "html") && N(t, "head") && N(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
563
- }, ae = (e, t) => e.replace(
558
+ const e = "index.html" in t, n = "index.js" in t, r = "index.jsx" in t;
559
+ return e ? t["index.html"].includes('type="module"') ? "v4" : n || r ? "v2" : "v1" : !e && n ? "v3" : null;
560
+ }, O = (t, e) => new RegExp(`<${e}\\b`, "i").test(t) && new RegExp(`</${e}>`, "i").test(t), lt = (t) => {
561
+ const e = t.trim();
562
+ return O(e, "html") && O(e, "head") && O(e, "body") ? e : `<html><head></head><body>${e}</body></html>`;
563
+ }, ut = (t, e) => t.replace(
564
564
  new RegExp(
565
- `<script[^>]*src=["'][^"']*${t.source}[^"']*["'][^>]*>\\s*<\/script>`,
565
+ `<script[^>]*src=["'][^"']*${e.source}[^"']*["'][^>]*>\\s*<\/script>`,
566
566
  "gi"
567
567
  ),
568
568
  ""
569
- ), R = (e, t, n) => e.replace(
570
- new RegExp(t, "i"),
571
- `${n}${t}`
572
- ), le = (e, t) => {
573
- let n = ce(e);
574
- const r = Object.entries(k(t));
569
+ ), W = (t, e, n) => t.replace(
570
+ new RegExp(e, "i"),
571
+ `${n}${e}`
572
+ ), dt = (t, e) => {
573
+ let n = lt(t);
574
+ const r = Object.entries(R(e));
575
575
  if (r.length) {
576
- const s = P(t);
576
+ const s = T(e);
577
577
  r.forEach(([a]) => {
578
- n = ae(n, new RegExp(`${a}@`));
578
+ n = ut(n, new RegExp(`${a}@`));
579
579
  });
580
580
  const i = r.map(
581
- ([a, c]) => U({ name: a, version: c }, s)
581
+ ([a, c]) => F({ name: a, version: c }, s)
582
582
  ).map((a) => `<script src="${a}"><\/script>`).join(`
583
583
  `);
584
- n = R(
584
+ n = W(
585
585
  n,
586
586
  "</head>",
587
587
  i + `
588
588
  `
589
589
  );
590
590
  }
591
- if (t["bundle.js"] !== void 0 || t["index.js"] !== void 0) {
591
+ if (e["bundle.js"] !== void 0 || e["index.js"] !== void 0) {
592
592
  const s = '<script src="bundle.js"><\/script>', i = /<script\b[^>]*\bsrc=["']bundle\.js["'][^>]*>\s*<\/script>/gi, a = [...n.matchAll(i)];
593
593
  a.length === 1 && (() => {
594
594
  const l = a[0].index ?? -1;
595
595
  if (l === -1) return !1;
596
- const u = n.search(/<body\b[^>]*>/i), f = n.search(/<\/body>/i);
597
- return u !== -1 && f !== -1 && l > u && l < f;
598
- })() || (n = n.replace(i, ""), n = R(n, "</body>", s));
596
+ const d = n.search(/<body\b[^>]*>/i), m = n.search(/<\/body>/i);
597
+ return d !== -1 && m !== -1 && l > d && l < m;
598
+ })() || (n = n.replace(i, ""), n = W(n, "</body>", s));
599
599
  }
600
600
  return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
601
- }, de = (e) => {
602
- const t = e["index.html"];
603
- return !t && !e["index.js"] && !e["bundle.js"] ? "" : le(t || "<!DOCTYPE html><html><head></head><body></body></html>", e);
604
- }, p = "\0virtual:", T = (e) => {
605
- let t = e.replace(/^\.\//, "");
606
- return t = t.replace(/\/+/g, "/"), t = t.replace(/\/$/, ""), t;
607
- }, ue = (e, t) => {
608
- const n = e.includes("/") ? e.slice(0, e.lastIndexOf("/")) : "", r = t.split("/"), o = n ? n.split("/") : [];
601
+ }, pt = (t) => {
602
+ const e = t["index.html"];
603
+ return !e && !t["index.js"] && !t["bundle.js"] ? "" : dt(e || "<!DOCTYPE html><html><head></head><body></body></html>", t);
604
+ }, p = "\0virtual:", k = (t) => {
605
+ let e = t.replace(/^\.\//, "");
606
+ return e = e.replace(/\/+/g, "/"), e = e.replace(/\/$/, ""), e;
607
+ }, mt = (t, e) => {
608
+ const n = t.includes("/") ? t.slice(0, t.lastIndexOf("/")) : "", r = e.split("/"), o = n ? n.split("/") : [];
609
609
  for (const s of r)
610
610
  s === ".." ? o.pop() : s !== "." && s !== "" && o.push(s);
611
611
  return o.join("/");
612
- }, pe = (e) => ({
612
+ }, z = (t) => ({
613
613
  name: "virtual-file-system",
614
- resolveId(t, n) {
614
+ resolveId(e, n) {
615
615
  const r = n != null && n.startsWith(
616
616
  p
617
617
  ) ? n.slice(p.length) : n;
618
- if (t.startsWith("./") || t.startsWith("../")) {
619
- const s = T(r ? ue(r, t) : t);
620
- if (e[s])
618
+ if (e.startsWith("./") || e.startsWith("../")) {
619
+ const s = k(r ? mt(r, e) : e);
620
+ if (t[s])
621
621
  return p + s;
622
622
  const i = [".js", ".jsx", ".ts", ".tsx"];
623
623
  for (const a of i) {
624
624
  const c = s + a;
625
- if (e[c])
625
+ if (t[c])
626
626
  return p + c;
627
627
  }
628
628
  }
629
- if (e[t])
630
- return p + t;
629
+ if (t[e])
630
+ return p + e;
631
631
  const o = [".js", ".jsx", ".ts", ".tsx"];
632
632
  for (const s of o) {
633
- const i = t + s;
634
- if (e[i])
633
+ const i = e + s;
634
+ if (t[i])
635
635
  return p + i;
636
636
  }
637
637
  return null;
638
638
  },
639
- load(t) {
640
- if (t.startsWith(p)) {
641
- const n = t.slice(p.length);
642
- if (e[n])
643
- return e[n];
639
+ load(e) {
640
+ if (e.startsWith(p)) {
641
+ const n = e.slice(p.length);
642
+ if (t[n])
643
+ return t[n];
644
644
  }
645
645
  return null;
646
646
  }
647
- }), fe = async ({
648
- files: e,
649
- rollup: t,
647
+ }), ht = async ({
648
+ files: t,
649
+ rollup: e,
650
650
  enableSourcemap: n = !0
651
651
  }) => {
652
- if (!e["index.js"])
652
+ if (!t["index.js"])
653
653
  throw new Error("Missing index.js");
654
654
  const o = {
655
655
  input: "./index.js",
656
- plugins: [pe(e), W()],
657
- onwarn(l, u) {
658
- l.code !== "UNRESOLVED_IMPORT" && u(l);
656
+ plugins: [z(t), C()],
657
+ onwarn(l, d) {
658
+ l.code !== "UNRESOLVED_IMPORT" && d(l);
659
659
  }
660
660
  }, s = {
661
661
  format: "iife",
662
662
  sourcemap: n
663
- }, i = S(e);
663
+ }, i = S(t);
664
664
  if (i) {
665
- const l = z(i);
665
+ const l = U(i);
666
666
  l && (o.external = Object.keys(l), s.globals = l);
667
667
  }
668
- const a = await t(o), { output: c } = await a.generate(s);
668
+ const a = await e(o), { output: c } = await a.generate(s);
669
669
  return c[0].code;
670
- }, he = async ({
671
- files: e,
672
- rollup: t,
670
+ }, ft = async ({
671
+ files: t,
672
+ rollup: e,
673
673
  enableSourcemap: n
674
674
  }) => ({
675
- ...e,
676
- "bundle.js": await fe({
677
- files: e,
678
- rollup: t,
675
+ ...t,
676
+ "bundle.js": await ht({
677
+ files: t,
678
+ rollup: e,
679
679
  enableSourcemap: n
680
680
  }),
681
- "index.html": de(e)
682
- }), j = !1, be = async ({
681
+ "index.html": pt(t)
682
+ }), wt = (t) => {
683
+ const e = [], n = /<script\b([^>]*)>[\s\S]*?<\/script>/gi;
684
+ let r;
685
+ for (; (r = n.exec(t)) !== null; ) {
686
+ const o = r[1];
687
+ if (!/\btype\s*=\s*["']module["']/i.test(o))
688
+ continue;
689
+ const s = o.match(
690
+ /\bsrc\s*=\s*["']([^"']+)["']/i
691
+ );
692
+ s && e.push(s[1]);
693
+ }
694
+ return e;
695
+ }, vt = () => ({
696
+ name: "catch-all-prevent-fs",
697
+ resolveId(t, e) {
698
+ return { id: t, external: !0 };
699
+ }
700
+ }), gt = async ({
701
+ entryPoint: t,
683
702
  files: e,
684
- rollup: t,
703
+ rollup: n,
704
+ enableSourcemap: r = !0
705
+ }) => {
706
+ const s = {
707
+ input: t.startsWith("./") ? t : `./${t}`,
708
+ plugins: [
709
+ z(e),
710
+ C({
711
+ // Enable JSX runtime
712
+ // so we don't need to import React
713
+ // in every file that uses JSX
714
+ jsxRuntime: "automatic"
715
+ }),
716
+ vt()
717
+ ],
718
+ // external: (source: string) => {
719
+ // DEBUG && console.log("external", source);
720
+ // // Handle strings resolved by `virtualFileSystem`.
721
+ // const isVirtualFile = source.startsWith("./");
722
+ // // Handle external dependencies, e.g. from import maps.
723
+ // const isLibrary = !source.startsWith("./");
724
+ // const isExternal = !isVirtualFile || isLibrary;
725
+ // DEBUG && console.log("isExternal", isExternal);
726
+ // return isExternal;
727
+ // },
728
+ onwarn(c, l) {
729
+ }
730
+ }, i = await n(s), { output: a } = await i.generate({
731
+ format: "es",
732
+ sourcemap: r
733
+ });
734
+ return a[0].code;
735
+ }, N = (t, e) => new RegExp(`<${e}\\b`, "i").test(t) && new RegExp(`</${e}>`, "i").test(t), xt = (t) => {
736
+ const e = t.trim();
737
+ return N(e, "html") && N(e, "head") && N(e, "body") ? e : `<html><head></head><body>${e}</body></html>`;
738
+ }, bt = (t) => t.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), yt = (t, e, n) => t.replace(
739
+ new RegExp(e, "i"),
740
+ `${n}${e}`
741
+ ), Et = (t) => {
742
+ const e = R(t);
743
+ if (Object.keys(e).length === 0) return null;
744
+ const n = T(t), r = {};
745
+ for (const [o, s] of Object.entries(e))
746
+ r[o] = F(
747
+ { name: o, version: s },
748
+ n
749
+ );
750
+ return JSON.stringify({ imports: r }, null, 2);
751
+ }, jt = (t, e) => {
752
+ if (!t["index.html"]) return "";
753
+ let n = xt(t["index.html"]);
754
+ e.forEach((o, s) => {
755
+ const i = new RegExp(
756
+ `<script\\b[^>]*\\bsrc=["']${bt(s)}["'][^>]*>[^<]*<\/script>`,
757
+ "gi"
758
+ );
759
+ n = n.replace(
760
+ i,
761
+ `<script type="module">
762
+ ${o}
763
+ <\/script>`
764
+ );
765
+ });
766
+ const r = Et(t);
767
+ if (r && !/<script\b[^>]*type=["']importmap["'][^>]*>/i.test(
768
+ n
769
+ )) {
770
+ const s = `<script type="importmap">
771
+ ${r}
772
+ <\/script>
773
+ `;
774
+ n = yt(
775
+ n,
776
+ "</head>",
777
+ s
778
+ );
779
+ }
780
+ return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
781
+ }, St = async ({
782
+ files: t,
783
+ rollup: e,
784
+ enableSourcemap: n = !0
785
+ }) => {
786
+ const r = t["index.html"] || "", o = wt(r);
787
+ if (o.length === 0)
788
+ return t;
789
+ const s = /* @__PURE__ */ new Map();
790
+ for (const a of o) {
791
+ const c = await gt({
792
+ entryPoint: a,
793
+ files: t,
794
+ rollup: e,
795
+ enableSourcemap: n
796
+ });
797
+ s.set(a, c);
798
+ }
799
+ const i = jt(t, s);
800
+ return {
801
+ ...t,
802
+ "index.html": i
803
+ };
804
+ }, g = !1, Tt = async ({
805
+ files: t,
806
+ rollup: e,
685
807
  enableSourcemap: n = !0,
686
808
  vizCache: r,
687
809
  vizId: o,
@@ -690,45 +812,45 @@ const ne = ({
690
812
  }) => {
691
813
  var a;
692
814
  try {
693
- if (j && console.log(
815
+ if (g && console.log(
694
816
  "[build] files:",
695
- e ? JSON.stringify(e).substring(0, 100) : void 0
696
- ), j && console.log("[build] vizCache:", r), j && console.log("[build] vizId:", o), !e && !r)
817
+ t ? JSON.stringify(t).substring(0, 100) : void 0
818
+ ), g && console.log("[build] vizCache:", r), g && console.log("[build] vizId:", o), !t && !r)
697
819
  throw new Error(
698
820
  "Either files or vizCache is required"
699
821
  );
700
- if (!e && r && !o)
822
+ if (!t && r && !o)
701
823
  throw new Error(
702
824
  "vizId is required when using vizCache"
703
825
  );
704
- if (!e && r && o && (e = D(
826
+ if (!t && r && o && (t = A(
705
827
  (a = await r.get(o)) == null ? void 0 : a.files
706
- )), !e)
828
+ )), !t)
707
829
  throw new Error("Upable to extract viz files");
708
- const c = ie(e);
709
- if (j && console.log("[build] version:", c), c === "v1")
830
+ const c = at(t);
831
+ if (g && console.log("[build] version:", c), c === "v1")
710
832
  return {
711
- html: O(e)
833
+ html: $(t)
712
834
  };
713
835
  if (c === "v2") {
714
- if (!t)
836
+ if (!e)
715
837
  throw new Error(
716
838
  "Rollup is required for v2 runtime"
717
839
  );
718
840
  return {
719
- html: O(
720
- await he({ files: e, rollup: t, enableSourcemap: n })
841
+ html: $(
842
+ await ft({ files: t, rollup: e, enableSourcemap: n })
721
843
  )
722
844
  };
723
845
  }
724
846
  if (c === "v3") {
725
- if (!t)
847
+ if (!e)
726
848
  throw new Error(
727
849
  "Rollup is required for v3 runtime"
728
850
  );
729
851
  if (!r && !o) {
730
- const l = oe(e);
731
- o = l.id, r = se({
852
+ const l = ct(t);
853
+ o = l.id, r = it({
732
854
  initialContents: [l],
733
855
  handleCacheMiss: async () => {
734
856
  throw new Error(
@@ -745,15 +867,30 @@ const ne = ({
745
867
  throw new Error(
746
868
  "vizId is required for v3 runtime if vizCache is provided"
747
869
  );
748
- return await re({
749
- files: e,
750
- rollup: t,
870
+ return await ot({
871
+ files: t,
872
+ rollup: e,
751
873
  vizCache: r,
752
874
  vizId: o,
753
875
  slugCache: s,
754
876
  getSvelteCompiler: i
755
877
  });
756
878
  }
879
+ if (c === "v4") {
880
+ if (!e)
881
+ throw new Error(
882
+ "Rollup is required for v4 runtime"
883
+ );
884
+ return g && console.log("[build] v4Build", {
885
+ files: t,
886
+ rollup: e,
887
+ enableSourcemap: n
888
+ }), {
889
+ html: $(
890
+ await St({ files: t, rollup: e, enableSourcemap: n })
891
+ )
892
+ };
893
+ }
757
894
  throw new Error(
758
895
  `Unsupported runtime version: ${c}`
759
896
  );
@@ -765,14 +902,14 @@ const ne = ({
765
902
  }
766
903
  };
767
904
  export {
768
- se as a,
769
- be as b,
770
- ee as c,
771
- ie as d,
772
- Ee as e,
773
- oe as f,
774
- ge as g,
775
- xe as s,
776
- re as v
905
+ it as a,
906
+ Tt as b,
907
+ nt as c,
908
+ at as d,
909
+ Rt as e,
910
+ ct as f,
911
+ Nt as g,
912
+ Ct as s,
913
+ ot as v
777
914
  };
778
- //# sourceMappingURL=build-B2oXi2Mv.js.map
915
+ //# sourceMappingURL=build-H5Rfq113.js.map