@vizhub/runtime 0.4.0 → 0.5.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 (70) 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/createVizContent-BOSPq-Jv.cjs +207 -0
  12. package/dist/createVizContent-BOSPq-Jv.cjs.map +1 -0
  13. package/dist/createVizContent-DjJF2PT_.js +565 -0
  14. package/dist/createVizContent-DjJF2PT_.js.map +1 -0
  15. package/dist/index.cjs +1 -1
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +4 -11
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +168 -75
  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 +8 -1
  51. package/dist/worker.cjs.map +1 -1
  52. package/dist/worker.js +354 -55
  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 +0 -841
  62. package/dist/slugCache-CxGQFqi6.js.map +0 -1
  63. package/dist/test/iframeWorkerManagement.test.d.ts +0 -2
  64. package/dist/test/iframeWorkerManagement.test.d.ts.map +0 -1
  65. package/dist/test/v3-hot-reloading.test.d.ts +0 -2
  66. package/dist/test/v3-hot-reloading.test.d.ts.map +0 -1
  67. package/dist/types.d.ts.map +0 -1
  68. package/dist/worker.d.ts.map +0 -1
  69. /package/dist/{determineRuntimeVersion.test.d.ts → build/determineRuntimeVersion.test.d.ts} +0 -0
  70. /package/dist/{worker.d.ts → orchestration/worker.d.ts} +0 -0
