@vizhub/runtime 0.4.0 → 0.6.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.
Files changed (69) hide show
  1. package/README.md +33 -21
  2. package/dist/{buildHTML.d.ts → build/build.d.ts} +5 -6
  3. package/dist/build/build.d.ts.map +1 -0
  4. package/dist/{determineRuntimeVersion.d.ts → build/determineRuntimeVersion.d.ts} +1 -1
  5. package/dist/build/determineRuntimeVersion.d.ts.map +1 -0
  6. package/dist/build/determineRuntimeVersion.test.d.ts.map +1 -0
  7. package/dist/build/index.d.ts +2 -0
  8. package/dist/build/index.d.ts.map +1 -0
  9. package/dist/build/types.d.ts +7 -0
  10. package/dist/build/types.d.ts.map +1 -0
  11. package/dist/{slugCache-CxGQFqi6.js → build-DU4cyBtp.js} +351 -337
  12. package/dist/build-DU4cyBtp.js.map +1 -0
  13. package/dist/build-DkIslKFi.cjs +214 -0
  14. package/dist/build-DkIslKFi.cjs.map +1 -0
  15. package/dist/index.cjs +1 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +5 -11
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +167 -73
  20. package/dist/index.js.map +1 -1
  21. package/dist/{createRuntime.d.ts → orchestration/createRuntime.d.ts} +1 -2
  22. package/dist/orchestration/createRuntime.d.ts.map +1 -0
  23. package/dist/orchestration/generateRequestId.d.ts +2 -0
  24. package/dist/orchestration/generateRequestId.d.ts.map +1 -0
  25. package/dist/orchestration/setupBuild.d.ts +10 -0
  26. package/dist/orchestration/setupBuild.d.ts.map +1 -0
  27. package/dist/orchestration/setupInvalidateVizCache.d.ts +3 -0
  28. package/dist/orchestration/setupInvalidateVizCache.d.ts.map +1 -0
  29. package/dist/{types.d.ts → orchestration/types.d.ts} +26 -14
  30. package/dist/orchestration/types.d.ts.map +1 -0
  31. package/dist/orchestration/worker.d.ts.map +1 -0
  32. package/dist/test/end-to-end.test.d.ts +2 -0
  33. package/dist/test/end-to-end.test.d.ts.map +1 -0
  34. package/dist/test/orchestration.test.d.ts +2 -0
  35. package/dist/test/orchestration.test.d.ts.map +1 -0
  36. package/dist/test/testInBrowser.d.ts.map +1 -1
  37. package/dist/test/testMockedIframeWithWorker.d.ts +2 -1
  38. package/dist/test/testMockedIframeWithWorker.d.ts.map +1 -1
  39. package/dist/test/testRuntimeWithWorker.d.ts +4 -3
  40. package/dist/test/testRuntimeWithWorker.d.ts.map +1 -1
  41. package/dist/test/testStackTrace.d.ts.map +1 -1
  42. package/dist/v3/computeBundleJSV3.d.ts +2 -2
  43. package/dist/v3/computeBundleJSV3.d.ts.map +1 -1
  44. package/dist/v3/htmlTemplate.d.ts.map +1 -1
  45. package/dist/v3/index.d.ts +9 -0
  46. package/dist/v3/index.d.ts.map +1 -1
  47. package/dist/v3/v3Build.d.ts +2 -1
  48. package/dist/v3/v3Build.d.ts.map +1 -1
  49. package/dist/v4/bundleModule.d.ts.map +1 -1
  50. package/dist/worker.cjs +1 -1
  51. package/dist/worker.cjs.map +1 -1
  52. package/dist/worker.js +41 -37
  53. package/dist/worker.js.map +1 -1
  54. package/package.json +4 -2
  55. package/dist/buildHTML.d.ts.map +0 -1
  56. package/dist/createRuntime.d.ts.map +0 -1
  57. package/dist/determineRuntimeVersion.d.ts.map +0 -1
  58. package/dist/determineRuntimeVersion.test.d.ts.map +0 -1
  59. package/dist/slugCache-Bt1Sipcs.cjs +0 -214
  60. package/dist/slugCache-Bt1Sipcs.cjs.map +0 -1
  61. package/dist/slugCache-CxGQFqi6.js.map +0 -1
  62. package/dist/test/iframeWorkerManagement.test.d.ts +0 -2
  63. package/dist/test/iframeWorkerManagement.test.d.ts.map +0 -1
  64. package/dist/test/v3-hot-reloading.test.d.ts +0 -2
  65. package/dist/test/v3-hot-reloading.test.d.ts.map +0 -1
  66. package/dist/types.d.ts.map +0 -1
  67. package/dist/worker.d.ts.map +0 -1
  68. /package/dist/{determineRuntimeVersion.test.d.ts → build/determineRuntimeVersion.test.d.ts} +0 -0
  69. /package/dist/{worker.d.ts → orchestration/worker.d.ts} +0 -0