@@ -1,841 +0,0 @@
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 = {
10
- dependencies: {},
11
- vizhub: {},
12
- license: "MIT"
13
- }, B = !1, x = (e) => {
14
- const t = e["package.json"];
15
- try {
16
- const n = t ? JSON.parse(t) : C;
17
- return B && console.log(
18
- "[packageJSON] pkg:",
19
- JSON.stringify(n, null, 2)
20
- ), n;
21
- } catch {
22
- return C;
23
- }
24
- }, S = (e) => x(e).dependencies || {}, $ = (e) => (x(e).vizhub || {}).libraries || {}, I = ({ name: e, version: t }, n, r = "jsdelivr") => {
25
- const s = n[e] && n[e].path || "";
26
- return r === "jsdelivr" ? `https://cdn.jsdelivr.net/npm/${e}@${t}${s}` : `https://unpkg.com/${e}@${t}${s}`;
27
- }, A = (e) => {
28
- var n;
29
- const t = (n = e == null ? void 0 : e.vizhub) == null ? void 0 : n.libraries;
30
- return t ? Object.entries(t).reduce(
31
- (r, [s, o]) => (o.global && (r[s] = o.global), r),
32
- {}
33
- ) : {};
34
- }, q = {
35
- d3: "d3",
36
- react: "React",
37
- "react-dom": "ReactDOM"
38
- }, F = (e) => {
39
- const t = A(e);
40
- return {
41
- ...q,
42
- ...t
43
- };
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) => {
182
- const [t, ...n] = e.split("/"), r = n.join("/");
183
- return { vizId: t, fileName: r };
184
- }, X = `var EOL = {},
185
- EOF = {},
186
- QUOTE = 34,
187
- NEWLINE = 10,
188
- RETURN = 13;
189
-
190
- function objectConverter(columns) {
191
- return new Function(
192
- 'd',
193
- 'return {' +
194
- columns
195
- .map(function (name, i) {
196
- return (
197
- JSON.stringify(name) + ': d[' + i + '] || ""'
198
- );
199
- })
200
- .join(',') +
201
- '}',
202
- );
203
- }
204
-
205
- function customConverter(columns, f) {
206
- var object = objectConverter(columns);
207
- return function (row, i) {
208
- return f(object(row), i, columns);
209
- };
210
- }
211
-
212
- function dsv(delimiter) {
213
- var DELIMITER = delimiter.charCodeAt(0);
214
-
215
- function parse(text, f) {
216
- var convert,
217
- columns,
218
- rows = parseRows(text, function (row, i) {
219
- if (convert) return convert(row, i - 1);
220
- (columns = row),
221
- (convert = f
222
- ? customConverter(row, f)
223
- : objectConverter(row));
224
- });
225
- rows.columns = columns || [];
226
- return rows;
227
- }
228
-
229
- function parseRows(text, f) {
230
- var rows = [], // output rows
231
- N = text.length,
232
- I = 0, // current character index
233
- n = 0, // current line number
234
- t, // current token
235
- eof = N <= 0, // current token followed by EOF?
236
- eol = false; // current token followed by EOL?
237
-
238
- // Strip the trailing newline.
239
- if (text.charCodeAt(N - 1) === NEWLINE) --N;
240
- if (text.charCodeAt(N - 1) === RETURN) --N;
241
-
242
- function token() {
243
- if (eof) return EOF;
244
- if (eol) return (eol = false), EOL;
245
-
246
- // Unescape quotes.
247
- var i,
248
- j = I,
249
- c;
250
- if (text.charCodeAt(j) === QUOTE) {
251
- while (
252
- (I++ < N && text.charCodeAt(I) !== QUOTE) ||
253
- text.charCodeAt(++I) === QUOTE
254
- );
255
- if ((i = I) >= N) eof = true;
256
- else if ((c = text.charCodeAt(I++)) === NEWLINE)
257
- eol = true;
258
- else if (c === RETURN) {
259
- eol = true;
260
- if (text.charCodeAt(I) === NEWLINE) ++I;
261
- }
262
- return text.slice(j + 1, i - 1).replace(/""/g, '"');
263
- }
264
-
265
- // Find next delimiter or newline.
266
- while (I < N) {
267
- if ((c = text.charCodeAt((i = I++))) === NEWLINE)
268
- eol = true;
269
- else if (c === RETURN) {
270
- eol = true;
271
- if (text.charCodeAt(I) === NEWLINE) ++I;
272
- } else if (c !== DELIMITER) continue;
273
- return text.slice(j, i);
274
- }
275
-
276
- // Return last token before EOF.
277
- return (eof = true), text.slice(j, N);
278
- }
279
-
280
- while ((t = token()) !== EOF) {
281
- var row = [];
282
- while (t !== EOL && t !== EOF)
283
- row.push(t), (t = token());
284
- if (f && (row = f(row, n++)) == null) continue;
285
- rows.push(row);
286
- }
287
-
288
- return rows;
289
- }
290
-
291
- return {
292
- parse: parse,
293
- };
294
- }
295
-
296
- var csv = dsv(',');
297
-
298
- var csvParse = csv.parse;
299
-
300
- var tsv = dsv(' ');
301
-
302
- var tsvParse = tsv.parse;
303
-
304
- export { csvParse, tsvParse };`, tt = (e) => (
305
- // str.replace(/`/g, '\\`');
306
- e.replace(/\\/g, "\\\\").replace(/`/g, "\\`")
307
- ), et = () => ({
308
- name: "transformDSV",
309
- // `id` here is of the form
310
- // `{vizId}/{fileName}`
311
- transform: async (e, t) => {
312
- const { fileName: n } = g(t), r = n.endsWith(".csv"), s = n.endsWith(".tsv");
313
- if (r || s)
314
- return {
315
- code: `
316
- ${X}
317
- const data = ${r ? "csvParse" : "tsvParse"}(\`${tt(e)}\`);
318
- export default data;
319
- `,
320
- map: { mappings: "" }
321
- };
322
- }
323
- }), nt = (e) => {
324
- const t = /^@([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)$/, n = e.match(t);
325
- return n ? {
326
- userName: n[1],
327
- idOrSlug: n[2]
328
- } : null;
329
- }, rt = ({
330
- vizId: e,
331
- slugCache: t
332
- }) => ({
333
- name: "vizResolve",
334
- resolveId: async (n, r) => {
335
- if (n.startsWith("./") && !(r != null && r.startsWith("https://"))) {
336
- let o = n.substring(2);
337
- if (!o.endsWith(".js") && !o.endsWith(".css") && !o.endsWith(".csv") && !o.endsWith(".svelte") && (o += ".js"), r) {
338
- const {
339
- vizId: i,
340
- fileName: c
341
- } = g(r), a = c.split("/").slice(0, -1).join("/"), l = a ? `${a}/${o}` : o;
342
- return `${i}/${l}`;
343
- }
344
- return e + "/" + o;
345
- }
346
- const s = nt(n);
347
- if (s) {
348
- let o;
349
- if (z(s.idOrSlug))
350
- o = s.idOrSlug;
351
- else {
352
- if (!t)
353
- throw new Error(
354
- "slugCache is required to import by slug in v3 runtime"
355
- );
356
- o = await t.get(
357
- `${s.userName}/${s.idOrSlug}`
358
- );
359
- }
360
- return o + "/index.js";
361
- }
362
- }
363
- }), st = ({
364
- vizCache: e,
365
- trackCSSImport: t
366
- }) => ({
367
- name: "vizLoad",
368
- // `id` here is of the form
369
- // `{vizId}/{fileName}`
370
- load: async (n) => {
371
- const { vizId: r, fileName: s } = g(n);
372
- if (s.endsWith(".css"))
373
- return t(n), "";
374
- const o = await e.get(r), i = P(o, s);
375
- if (i === null)
376
- throw new Error(
377
- `Imported file "${s}" not found.`
378
- );
379
- return i;
380
- }
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 = ({
384
- getSvelteCompiler: e
385
- }) => ({
386
- name: "transformSvelte",
387
- load: async (t) => {
388
- if (!t.startsWith(v))
389
- return;
390
- const n = T.get(t);
391
- if (n) return n;
392
- const r = await fetch(t).then(
393
- (s) => s.text()
394
- );
395
- return T.set(t, r), r;
396
- },
397
- // From https://github.com/sveltejs/sites/blob/master/packages/repl/src/lib/workers/bundler/index.js#L255C2-L271C5
398
- resolveId: async (t, n) => {
399
- if (t === "svelte")
400
- return `${v}/src/runtime/index.js`;
401
- if (t.startsWith("svelte/")) {
402
- const r = t.slice(7);
403
- return `${v}/src/runtime/${r}/index.js`;
404
- }
405
- if (/^https?:/.test(t)) return t;
406
- if (t.startsWith(".") && n && n.startsWith(v)) {
407
- const r = new URL(t, n).href;
408
- return new URL(t, n).href, r;
409
- }
410
- },
411
- transform: async (t, n) => {
412
- const { fileName: r } = g(n);
413
- if (r.endsWith(".svelte")) {
414
- if (!b) {
415
- if (!e)
416
- throw new Error("Svelte compiler not available");
417
- b = await e();
418
- }
419
- return b(t, {
420
- filename: r,
421
- hydratable: !0
422
- }).js;
423
- }
424
- }
425
- }), it = async ({
426
- files: e,
427
- rollup: t,
428
- enableSourcemap: n = !0,
429
- vizCache: r,
430
- vizId: s,
431
- slugCache: o,
432
- getSvelteCompiler: i
433
- }) => {
434
- const c = /* @__PURE__ */ new Set(), a = (d) => {
435
- c.add(d);
436
- };
437
- if (!e["index.js"])
438
- throw new Error("Missing index.js");
439
- const u = {
440
- input: "./index.js",
441
- plugins: [
442
- ...s ? [rt({ vizId: s, slugCache: o })] : [],
443
- et(),
444
- O(),
445
- ot({ getSvelteCompiler: i }),
446
- ...r ? [st({ vizCache: r, trackCSSImport: a })] : []
447
- ],
448
- onwarn(d, w) {
449
- d.code !== "UNRESOLVED_IMPORT" && w(d);
450
- }
451
- }, m = {
452
- format: "umd",
453
- name: "Viz",
454
- sourcemap: !!n,
455
- compact: !0
456
- }, p = x(e);
457
- if (p) {
458
- const d = F(p);
459
- d && (u.external = Object.keys(d), m.globals = d);
460
- }
461
- const f = await t(u), { output: h } = await f.generate(m);
462
- return {
463
- src: h[0].code,
464
- cssFiles: Array.from(c)
465
- };
466
- };
467
- function ct() {
468
- return Math.random().toString().slice(2, 7);
469
- }
470
- const at = ({
471
- cdn: e,
472
- src: t,
473
- styles: n
474
- }) => {
475
- const s = `viz-container-${ct()}`;
476
- return `<!DOCTYPE html>
477
- <html>
478
- <head>
479
- <meta charset="utf-8">${e}${n}
480
- <style>
481
- body {
482
- margin: 0;
483
- overflow: hidden;
484
- }
485
- #${s} {
486
- height: 100vh;
487
- }
488
- </style>
489
- </head>
490
- <body>
491
- <div id="${s}"></div>
492
- <script id="injected-script">${t}<\/script>
493
- <script>
494
- (() => {
495
- let cleanup;
496
- const render = () => {
497
- const container = document.getElementById('${s}');
498
- typeof cleanup === 'function' && cleanup();
499
- cleanup = Viz.main(container, { state: window.state, setState, writeFile });
500
- };
501
- const setState = (next) => {
502
- window.state = next(window.state);
503
- render();
504
- };
505
- const writeFile = (fileName, content) => {
506
- parent.postMessage({ type: 'writeFile', fileName, content }, "*");
507
- };
508
- const run = () => {
509
- try {
510
- setState((state) => state || {});
511
- } catch (error) {
512
- console.error(error);
513
- parent.postMessage({ type: 'runError', error }, "*");
514
- }
515
- }
516
- run();
517
- const runJS = (src) => {
518
- document.getElementById('injected-script')?.remove();
519
- const script = document.createElement('script');
520
- script.textContent = src;
521
- script.id = 'injected-script';
522
- document.body.appendChild(script);
523
- run();
524
- };
525
- const runCSS = (src, id) => {
526
- const styleElementId = 'injected-style' + id;
527
- let style = document.getElementById(styleElementId);
528
- if (!style) {
529
- style = document.createElement('style');
530
- style.type = 'text/css';
531
- style.id = styleElementId;
532
- document.head.appendChild(style);
533
- }
534
- style.textContent = src;
535
- };
536
- onmessage = (message) => {
537
- switch (message.data.type) {
538
- case 'runJS':
539
- runJS(message.data.src);
540
- parent.postMessage({ type: 'runDone' }, "*");
541
- break;
542
- case 'runCSS':
543
- runCSS(message.data.src, message.data.id);
544
- break;
545
- case 'ping':
546
- parent.postMessage({ type: 'pong' }, "*");
547
- break;
548
- default:
549
- break;
550
- }
551
- }
552
- })();
553
- <\/script>
554
- </body>
555
- </html>`;
556
- }, lt = async ({
557
- files: e,
558
- rollup: t,
559
- enableSourcemap: n = !0,
560
- vizCache: r,
561
- vizId: s,
562
- slugCache: o,
563
- getSvelteCompiler: i
564
- }) => {
565
- const { src: c, cssFiles: a } = await it({
566
- files: e,
567
- rollup: t,
568
- enableSourcemap: n,
569
- vizCache: r,
570
- vizId: s,
571
- slugCache: o,
572
- getSvelteCompiler: i
573
- });
574
- let l = "";
575
- 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>`;
580
- }
581
- let u = "";
582
- const m = Object.entries(
583
- S(e)
584
- );
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
591
- );
592
- return `${d > 0 ? " " : `
593
- `}<script src="${w}"><\/script>`;
594
- }).join("");
595
- }
596
- return at({ cdn: u, src: c, styles: l });
597
- }, dt = (e) => {
598
- const t = [], n = /<script\b([^>]*)>[\s\S]*?<\/script>/gi;
599
- let r;
600
- for (; (r = n.exec(e)) !== null; ) {
601
- const s = r[1];
602
- if (!/\btype\s*=\s*["']module["']/i.test(s))
603
- continue;
604
- const o = s.match(
605
- /\bsrc\s*=\s*["']([^"']+)["']/i
606
- );
607
- o && t.push(o[1]);
608
- }
609
- return t;
610
- }, ut = async ({
611
- entryPoint: e,
612
- files: t,
613
- rollup: n,
614
- enableSourcemap: r = !0
615
- }) => {
616
- const s = {
617
- input: `./${e}`,
618
- plugins: [k(t), O()],
619
- external: (c) => (console.log("external", c), t[c] ? !1 : !c.startsWith("./")),
620
- onwarn(c, a) {
621
- c.code !== "UNRESOLVED_IMPORT" && a(c);
622
- }
623
- }, o = await n(s), { output: i } = await o.generate({
624
- format: "es",
625
- sourcemap: r
626
- });
627
- return i[0].code;
628
- }, j = (e, t) => new RegExp(`<${t}\\b`, "i").test(e) && new RegExp(`</${t}>`, "i").test(e), pt = (e) => {
629
- 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(
632
- new RegExp(t, "i"),
633
- `${n}${t}`
634
- ), ht = (e) => {
635
- const t = S(e);
636
- if (Object.keys(t).length === 0) return null;
637
- const n = $(e), r = {};
638
- for (const [s, o] of Object.entries(t))
639
- r[s] = I(
640
- { name: s, version: o },
641
- n
642
- );
643
- return JSON.stringify({ imports: r }, null, 2);
644
- }, wt = (e, t) => {
645
- if (!e["index.html"]) return "";
646
- let n = pt(e["index.html"]);
647
- t.forEach((s, o) => {
648
- const i = new RegExp(
649
- `<script\\b[^>]*\\bsrc=["']${mt(o)}["'][^>]*>[^<]*<\/script>`,
650
- "gi"
651
- );
652
- n = n.replace(
653
- i,
654
- `<script type="module">
655
- ${s}
656
- <\/script>`
657
- );
658
- });
659
- const r = ht(e);
660
- if (r && !/<script\b[^>]*type=["']importmap["'][^>]*>/i.test(
661
- n
662
- )) {
663
- const o = `<script type="importmap">
664
- ${r}
665
- <\/script>
666
- `;
667
- n = ft(
668
- n,
669
- "</head>",
670
- o
671
- );
672
- }
673
- return /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
674
- }, vt = async ({
675
- files: e,
676
- rollup: t,
677
- enableSourcemap: n = !0
678
- }) => {
679
- const r = e["index.html"] || "", s = dt(r);
680
- if (s.length === 0)
681
- return e;
682
- const o = /* @__PURE__ */ new Map();
683
- for (const c of s) {
684
- const a = await ut({
685
- entryPoint: c,
686
- files: e,
687
- rollup: t,
688
- enableSourcemap: n
689
- });
690
- o.set(c, a);
691
- }
692
- const i = wt(e, o);
693
- return {
694
- ...e,
695
- "index.html": i
696
- };
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 ({
741
- files: e,
742
- rollup: t,
743
- enableSourcemap: n = !0,
744
- vizCache: r,
745
- vizId: s,
746
- slugCache: o,
747
- getSvelteCompiler: i
748
- }) => {
749
- var a;
750
- if (!e && !r)
751
- throw new Error("Either files or vizCache is required");
752
- if (!e && r && !s)
753
- throw new Error(
754
- "vizId is required when using vizCache"
755
- );
756
- if (!e && r && s && (e = V(
757
- (a = await r.get(s)) == null ? void 0 : a.files
758
- )), !e)
759
- throw new Error("Upable to extract viz files");
760
- const c = D(e);
761
- if (c === "v1")
762
- return E(e);
763
- if (c === "v2") {
764
- if (!t)
765
- throw new Error("Rollup is required for v2 runtime");
766
- return E(
767
- await K({ files: e, rollup: t, enableSourcemap: n })
768
- );
769
- }
770
- if (c === "v3") {
771
- if (!t)
772
- throw new Error("Rollup is required for v3 runtime");
773
- if (!r && !s) {
774
- const l = xt(e);
775
- s = l.id, r = gt({
776
- initialContents: [l],
777
- handleCacheMiss: async () => {
778
- throw new Error(
779
- "Cache miss handler not implemented"
780
- );
781
- }
782
- });
783
- }
784
- if (!r)
785
- throw new Error(
786
- "vizCache is required for v3 runtime"
787
- );
788
- if (!s)
789
- throw new Error("vizId is required for v3 runtime");
790
- return await lt({
791
- files: e,
792
- rollup: t,
793
- vizCache: r,
794
- vizId: s,
795
- slugCache: o,
796
- getSvelteCompiler: i
797
- });
798
- }
799
- if (c === "v4") {
800
- if (!t)
801
- throw new Error("Rollup is required for v4 runtime");
802
- return E(
803
- await vt({ files: e, rollup: t, enableSourcemap: n })
804
- );
805
- }
806
- throw new Error(
807
- `Unsupported runtime version: ${c}`
808
- );
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
- };
834
- export {
835
- $t as a,
836
- St as b,
837
- gt as c,
838
- xt as d,
839
- jt as s
840
- };
841
- //# sourceMappingURL=slugCache-CxGQFqi6.js.map