@@ -1,187 +1,68 @@
1
- import { magicSandbox as E } from "magic-sandbox";
2
- import { transform as U } from "sucrase";
3
- import { isVizId as z, getFileText as P, generateVizId as J, vizFilesToFileCollection as V } from "@vizhub/viz-utils";
4
- const D = (e) => {
5
- if (Object.keys(e).length === 0)
6
- return null;
7
- const t = "index.html" in e, n = "index.js" in e, r = "index.jsx" in e;
8
- return t ? e["index.html"].includes('type="module"') ? "v4" : n || r ? "v2" : "v1" : !t && n ? "v3" : null;
9
- }, C = {
1
+ import { magicSandbox as j } from "magic-sandbox";
2
+ import { isVizId as z, getFileText as k, generateVizId as U, vizFilesToFileCollection as J } from "@vizhub/viz-utils";
3
+ import { transform as V } from "sucrase";
4
+ const jt = () => (Math.random() + "").slice(2);
5
+ function I() {
6
+ return {
7
+ name: "sucrase",
8
+ transform(e, t) {
9
+ if (!t.match(/\.(?:js|[jt]sx)$/))
10
+ return null;
11
+ const n = V(e, {
12
+ transforms: ["jsx", "typescript"],
13
+ filePath: t,
14
+ // For source maps
15
+ sourceMapOptions: {
16
+ compiledFilename: "bundle.js"
17
+ },
18
+ production: !0
19
+ });
20
+ return {
21
+ code: n.code,
22
+ map: n.sourceMap
23
+ };
24
+ }
25
+ };
26
+ }
27
+ const T = {
10
28
  dependencies: {},
11
29
  vizhub: {},
12
30
  license: "MIT"
13
- }, B = !1, x = (e) => {
31
+ }, D = !1, x = (e) => {
14
32
  const t = e["package.json"];
15
33
  try {
16
- const n = t ? JSON.parse(t) : C;
17
- return B && console.log(
34
+ const n = t ? JSON.parse(t) : T;
35
+ return D && console.log(
18
36
  "[packageJSON] pkg:",
19
37
  JSON.stringify(n, null, 2)
20
38
  ), n;
21
39
  } catch {
22
- return C;
40
+ return T;
23
41
  }
24
- }, S = (e) => x(e).dependencies || {}, $ = (e) => (x(e).vizhub || {}).libraries || {}, I = ({ name: e, version: t }, n, r = "jsdelivr") => {
42
+ }, N = (e) => x(e).dependencies || {}, C = (e) => (x(e).vizhub || {}).libraries || {}, R = ({ name: e, version: t }, n, r = "jsdelivr") => {
25
43
  const s = n[e] && n[e].path || "";
26
44
  return r === "jsdelivr" ? `https://cdn.jsdelivr.net/npm/${e}@${t}${s}` : `https://unpkg.com/${e}@${t}${s}`;
27
- }, A = (e) => {
45
+ }, B = (e) => {
28
46
  var n;
29
47
  const t = (n = e == null ? void 0 : e.vizhub) == null ? void 0 : n.libraries;
30
48
  return t ? Object.entries(t).reduce(
31
49
  (r, [s, o]) => (o.global && (r[s] = o.global), r),
32
50
  {}
33
51
  ) : {};
34
- }, q = {
52
+ }, A = {
35
53
  d3: "d3",
36
54
  react: "React",
37
55
  "react-dom": "ReactDOM"
38
- }, F = (e) => {
39
- const t = A(e);
56
+ }, W = (e) => {
57
+ const t = B(e);
40
58
  return {
41
- ...q,
59
+ ...A,
42
60
  ...t
43
61
  };
44
- }, y = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), _ = (e) => {
45
- const t = e.trim();
46
- return y(t, "html") && y(t, "head") && y(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
47
- }, Y = (e, t) => e.replace(
48
- new RegExp(
49
- `<script[^>]*src=["'][^"']*${t.source}[^"']*["'][^>]*>\\s*<\/script>`,
50
- "gi"
51
- ),
52
- ""
53
- ), R = (e, t, n) => e.replace(
54
- new RegExp(t, "i"),
55
- `${n}${t}`
56
- ), G = (e, t) => {
57
- let n = _(e);
58
- const r = Object.entries(S(t));
59
- if (r.length) {
60
- const o = $(t);
61
- r.forEach(([c]) => {
62
- n = Y(n, new RegExp(`${c}@`));
63
- });
64
- const i = r.map(
65
- ([c, a]) => I({ name: c, version: a }, o)
66
- ).map((c) => `<script src="${c}"><\/script>`).join(`
67
- `);
68
- n = R(
69
- n,
70
- "</head>",
71
- i + `
72
- `
73
- );
74
- }
75
- if (t["bundle.js"] !== void 0 || t["index.js"] !== void 0) {
76
- const o = '<script src="bundle.js"><\/script>', i = /<script\b[^>]*\bsrc=["']bundle\.js["'][^>]*>\s*<\/script>/gi, c = [...n.matchAll(i)];
77
- c.length === 1 && (() => {
78
- const l = c[0].index ?? -1;
79
- if (l === -1) return !1;
80
- const u = n.search(/<body\b[^>]*>/i), m = n.search(/<\/body>/i);
81
- return u !== -1 && m !== -1 && l > u && l < m;
82
- })() || (n = n.replace(i, ""), n = R(n, "</body>", o));
83
- }
84
- return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
85
- }, H = (e) => {
86
- const t = e["index.html"];
87
- return !t && !e["index.js"] && !e["bundle.js"] ? "" : G(t || "<!DOCTYPE html><html><head></head><body></body></html>", e);
88
- }, M = (e) => {
89
- let t = e.replace(/^\.\//, "");
90
- return t = t.replace(/\/+/g, "/"), t = t.replace(/\/$/, ""), t;
91
- }, Q = (e, t) => {
92
- const n = e.includes("/") ? e.slice(0, e.lastIndexOf("/")) : "", r = t.split("/"), s = n ? n.split("/") : [];
93
- for (const o of r)
94
- o === ".." ? s.pop() : o !== "." && o !== "" && s.push(o);
95
- return s.join("/");
96
- }, k = (e) => ({
97
- name: "virtual-file-system",
98
- resolveId(t, n) {
99
- if (t.startsWith("./") || t.startsWith("../")) {
100
- const s = M(n ? Q(n, t) : t);
101
- if (e[s])
102
- return s;
103
- const o = [".js", ".jsx", ".ts", ".tsx"];
104
- for (const i of o) {
105
- const c = s + i;
106
- if (e[c])
107
- return c;
108
- }
109
- }
110
- if (e[t])
111
- return t;
112
- const r = [".js", ".jsx", ".ts", ".tsx"];
113
- for (const s of r) {
114
- const o = t + s;
115
- if (e[o])
116
- return o;
117
- }
118
- return null;
119
- },
120
- load(t) {
121
- return e[t] ? e[t] : null;
122
- }
123
- });
124
- function O() {
125
- return {
126
- name: "sucrase",
127
- transform(e, t) {
128
- if (!t.match(/\.(?:js|[jt]sx)$/))
129
- return null;
130
- const n = U(e, {
131
- transforms: ["jsx", "typescript"],
132
- filePath: t,
133
- // For source maps
134
- sourceMapOptions: {
135
- compiledFilename: "bundle.js"
136
- },
137
- production: !0
138
- });
139
- return {
140
- code: n.code,
141
- map: n.sourceMap
142
- };
143
- }
144
- };
145
- }
146
- const Z = async ({
147
- files: e,
148
- rollup: t,
149
- enableSourcemap: n = !0
150
- }) => {
151
- if (!e["index.js"])
152
- throw new Error("Missing index.js");
153
- const s = {
154
- input: "./index.js",
155
- plugins: [k(e), O()],
156
- onwarn(l, u) {
157
- l.code !== "UNRESOLVED_IMPORT" && u(l);
158
- }
159
- }, o = {
160
- format: "iife",
161
- sourcemap: n
162
- }, i = x(e);
163
- if (i) {
164
- const l = F(i);
165
- l && (s.external = Object.keys(l), o.globals = l);
166
- }
167
- const c = await t(s), { output: a } = await c.generate(o);
168
- return a[0].code;
169
- }, K = async ({
170
- files: e,
171
- rollup: t,
172
- enableSourcemap: n
173
- }) => ({
174
- ...e,
175
- "bundle.js": await Z({
176
- files: e,
177
- rollup: t,
178
- enableSourcemap: n
179
- }),
180
- "index.html": H(e)
181
- }), g = (e) => {
62
+ }, v = (e) => {
182
63
  const [t, ...n] = e.split("/"), r = n.join("/");
183
64
  return { vizId: t, fileName: r };
184
- }, X = `var EOL = {},
65
+ }, q = `var EOL = {},
185
66
  EOF = {},
186
67
  QUOTE = 34,
187
68
  NEWLINE = 10,
@@ -301,32 +182,32 @@ var tsv = dsv(' ');
301
182
 
302
183
  var tsvParse = tsv.parse;
303
184
 
304
- export { csvParse, tsvParse };`, tt = (e) => (
185
+ export { csvParse, tsvParse };`, Y = (e) => (
305
186
  // str.replace(/`/g, '\\`');
306
187
  e.replace(/\\/g, "\\\\").replace(/`/g, "\\`")
307
- ), et = () => ({
188
+ ), _ = () => ({
308
189
  name: "transformDSV",
309
190
  // `id` here is of the form
310
191
  // `{vizId}/{fileName}`
311
192
  transform: async (e, t) => {
312
- const { fileName: n } = g(t), r = n.endsWith(".csv"), s = n.endsWith(".tsv");
193
+ const { fileName: n } = v(t), r = n.endsWith(".csv"), s = n.endsWith(".tsv");
313
194
  if (r || s)
314
195
  return {
315
196
  code: `
316
- ${X}
317
- const data = ${r ? "csvParse" : "tsvParse"}(\`${tt(e)}\`);
197
+ ${q}
198
+ const data = ${r ? "csvParse" : "tsvParse"}(\`${Y(e)}\`);
318
199
  export default data;
319
200
  `,
320
201
  map: { mappings: "" }
321
202
  };
322
203
  }
323
- }), nt = (e) => {
204
+ }), G = (e) => {
324
205
  const t = /^@([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)$/, n = e.match(t);
325
206
  return n ? {
326
207
  userName: n[1],
327
208
  idOrSlug: n[2]
328
209
  } : null;
329
- }, rt = ({
210
+ }, H = ({
330
211
  vizId: e,
331
212
  slugCache: t
332
213
  }) => ({
@@ -338,12 +219,12 @@ export { csvParse, tsvParse };`, tt = (e) => (
338
219
  const {
339
220
  vizId: i,
340
221
  fileName: c
341
- } = g(r), a = c.split("/").slice(0, -1).join("/"), l = a ? `${a}/${o}` : o;
222
+ } = v(r), a = c.split("/").slice(0, -1).join("/"), l = a ? `${a}/${o}` : o;
342
223
  return `${i}/${l}`;
343
224
  }
344
225
  return e + "/" + o;
345
226
  }
346
- const s = nt(n);
227
+ const s = G(n);
347
228
  if (s) {
348
229
  let o;
349
230
  if (z(s.idOrSlug))
@@ -360,7 +241,7 @@ export { csvParse, tsvParse };`, tt = (e) => (
360
241
  return o + "/index.js";
361
242
  }
362
243
  }
363
- }), st = ({
244
+ }), Q = ({
364
245
  vizCache: e,
365
246
  trackCSSImport: t
366
247
  }) => ({
@@ -368,61 +249,61 @@ export { csvParse, tsvParse };`, tt = (e) => (
368
249
  // `id` here is of the form
369
250
  // `{vizId}/{fileName}`
370
251
  load: async (n) => {
371
- const { vizId: r, fileName: s } = g(n);
252
+ const { vizId: r, fileName: s } = v(n);
372
253
  if (s.endsWith(".css"))
373
254
  return t(n), "";
374
- const o = await e.get(r), i = P(o, s);
255
+ const o = await e.get(r), i = k(o, s);
375
256
  if (i === null)
376
257
  throw new Error(
377
258
  `Imported file "${s}" not found.`
378
259
  );
379
260
  return i;
380
261
  }
381
- }), T = /* @__PURE__ */ new Map();
382
- let b;
383
- const v = "https://cdn.jsdelivr.net/npm/svelte@4.2.9", jt = `${v}/compiler.cjs`, ot = ({
262
+ }), M = /* @__PURE__ */ new Map();
263
+ let S;
264
+ const w = "https://cdn.jsdelivr.net/npm/svelte@4.2.9", St = `${w}/compiler.cjs`, Z = ({
384
265
  getSvelteCompiler: e
385
266
  }) => ({
386
267
  name: "transformSvelte",
387
268
  load: async (t) => {
388
- if (!t.startsWith(v))
269
+ if (!t.startsWith(w))
389
270
  return;
390
- const n = T.get(t);
271
+ const n = M.get(t);
391
272
  if (n) return n;
392
273
  const r = await fetch(t).then(
393
274
  (s) => s.text()
394
275
  );
395
- return T.set(t, r), r;
276
+ return M.set(t, r), r;
396
277
  },
397
278
  // From https://github.com/sveltejs/sites/blob/master/packages/repl/src/lib/workers/bundler/index.js#L255C2-L271C5
398
279
  resolveId: async (t, n) => {
399
280
  if (t === "svelte")
400
- return `${v}/src/runtime/index.js`;
281
+ return `${w}/src/runtime/index.js`;
401
282
  if (t.startsWith("svelte/")) {
402
283
  const r = t.slice(7);
403
- return `${v}/src/runtime/${r}/index.js`;
284
+ return `${w}/src/runtime/${r}/index.js`;
404
285
  }
405
286
  if (/^https?:/.test(t)) return t;
406
- if (t.startsWith(".") && n && n.startsWith(v)) {
287
+ if (t.startsWith(".") && n && n.startsWith(w)) {
407
288
  const r = new URL(t, n).href;
408
289
  return new URL(t, n).href, r;
409
290
  }
410
291
  },
411
292
  transform: async (t, n) => {
412
- const { fileName: r } = g(n);
293
+ const { fileName: r } = v(n);
413
294
  if (r.endsWith(".svelte")) {
414
- if (!b) {
295
+ if (!S) {
415
296
  if (!e)
416
297
  throw new Error("Svelte compiler not available");
417
- b = await e();
298
+ S = await e();
418
299
  }
419
- return b(t, {
300
+ return S(t, {
420
301
  filename: r,
421
302
  hydratable: !0
422
303
  }).js;
423
304
  }
424
305
  }
425
- }), it = async ({
306
+ }), K = async ({
426
307
  files: e,
427
308
  rollup: t,
428
309
  enableSourcemap: n = !0,
@@ -431,48 +312,48 @@ const v = "https://cdn.jsdelivr.net/npm/svelte@4.2.9", jt = `${v}/compiler.cjs`,
431
312
  slugCache: o,
432
313
  getSvelteCompiler: i
433
314
  }) => {
434
- const c = /* @__PURE__ */ new Set(), a = (d) => {
435
- c.add(d);
315
+ const c = /* @__PURE__ */ new Set(), a = (u) => {
316
+ c.add(u);
436
317
  };
437
318
  if (!e["index.js"])
438
319
  throw new Error("Missing index.js");
439
- const u = {
320
+ const d = {
440
321
  input: "./index.js",
441
322
  plugins: [
442
- ...s ? [rt({ vizId: s, slugCache: o })] : [],
443
- et(),
444
- O(),
445
- ot({ getSvelteCompiler: i }),
446
- ...r ? [st({ vizCache: r, trackCSSImport: a })] : []
323
+ ...s ? [H({ vizId: s, slugCache: o })] : [],
324
+ _(),
325
+ I(),
326
+ Z({ getSvelteCompiler: i }),
327
+ ...r ? [Q({ vizCache: r, trackCSSImport: a })] : []
447
328
  ],
448
- onwarn(d, w) {
449
- d.code !== "UNRESOLVED_IMPORT" && w(d);
329
+ onwarn(u, h) {
330
+ u.code !== "UNRESOLVED_IMPORT" && h(u);
450
331
  }
451
- }, m = {
332
+ }, p = {
452
333
  format: "umd",
453
334
  name: "Viz",
454
335
  sourcemap: !!n,
455
336
  compact: !0
456
- }, p = x(e);
457
- if (p) {
458
- const d = F(p);
459
- d && (u.external = Object.keys(d), m.globals = d);
337
+ }, f = x(e);
338
+ if (f) {
339
+ const u = W(f);
340
+ u && (d.external = Object.keys(u), p.globals = u);
460
341
  }
461
- const f = await t(u), { output: h } = await f.generate(m);
342
+ const g = await t(d), { output: m } = await g.generate(p);
462
343
  return {
463
- src: h[0].code,
344
+ src: m[0].code,
464
345
  cssFiles: Array.from(c)
465
346
  };
466
347
  };
467
- function ct() {
348
+ function X() {
468
349
  return Math.random().toString().slice(2, 7);
469
350
  }
470
- const at = ({
351
+ const tt = ({
471
352
  cdn: e,
472
353
  src: t,
473
354
  styles: n
474
355
  }) => {
475
- const s = `viz-container-${ct()}`;
356
+ const s = `viz-container-${X()}`;
476
357
  return `<!DOCTYPE html>
477
358
  <html>
478
359
  <head>
@@ -522,25 +403,24 @@ const at = ({
522
403
  document.body.appendChild(script);
523
404
  run();
524
405
  };
525
- const runCSS = (src, id) => {
526
- const styleElementId = 'injected-style' + id;
527
- let style = document.getElementById(styleElementId);
406
+ const runCSS = (css) => {
407
+ let style = document.getElementById('injected-style');
528
408
  if (!style) {
529
409
  style = document.createElement('style');
530
410
  style.type = 'text/css';
531
- style.id = styleElementId;
411
+ style.id = 'injected-style';
532
412
  document.head.appendChild(style);
533
413
  }
534
- style.textContent = src;
414
+ style.textContent = css;
535
415
  };
536
416
  onmessage = (message) => {
537
417
  switch (message.data.type) {
538
418
  case 'runJS':
539
- runJS(message.data.src);
419
+ runJS(message.data.js);
540
420
  parent.postMessage({ type: 'runDone' }, "*");
541
421
  break;
542
422
  case 'runCSS':
543
- runCSS(message.data.src, message.data.id);
423
+ runCSS(message.data.css);
544
424
  break;
545
425
  case 'ping':
546
426
  parent.postMessage({ type: 'pong' }, "*");
@@ -553,7 +433,7 @@ const at = ({
553
433
  <\/script>
554
434
  </body>
555
435
  </html>`;
556
- }, lt = async ({
436
+ }, et = async ({
557
437
  files: e,
558
438
  rollup: t,
559
439
  enableSourcemap: n = !0,
@@ -562,7 +442,7 @@ const at = ({
562
442
  slugCache: o,
563
443
  getSvelteCompiler: i
564
444
  }) => {
565
- const { src: c, cssFiles: a } = await it({
445
+ const { src: c, cssFiles: a } = await K({
566
446
  files: e,
567
447
  rollup: t,
568
448
  enableSourcemap: n,
@@ -571,30 +451,222 @@ const at = ({
571
451
  slugCache: o,
572
452
  getSvelteCompiler: i
573
453
  });
574
- let l = "";
454
+ let l = [];
575
455
  if (a.length > 0)
576
- for (let p = 0; p < a.length; p++) {
577
- const f = a[p], h = p > 0 ? " " : `
578
- `, d = "injected-style" + f, { vizId: w, fileName: N } = g(f), L = await r.get(w), W = P(L, N);
579
- l += `${h}<style id="${d}">${W}</style>`;
456
+ for (let m = 0; m < a.length; m++) {
457
+ const u = a[m], { vizId: h, fileName: y } = v(u), b = await r.get(h), E = k(b, y);
458
+ E && l.push(E);
580
459
  }
581
- let u = "";
582
- const m = Object.entries(
583
- S(e)
460
+ const d = l.join(`
461
+ `), p = `
462
+ <style id="injected-style">${d}</style>`;
463
+ let f = "";
464
+ const g = Object.entries(
465
+ N(e)
584
466
  );
585
- if (m.length > 0) {
586
- const p = $(e);
587
- u = m.map(([f, h], d) => {
588
- const w = I(
589
- { name: f, version: h },
590
- p
467
+ if (g.length > 0) {
468
+ const m = C(e);
469
+ f = g.map(([u, h], y) => {
470
+ const b = R(
471
+ { name: u, version: h },
472
+ m
591
473
  );
592
- return `${d > 0 ? " " : `
593
- `}<script src="${w}"><\/script>`;
474
+ return `${y > 0 ? " " : `
475
+ `}<script src="${b}"><\/script>`;
594
476
  }).join("");
595
477
  }
596
- return at({ cdn: u, src: c, styles: l });
597
- }, dt = (e) => {
478
+ return {
479
+ html: tt({ cdn: f, src: c, styles: p }),
480
+ css: d,
481
+ js: c
482
+ };
483
+ }, nt = ({
484
+ initialContents: e,
485
+ handleCacheMiss: t
486
+ }) => {
487
+ const n = new Map(
488
+ e.map((i) => [i.id, i])
489
+ );
490
+ return { get: async (i) => {
491
+ const c = n.get(i);
492
+ if (c !== void 0)
493
+ return c;
494
+ if (!t)
495
+ throw new Error(
496
+ `Unresolved import from vizId ${i}, cache miss handler not provided.`
497
+ );
498
+ const a = await t(i);
499
+ if (a)
500
+ return n.set(i, a), a;
501
+ throw new Error(
502
+ `Unresolved import from vizId ${i}`
503
+ );
504
+ }, set: (i) => {
505
+ n.set(i.id, i);
506
+ }, invalidate: (i) => {
507
+ n.delete(i);
508
+ } };
509
+ }, $t = ({
510
+ initialMappings: e = {},
511
+ handleCacheMiss: t
512
+ }) => {
513
+ const n = new Map(
514
+ Object.entries(e)
515
+ );
516
+ return { get: async (i) => {
517
+ const c = n.get(i);
518
+ if (c !== void 0)
519
+ return c;
520
+ if (!t)
521
+ throw new Error(
522
+ `Unresolved slug ${i}, cache miss handler not provided.`
523
+ );
524
+ const a = await t(i);
525
+ if (a)
526
+ return n.set(i, a), a;
527
+ throw new Error(`Unresolved slug ${i}`);
528
+ }, set: (i, c) => {
529
+ n.set(i, c);
530
+ }, invalidate: (i) => {
531
+ n.delete(i);
532
+ } };
533
+ }, rt = (e, t = "Sample Content for Exporting") => {
534
+ const n = U(), r = {};
535
+ return Object.entries(e).forEach(
536
+ ([s, o]) => {
537
+ const i = Math.floor(
538
+ Math.random() * 1e7
539
+ ).toString();
540
+ r[i] = {
541
+ name: s,
542
+ text: o
543
+ };
544
+ }
545
+ ), {
546
+ id: n,
547
+ files: r,
548
+ title: t
549
+ };
550
+ }, st = (e) => {
551
+ if (Object.keys(e).length === 0)
552
+ return null;
553
+ const t = "index.html" in e, n = "index.js" in e, r = "index.jsx" in e;
554
+ return t ? e["index.html"].includes('type="module"') ? "v4" : n || r ? "v2" : "v1" : !t && n ? "v3" : null;
555
+ }, $ = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), ot = (e) => {
556
+ const t = e.trim();
557
+ return $(t, "html") && $(t, "head") && $(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
558
+ }, it = (e, t) => e.replace(
559
+ new RegExp(
560
+ `<script[^>]*src=["'][^"']*${t.source}[^"']*["'][^>]*>\\s*<\/script>`,
561
+ "gi"
562
+ ),
563
+ ""
564
+ ), P = (e, t, n) => e.replace(
565
+ new RegExp(t, "i"),
566
+ `${n}${t}`
567
+ ), ct = (e, t) => {
568
+ let n = ot(e);
569
+ const r = Object.entries(N(t));
570
+ if (r.length) {
571
+ const o = C(t);
572
+ r.forEach(([c]) => {
573
+ n = it(n, new RegExp(`${c}@`));
574
+ });
575
+ const i = r.map(
576
+ ([c, a]) => R({ name: c, version: a }, o)
577
+ ).map((c) => `<script src="${c}"><\/script>`).join(`
578
+ `);
579
+ n = P(
580
+ n,
581
+ "</head>",
582
+ i + `
583
+ `
584
+ );
585
+ }
586
+ if (t["bundle.js"] !== void 0 || t["index.js"] !== void 0) {
587
+ const o = '<script src="bundle.js"><\/script>', i = /<script\b[^>]*\bsrc=["']bundle\.js["'][^>]*>\s*<\/script>/gi, c = [...n.matchAll(i)];
588
+ c.length === 1 && (() => {
589
+ const l = c[0].index ?? -1;
590
+ if (l === -1) return !1;
591
+ const d = n.search(/<body\b[^>]*>/i), p = n.search(/<\/body>/i);
592
+ return d !== -1 && p !== -1 && l > d && l < p;
593
+ })() || (n = n.replace(i, ""), n = P(n, "</body>", o));
594
+ }
595
+ return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
596
+ }, at = (e) => {
597
+ const t = e["index.html"];
598
+ return !t && !e["index.js"] && !e["bundle.js"] ? "" : ct(t || "<!DOCTYPE html><html><head></head><body></body></html>", e);
599
+ }, F = (e) => {
600
+ let t = e.replace(/^\.\//, "");
601
+ return t = t.replace(/\/+/g, "/"), t = t.replace(/\/$/, ""), t;
602
+ }, lt = (e, t) => {
603
+ const n = e.includes("/") ? e.slice(0, e.lastIndexOf("/")) : "", r = t.split("/"), s = n ? n.split("/") : [];
604
+ for (const o of r)
605
+ o === ".." ? s.pop() : o !== "." && o !== "" && s.push(o);
606
+ return s.join("/");
607
+ }, L = (e) => ({
608
+ name: "virtual-file-system",
609
+ resolveId(t, n) {
610
+ if (t.startsWith("./") || t.startsWith("../")) {
611
+ const s = F(n ? lt(n, t) : t);
612
+ if (e[s])
613
+ return s;
614
+ const o = [".js", ".jsx", ".ts", ".tsx"];
615
+ for (const i of o) {
616
+ const c = s + i;
617
+ if (e[c])
618
+ return c;
619
+ }
620
+ }
621
+ if (e[t])
622
+ return t;
623
+ const r = [".js", ".jsx", ".ts", ".tsx"];
624
+ for (const s of r) {
625
+ const o = t + s;
626
+ if (e[o])
627
+ return o;
628
+ }
629
+ return null;
630
+ },
631
+ load(t) {
632
+ return e[t] ? e[t] : null;
633
+ }
634
+ }), ut = async ({
635
+ files: e,
636
+ rollup: t,
637
+ enableSourcemap: n = !0
638
+ }) => {
639
+ if (!e["index.js"])
640
+ throw new Error("Missing index.js");
641
+ const s = {
642
+ input: "./index.js",
643
+ plugins: [L(e), I()],
644
+ onwarn(l, d) {
645
+ l.code !== "UNRESOLVED_IMPORT" && d(l);
646
+ }
647
+ }, o = {
648
+ format: "iife",
649
+ sourcemap: n
650
+ }, i = x(e);
651
+ if (i) {
652
+ const l = W(i);
653
+ l && (s.external = Object.keys(l), o.globals = l);
654
+ }
655
+ const c = await t(s), { output: a } = await c.generate(o);
656
+ return a[0].code;
657
+ }, dt = async ({
658
+ files: e,
659
+ rollup: t,
660
+ enableSourcemap: n
661
+ }) => ({
662
+ ...e,
663
+ "bundle.js": await ut({
664
+ files: e,
665
+ rollup: t,
666
+ enableSourcemap: n
667
+ }),
668
+ "index.html": at(e)
669
+ }), pt = (e) => {
598
670
  const t = [], n = /<script\b([^>]*)>[\s\S]*?<\/script>/gi;
599
671
  let r;
600
672
  for (; (r = n.exec(e)) !== null; ) {
@@ -607,7 +679,7 @@ const at = ({
607
679
  o && t.push(o[1]);
608
680
  }
609
681
  return t;
610
- }, ut = async ({
682
+ }, mt = async ({
611
683
  entryPoint: e,
612
684
  files: t,
613
685
  rollup: n,
@@ -615,38 +687,38 @@ const at = ({
615
687
  }) => {
616
688
  const s = {
617
689
  input: `./${e}`,
618
- plugins: [k(t), O()],
619
- external: (c) => (console.log("external", c), t[c] ? !1 : !c.startsWith("./")),
690
+ plugins: [L(t), I()],
691
+ external: (c) => t[c] ? !1 : !c.startsWith("./"),
620
692
  onwarn(c, a) {
621
- c.code !== "UNRESOLVED_IMPORT" && a(c);
693
+ a(c);
622
694
  }
623
695
  }, o = await n(s), { output: i } = await o.generate({
624
696
  format: "es",
625
697
  sourcemap: r
626
698
  });
627
699
  return i[0].code;
628
- }, j = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), pt = (e) => {
700
+ }, O = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), ft = (e) => {
629
701
  const t = e.trim();
630
- return j(t, "html") && j(t, "head") && j(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
631
- }, mt = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), ft = (e, t, n) => e.replace(
702
+ return O(t, "html") && O(t, "head") && O(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
703
+ }, ht = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), wt = (e, t, n) => e.replace(
632
704
  new RegExp(t, "i"),
633
705
  `${n}${t}`
634
- ), ht = (e) => {
635
- const t = S(e);
706
+ ), vt = (e) => {
707
+ const t = N(e);
636
708
  if (Object.keys(t).length === 0) return null;
637
- const n = $(e), r = {};
709
+ const n = C(e), r = {};
638
710
  for (const [s, o] of Object.entries(t))
639
- r[s] = I(
711
+ r[s] = R(
640
712
  { name: s, version: o },
641
713
  n
642
714
  );
643
715
  return JSON.stringify({ imports: r }, null, 2);
644
- }, wt = (e, t) => {
716
+ }, gt = (e, t) => {
645
717
  if (!e["index.html"]) return "";
646
- let n = pt(e["index.html"]);
718
+ let n = ft(e["index.html"]);
647
719
  t.forEach((s, o) => {
648
720
  const i = new RegExp(
649
- `<script\\b[^>]*\\bsrc=["']${mt(o)}["'][^>]*>[^<]*<\/script>`,
721
+ `<script\\b[^>]*\\bsrc=["']${ht(o)}["'][^>]*>[^<]*<\/script>`,
650
722
  "gi"
651
723
  );
652
724
  n = n.replace(
@@ -656,7 +728,7 @@ ${s}
656
728
  <\/script>`
657
729
  );
658
730
  });
659
- const r = ht(e);
731
+ const r = vt(e);
660
732
  if (r && !/<script\b[^>]*type=["']importmap["'][^>]*>/i.test(
661
733
  n
662
734
  )) {
@@ -664,24 +736,24 @@ ${s}
664
736
  ${r}
665
737
  <\/script>
666
738
  `;
667
- n = ft(
739
+ n = wt(
668
740
  n,
669
741
  "</head>",
670
742
  o
671
743
  );
672
744
  }
673
745
  return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
674
- }, vt = async ({
746
+ }, xt = async ({
675
747
  files: e,
676
748
  rollup: t,
677
749
  enableSourcemap: n = !0
678
750
  }) => {
679
- const r = e["index.html"] || "", s = dt(r);
751
+ const r = e["index.html"] || "", s = pt(r);
680
752
  if (s.length === 0)
681
753
  return e;
682
754
  const o = /* @__PURE__ */ new Map();
683
755
  for (const c of s) {
684
- const a = await ut({
756
+ const a = await mt({
685
757
  entryPoint: c,
686
758
  files: e,
687
759
  rollup: t,
@@ -689,55 +761,12 @@ ${r}
689
761
  });
690
762
  o.set(c, a);
691
763
  }
692
- const i = wt(e, o);
764
+ const i = gt(e, o);
693
765
  return {
694
766
  ...e,
695
767
  "index.html": i
696
768
  };
697
- }, gt = ({
698
- initialContents: e,
699
- handleCacheMiss: t
700
- }) => {
701
- const n = new Map(
702
- e.map((i) => [i.id, i])
703
- );
704
- return { get: async (i) => {
705
- const c = n.get(i);
706
- if (c !== void 0)
707
- return c;
708
- if (!t)
709
- throw new Error(
710
- `Unresolved import from vizId ${i}, cache miss handler not provided.`
711
- );
712
- const a = await t(i);
713
- if (a)
714
- return n.set(i, a), a;
715
- throw new Error(
716
- `Unresolved import from vizId ${i}`
717
- );
718
- }, set: (i) => {
719
- n.set(i.id, i);
720
- }, invalidate: (i) => {
721
- n.delete(i);
722
- } };
723
- }, xt = (e, t = "Sample Content for Exporting") => {
724
- const n = J(), r = {};
725
- return Object.entries(e).forEach(
726
- ([s, o]) => {
727
- const i = Math.floor(
728
- Math.random() * 1e7
729
- ).toString();
730
- r[i] = {
731
- name: s,
732
- text: o
733
- };
734
- }
735
- ), {
736
- id: n,
737
- files: r,
738
- title: t
739
- };
740
- }, St = async ({
769
+ }, Ot = async ({
741
770
  files: e,
742
771
  rollup: t,
743
772
  enableSourcemap: n = !0,
@@ -753,26 +782,30 @@ ${r}
753
782
  throw new Error(
754
783
  "vizId is required when using vizCache"
755
784
  );
756
- if (!e && r && s && (e = V(
785
+ if (!e && r && s && (e = J(
757
786
  (a = await r.get(s)) == null ? void 0 : a.files
758
787
  )), !e)
759
788
  throw new Error("Upable to extract viz files");
760
- const c = D(e);
789
+ const c = st(e);
761
790
  if (c === "v1")
762
- return E(e);
791
+ return {
792
+ html: j(e)
793
+ };
763
794
  if (c === "v2") {
764
795
  if (!t)
765
796
  throw new Error("Rollup is required for v2 runtime");
766
- return E(
767
- await K({ files: e, rollup: t, enableSourcemap: n })
768
- );
797
+ return {
798
+ html: j(
799
+ await dt({ files: e, rollup: t, enableSourcemap: n })
800
+ )
801
+ };
769
802
  }
770
803
  if (c === "v3") {
771
804
  if (!t)
772
805
  throw new Error("Rollup is required for v3 runtime");
773
806
  if (!r && !s) {
774
- const l = xt(e);
775
- s = l.id, r = gt({
807
+ const l = rt(e);
808
+ s = l.id, r = nt({
776
809
  initialContents: [l],
777
810
  handleCacheMiss: async () => {
778
811
  throw new Error(
@@ -787,7 +820,7 @@ ${r}
787
820
  );
788
821
  if (!s)
789
822
  throw new Error("vizId is required for v3 runtime");
790
- return await lt({
823
+ return await et({
791
824
  files: e,
792
825
  rollup: t,
793
826
  vizCache: r,
@@ -799,43 +832,24 @@ ${r}
799
832
  if (c === "v4") {
800
833
  if (!t)
801
834
  throw new Error("Rollup is required for v4 runtime");
802
- return E(
803
- await vt({ files: e, rollup: t, enableSourcemap: n })
804
- );
835
+ return {
836
+ html: j(
837
+ await xt({ files: e, rollup: t, enableSourcemap: n })
838
+ )
839
+ };
805
840
  }
806
841
  throw new Error(
807
842
  `Unsupported runtime version: ${c}`
808
843
  );
809
- }, $t = ({
810
- initialMappings: e = {},
811
- handleCacheMiss: t
812
- }) => {
813
- const n = new Map(
814
- Object.entries(e)
815
- );
816
- return { get: async (i) => {
817
- const c = n.get(i);
818
- if (c !== void 0)
819
- return c;
820
- if (!t)
821
- throw new Error(
822
- `Unresolved slug ${i}, cache miss handler not provided.`
823
- );
824
- const a = await t(i);
825
- if (a)
826
- return n.set(i, a), a;
827
- throw new Error(`Unresolved slug ${i}`);
828
- }, set: (i, c) => {
829
- n.set(i, c);
830
- }, invalidate: (i) => {
831
- n.delete(i);
832
- } };
833
844
  };
834
845
  export {
835
- $t as a,
836
- St as b,
837
- gt as c,
838
- xt as d,
839
- jt as s
846
+ nt as a,
847
+ Ot as b,
848
+ K as c,
849
+ $t as d,
850
+ rt as e,
851
+ jt as g,
852
+ St as s,
853
+ et as v
840
854
  };
841
- //# sourceMappingURL=slugCache-CxGQFqi6.js.map
855
+ //# sourceMappingURL=build-DU4cyBtp.js.map