@vizhub/runtime 4.4.0 → 4.7.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.
@@ -0,0 +1,791 @@
1
+ import { magicSandbox as e } from "magic-sandbox";
2
+ import { fileCollectionToVizFiles as t, generateVizId as n, getFileText as r, isVizId as i, vizFilesToFileCollection as a } from "@vizhub/viz-utils";
3
+ import { transform as o } from "sucrase";
4
+ //#region \0rolldown/runtime.js
5
+ var s = Object.create, c = Object.defineProperty, l = Object.getOwnPropertyDescriptor, u = Object.getOwnPropertyNames, d = Object.getPrototypeOf, f = Object.prototype.hasOwnProperty, p = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), m = (e, t, n, r) => {
6
+ if (t && typeof t == "object" || typeof t == "function") for (var i = u(t), a = 0, o = i.length, s; a < o; a++) s = i[a], !f.call(e, s) && s !== n && c(e, s, {
7
+ get: ((e) => t[e]).bind(null, s),
8
+ enumerable: !(r = l(t, s)) || r.enumerable
9
+ });
10
+ return e;
11
+ }, ee = (e, t, n) => (n = e == null ? {} : s(d(e)), m(t || !e || !e.__esModule ? c(n, "default", {
12
+ value: e,
13
+ enumerable: !0
14
+ }) : n, e)), h = () => (Math.random() + "").slice(2);
15
+ //#endregion
16
+ //#region src/common/sucrasePlugin.ts
17
+ function g(e = {}) {
18
+ return {
19
+ name: "sucrase",
20
+ transform(t, n) {
21
+ if (!n.match(/\.(?:js|[jt]sx)$/)) return null;
22
+ let r = o(t, {
23
+ transforms: ["jsx", "typescript"],
24
+ filePath: n,
25
+ sourceMapOptions: { compiledFilename: "bundle.js" },
26
+ production: !0,
27
+ ...e
28
+ });
29
+ return {
30
+ code: r.code,
31
+ map: r.sourceMap
32
+ };
33
+ }
34
+ };
35
+ }
36
+ //#endregion
37
+ //#region src/common/packageJson.ts
38
+ var _ = {
39
+ dependencies: {},
40
+ vizhub: {},
41
+ license: "MIT"
42
+ }, v = (e) => {
43
+ let t = e["package.json"];
44
+ try {
45
+ return t ? JSON.parse(t) : _;
46
+ } catch {
47
+ return _;
48
+ }
49
+ }, y = (e) => v(e).dependencies || {}, b = (e) => (v(e).vizhub || {}).libraries || {}, x = ({ name: e, version: t }, n, r = "jsdelivr") => {
50
+ let i = n[e] && n[e].path || "";
51
+ return r === "jsdelivr" ? `https://cdn.jsdelivr.net/npm/${e}@${t}${i}` : `https://unpkg.com/${e}@${t}${i}`;
52
+ }, S = (e) => {
53
+ let t = e?.vizhub?.libraries;
54
+ return t ? Object.entries(t).reduce((e, [t, n]) => (n.global && (e[t] = n.global), e), {}) : {};
55
+ }, te = {
56
+ d3: "d3",
57
+ react: "React",
58
+ "react-dom": "ReactDOM"
59
+ }, C = (e) => {
60
+ let t = S(e);
61
+ return {
62
+ ...te,
63
+ ...t
64
+ };
65
+ }, w = (e) => {
66
+ let [t, ...n] = e.split("/");
67
+ return {
68
+ vizId: t,
69
+ fileName: n.join("/")
70
+ };
71
+ }, T = "var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\n 'd',\n 'return {' +\n columns\n .map(function (name, i) {\n return (\n JSON.stringify(name) + ': d[' + i + '] || \"\"'\n );\n })\n .join(',') +\n '}',\n );\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function (row, i) {\n return f(object(row), i, columns);\n };\n}\n\nfunction dsv(delimiter) {\n var DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert,\n columns,\n rows = parseRows(text, function (row, i) {\n if (convert) return convert(row, i - 1);\n (columns = row),\n (convert = f\n ? customConverter(row, f)\n : objectConverter(row));\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return (eol = false), EOL;\n\n // Unescape quotes.\n var i,\n j = I,\n c;\n if (text.charCodeAt(j) === QUOTE) {\n while (\n (I++ < N && text.charCodeAt(I) !== QUOTE) ||\n text.charCodeAt(++I) === QUOTE\n );\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE)\n eol = true;\n else if (c === RETURN) {\n eol = true;\n if (text.charCodeAt(I) === NEWLINE) ++I;\n }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, '\"');\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt((i = I++))) === NEWLINE)\n eol = true;\n else if (c === RETURN) {\n eol = true;\n if (text.charCodeAt(I) === NEWLINE) ++I;\n } else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return (eof = true), text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF)\n row.push(t), (t = token());\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n return {\n parse: parse,\n };\n}\n\nvar csv = dsv(',');\n\nvar csvParse = csv.parse;\n\nvar tsv = dsv(' ');\n\nvar tsvParse = tsv.parse;\n\nexport { csvParse, tsvParse };", ne = (e) => e.replace(/\\/g, "\\\\").replace(/`/g, "\\`"), re = () => ({
72
+ name: "transformDSV",
73
+ transform: async (e, t) => {
74
+ let { vizId: n, fileName: r } = w(t), i = r.endsWith(".csv"), a = r.endsWith(".tsv");
75
+ if (i || a) return {
76
+ code: `
77
+ ${T}
78
+ const data = ${i ? "csvParse" : "tsvParse"}(\`${ne(e)}\`);
79
+ export default data;
80
+ `,
81
+ map: { mappings: "" }
82
+ };
83
+ }
84
+ }), ie = (e) => {
85
+ let t = e.match(/^@([a-zA-Z0-9_-]+)\/([a-zA-Z0-9_-]+)$/);
86
+ return t ? {
87
+ userName: t[1],
88
+ idOrSlug: t[2]
89
+ } : null;
90
+ }, ae = ({ vizId: e, slugCache: t }) => ({
91
+ name: "vizResolve",
92
+ resolveId: async (n, r) => {
93
+ if (n.startsWith("./") && !r?.startsWith("https://")) {
94
+ let t = n.substring(2);
95
+ if (!t.endsWith(".js") && !t.endsWith(".css") && !t.endsWith(".csv") && !t.endsWith(".svelte") && !t.endsWith(".png") && !t.endsWith(".jpg") && !t.endsWith(".jpeg") && !t.endsWith(".gif") && !t.endsWith(".svg") && !t.endsWith(".webp") && !t.endsWith(".bmp") && (t += ".js"), r) {
96
+ let { vizId: e, fileName: n } = w(r), i = n.split("/").slice(0, -1).join("/");
97
+ return `${e}/${i ? `${i}/${t}` : t}`;
98
+ }
99
+ return e + "/" + t;
100
+ }
101
+ let a = ie(n);
102
+ if (a) {
103
+ let e;
104
+ if (i(a.idOrSlug)) e = a.idOrSlug;
105
+ else {
106
+ if (!t) throw Error("slugCache is required to import by slug in v3 runtime");
107
+ e = await t.get(`${a.userName}/${a.idOrSlug}`);
108
+ }
109
+ return e + "/index.js";
110
+ }
111
+ }
112
+ }), oe = [
113
+ ".jpg",
114
+ ".jpeg",
115
+ ".png",
116
+ ".gif",
117
+ ".svg",
118
+ ".webp",
119
+ ".bmp"
120
+ ], E = (e) => {
121
+ let t = e.toLowerCase().split(".").pop();
122
+ return t ? oe.includes(`.${t}`) : !1;
123
+ }, se = (e) => {
124
+ switch (e.toLowerCase().split(".").pop()) {
125
+ case "jpg":
126
+ case "jpeg": return "image/jpeg";
127
+ case "png": return "image/png";
128
+ case "gif": return "image/gif";
129
+ case "svg": return "image/svg+xml";
130
+ case "webp": return "image/webp";
131
+ case "bmp": return "image/bmp";
132
+ default: return "image/png";
133
+ }
134
+ }, ce = (e) => {
135
+ let t = e.replace(/\s/g, "");
136
+ return /^[A-Za-z0-9+/]*={0,2}$/.test(t);
137
+ }, D = (e, t) => {
138
+ let n = se(e);
139
+ return e.toLowerCase().split(".").pop() === "svg" && !ce(t) ? `data:${n};utf8,${encodeURIComponent(t)}` : `data:${n};base64,${t}`;
140
+ }, le = (e, t) => e.replace(/<img([^>]*)\s+src=["']([^"']+)["']([^>]*)>/gi, (e, n, r, i) => t[r] !== void 0 && E(r) ? `<img${n} src="${D(r, t[r])}"${i}>` : e), O = ({ vizCache: e, trackCSSImport: t, vizId: n, files: i }) => ({
141
+ name: "vizLoad",
142
+ load: async (a) => {
143
+ let o = w(a), s = o.vizId, c = o.fileName;
144
+ if (c.endsWith(".css")) return t(a), "";
145
+ let l = null;
146
+ if (l = s === n && i ? i[c] || null : r(await e.get(s), c), l === null) throw Error(`Imported file "${c}" not found.`);
147
+ return E(c) ? `export default "${D(c, l)}";` : l;
148
+ }
149
+ }), k = /* @__PURE__ */ new Map(), A = /* @__PURE__ */ new Map(), j, M = "https://cdn.jsdelivr.net/npm/svelte@5.37.1", ue = `${M}/compiler/index.js`;
150
+ async function N(e) {
151
+ let t = A.get(e);
152
+ if (t) return t;
153
+ for (let t of [".js", "/index.js"]) {
154
+ let n = `${e}${t}`;
155
+ try {
156
+ if ((await fetch(n, { method: "HEAD" })).ok) return A.set(e, n), n;
157
+ } catch {
158
+ continue;
159
+ }
160
+ }
161
+ let n = `${e}.js`;
162
+ return A.set(e, n), n;
163
+ }
164
+ var de = ({ getSvelteCompiler: e }) => ({
165
+ name: "transformSvelte",
166
+ load: async (e) => {
167
+ if (e === "virtual:esm-env") return "\nexport const BROWSER = true;\nexport const DEV = true;\nexport const NODE = false;\nexport const PROD = false;\n";
168
+ if (!e.startsWith(M)) return;
169
+ let t = k.get(e);
170
+ if (t) return t;
171
+ let n = await fetch(e).then((e) => e.text());
172
+ return k.set(e, n), n;
173
+ },
174
+ resolveId: async (e, t) => {
175
+ if (e === "esm-env") return "virtual:esm-env";
176
+ if (e === "svelte") return `${M}/src/index-client.js`;
177
+ if (e.startsWith("svelte/")) return await N(`${M}/src/${e.slice(7)}`);
178
+ if (e.startsWith("#client/")) return await N(`${M}/src/internal/client/${e.slice(8)}`);
179
+ if (/^https?:/.test(e)) return e;
180
+ if (e.startsWith(".") && t && t.startsWith(M)) {
181
+ let n = new URL(e, t).href;
182
+ return new URL(e, t).href, n;
183
+ }
184
+ },
185
+ transform: async (t, n) => {
186
+ let { fileName: r } = w(n);
187
+ if (r.endsWith(".svelte")) {
188
+ if (!j) {
189
+ if (!e) throw Error("Svelte compiler not available");
190
+ j = await e();
191
+ }
192
+ let n = j(t, {
193
+ filename: r,
194
+ generate: "client",
195
+ css: "external",
196
+ dev: !1
197
+ }), i = n.js.code;
198
+ return n.css && n.css.code && (i = `
199
+ // Auto-inject CSS for Svelte component
200
+ (function() {
201
+ if (typeof document !== 'undefined') {
202
+ const style = document.createElement('style');
203
+ style.textContent = ${JSON.stringify(n.css.code)};
204
+ document.head.appendChild(style);
205
+ }
206
+ })();
207
+ ` + i), i;
208
+ }
209
+ }
210
+ }), P = async ({ files: e, rollup: t, enableSourcemap: n = !0, vizCache: r, vizId: i, slugCache: a, getSvelteCompiler: o }) => {
211
+ let s = /* @__PURE__ */ new Set(), c = (e) => {
212
+ s.add(e);
213
+ };
214
+ if (!e["index.js"]) throw Error("Missing index.js");
215
+ let l = {
216
+ name: "replace",
217
+ transform(e, t) {
218
+ let n = !1, r = e;
219
+ return r.includes("process.env.NODE_ENV") && (r = r.replace(/\bprocess\.env\.NODE_ENV\b/g, JSON.stringify("production")), n = !0), n ? {
220
+ code: r,
221
+ map: null
222
+ } : null;
223
+ }
224
+ }, u = {
225
+ input: "./index.js",
226
+ plugins: [
227
+ ...i ? [ae({
228
+ vizId: i,
229
+ slugCache: a
230
+ })] : [],
231
+ re(),
232
+ g(),
233
+ de({ getSvelteCompiler: o }),
234
+ l,
235
+ ...r ? [O({
236
+ vizCache: r,
237
+ trackCSSImport: c,
238
+ vizId: i,
239
+ files: e
240
+ })] : []
241
+ ],
242
+ onwarn(e, t) {
243
+ e.code !== "UNRESOLVED_IMPORT" && t(e);
244
+ }
245
+ }, d = {
246
+ format: "umd",
247
+ name: "Viz",
248
+ sourcemap: !!n,
249
+ compact: !0
250
+ }, f = v(e);
251
+ if (f) {
252
+ let e = C(f);
253
+ e && (u.external = Object.keys(e), d.globals = e);
254
+ }
255
+ u.external ||= [], d.globals ||= {}, Array.isArray(u.external) && (u.external = u.external.filter((e) => typeof e == "string" && !e.startsWith("#client/")));
256
+ let { output: p } = await (await t(u)).generate(d);
257
+ return {
258
+ src: p[0].code,
259
+ cssFiles: Array.from(s)
260
+ };
261
+ }, F = (e) => {
262
+ if (e instanceof Error) {
263
+ let t = e.stack || "", n = e.message || "Unknown error";
264
+ return `${e.name || "Error"}: ${n}\n${t}`;
265
+ } else if ("error" in e && e.error instanceof Error) {
266
+ let t = e.error, n = t.stack || "", r = t.message || "Unknown error", i = "filename" in e ? e.filename : "", a = "lineno" in e ? e.lineno : "", o = "colno" in e ? e.colno : "", s = "";
267
+ return i && a && (s = ` at ${i}:${a}`, o && (s += `:${o}`)), `${t.name || "Error"}: ${r}${s}\n${n}`;
268
+ } else if ("reason" in e) {
269
+ let t = e.reason;
270
+ if (t instanceof Error) {
271
+ let e = t.stack || "", n = t.message || "Unknown error";
272
+ return `Unhandled Promise Rejection - ${t.name || "Error"}: ${n}\n${e}`;
273
+ } else return `Unhandled Promise Rejection: ${String(t)}`;
274
+ } else return `Unknown runtime error: ${String(e)}`;
275
+ }, I = () => `
276
+ // Global error handling for runtime errors
277
+ (() => {
278
+ const formatRuntimeError = ${F.toString()};
279
+
280
+ // Handle uncaught JavaScript errors
281
+ window.addEventListener('error', (event) => {
282
+ const formattedErrorMessage = formatRuntimeError(event);
283
+ parent.postMessage({
284
+ type: 'runtimeError',
285
+ formattedErrorMessage
286
+ }, "*");
287
+ });
288
+
289
+ // Handle unhandled promise rejections
290
+ window.addEventListener('unhandledrejection', (event) => {
291
+ const formattedErrorMessage = formatRuntimeError(event);
292
+ parent.postMessage({
293
+ type: 'runtimeError',
294
+ formattedErrorMessage
295
+ }, "*");
296
+ });
297
+ })();
298
+ `;
299
+ //#endregion
300
+ //#region src/v3/htmlTemplate.ts
301
+ function L() {
302
+ return Math.random().toString().slice(2, 7);
303
+ }
304
+ var R = ({ cdn: e, src: t, styles: n }) => {
305
+ let r = `viz-container-${L()}`;
306
+ return `<!DOCTYPE html>
307
+ <html>
308
+ <head>
309
+ <meta charset="utf-8">${e}${n}
310
+ <style>
311
+ body {
312
+ margin: 0;
313
+ overflow: hidden;
314
+ }
315
+ #${r} {
316
+ height: 100vh;
317
+ }
318
+ </style>
319
+ </head>
320
+ <body>
321
+ <div id="${r}"></div>
322
+ <script>${I()}<\/script>
323
+ <script id="injected-script">${t}<\/script>
324
+ <script>
325
+ (() => {
326
+ let cleanup;
327
+ const render = () => {
328
+ const container = document.getElementById('${r}');
329
+ typeof cleanup === 'function' && cleanup();
330
+ cleanup = (Viz.viz || Viz.main)(container, { state: window.state, setState, writeFile });
331
+ };
332
+ const setState = (next) => {
333
+ window.state = next(window.state);
334
+ render();
335
+ };
336
+ const writeFile = (fileName, content) => {
337
+ parent.postMessage({ type: 'writeFile', fileName, content }, "*");
338
+ };
339
+ const run = () => {
340
+ try {
341
+ setState((state) => state || {});
342
+ } catch (error) {
343
+ console.error(error);
344
+ parent.postMessage({ type: 'runError', error }, "*");
345
+ }
346
+ }
347
+ run();
348
+ const runJS = (src) => {
349
+ document.getElementById('injected-script')?.remove();
350
+ const script = document.createElement('script');
351
+ script.textContent = src;
352
+ script.id = 'injected-script';
353
+ document.body.appendChild(script);
354
+ run();
355
+ };
356
+ const runCSS = (css) => {
357
+ let style = document.getElementById('injected-style');
358
+ if (!style) {
359
+ style = document.createElement('style');
360
+ style.type = 'text/css';
361
+ style.id = 'injected-style';
362
+ document.head.appendChild(style);
363
+ }
364
+ style.textContent = css;
365
+ };
366
+ onmessage = (message) => {
367
+ switch (message.data.type) {
368
+ case 'runJS':
369
+ runJS(message.data.js);
370
+ parent.postMessage({ type: 'runDone' }, "*");
371
+ break;
372
+ case 'runCSS':
373
+ runCSS(message.data.css);
374
+ break;
375
+ case 'ping':
376
+ parent.postMessage({ type: 'pong' }, "*");
377
+ break;
378
+ default:
379
+ break;
380
+ }
381
+ }
382
+ })();
383
+ <\/script>
384
+ </body>
385
+ </html>`;
386
+ }, z = async ({ files: e, rollup: t, enableSourcemap: n = !0, vizCache: i, vizId: a, slugCache: o, getSvelteCompiler: s }) => {
387
+ let { src: c, cssFiles: l } = await P({
388
+ files: e,
389
+ rollup: t,
390
+ enableSourcemap: n,
391
+ vizCache: i,
392
+ vizId: a,
393
+ slugCache: o,
394
+ getSvelteCompiler: s
395
+ }), u = [];
396
+ if (l.length > 0) for (let t = 0; t < l.length; t++) {
397
+ let n = l[t], o = w(n), s = o.vizId, c = o.fileName, d = null;
398
+ d = s === a && e ? e[c] || null : r(await i.get(s), c), d && u.push(d);
399
+ }
400
+ let d = u.join("\n"), f = `\n <style id="injected-style">${d}</style>`, p = "", m = Object.entries(y(e));
401
+ if (m.length > 0) {
402
+ let t = b(e);
403
+ p = m.map(([e, n], r) => {
404
+ let i = x({
405
+ name: e,
406
+ version: n
407
+ }, t);
408
+ return `${r > 0 ? " " : "\n "}<script src="${i}"><\/script>`;
409
+ }).join("");
410
+ }
411
+ return {
412
+ html: R({
413
+ cdn: p,
414
+ src: c,
415
+ styles: f
416
+ }),
417
+ css: d,
418
+ js: c,
419
+ runtimeVersion: "v3"
420
+ };
421
+ }, B = ({ initialContents: e, handleCacheMiss: t }) => {
422
+ let n = new Map(e.map((e) => [e.id, e]));
423
+ return {
424
+ get: async (e) => {
425
+ let r = n.get(e);
426
+ if (r !== void 0) return r;
427
+ if (!t) throw Error(`Unresolved import from vizId ${e}, cache miss handler not provided.`);
428
+ let i = await t(e);
429
+ if (i) return n.set(e, i), i;
430
+ throw Error(`Unresolved import from vizId ${e}`);
431
+ },
432
+ set: (e) => {
433
+ n.set(e.id, e);
434
+ },
435
+ invalidate: (e) => {
436
+ n.delete(e);
437
+ }
438
+ };
439
+ }, V = ({ initialMappings: e = {}, handleCacheMiss: t }) => ({
440
+ get: async (n) => {
441
+ let r = e[n];
442
+ if (r !== void 0) return r;
443
+ if (!t) throw Error(`Unresolved slug ${n}, cache miss handler not provided.`);
444
+ let i = await t(n);
445
+ if (i) return e[n] = i, i;
446
+ throw Error(`Unresolved slug ${n}`);
447
+ },
448
+ set: (t, n) => {
449
+ e[t] = n;
450
+ },
451
+ invalidate: (t) => {
452
+ delete e[t];
453
+ }
454
+ }), H = ({ rawMessage: e, vizId: t }) => {
455
+ let n = new RegExp(t, "g");
456
+ return e?.replace(n, ".");
457
+ }, U = (e, r = "Sample Content for Exporting", i = n()) => ({
458
+ id: i,
459
+ files: t(e),
460
+ title: r
461
+ }), W = (e) => {
462
+ if (Object.keys(e).length === 0) return null;
463
+ let t = "index.html" in e, n = "index.js" in e, r = "index.jsx" in e;
464
+ return t ? e["index.html"].includes("type=\"module\"") ? "v4" : n || r ? "v2" : "v1" : !t && n ? "v3" : null;
465
+ }, G = (e, t) => RegExp(`<${t}\\b`, "i").test(e) && RegExp(`</${t}>`, "i").test(e), K = (e) => {
466
+ let t = e.trim();
467
+ return G(t, "html") && G(t, "head") && G(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
468
+ }, fe = (e, t) => e.replace(RegExp(`<script[^>]*src=["'][^"']*${t.source}[^"']*["'][^>]*>\\s*<\/script>`, "gi"), ""), q = (e, t, n) => e.replace(new RegExp(t, "i"), `${n}${t}`), pe = (e, t) => {
469
+ let n = K(e), r = Object.entries(y(t));
470
+ if (r.length) {
471
+ let e = b(t);
472
+ r.forEach(([e]) => {
473
+ n = fe(n, RegExp(`${e}@`));
474
+ });
475
+ let i = r.map(([t, n]) => x({
476
+ name: t,
477
+ version: n
478
+ }, e)).map((e) => `<script src="${e}"><\/script>`).join("\n");
479
+ n = q(n, "</head>", i + "\n");
480
+ }
481
+ if (t["bundle.js"] !== void 0 || t["index.js"] !== void 0) {
482
+ let e = /<script\b[^>]*\bsrc=["']bundle\.js["'][^>]*>\s*<\/script>/gi, t = [...n.matchAll(e)];
483
+ t.length === 1 && (() => {
484
+ let e = t[0].index ?? -1;
485
+ if (e === -1) return !1;
486
+ let r = n.search(/<body\b[^>]*>/i), i = n.search(/<\/body>/i);
487
+ return r !== -1 && i !== -1 && e > r && e < i;
488
+ })() || (n = n.replace(e, ""), n = q(n, "</body>", "<script src=\"bundle.js\"><\/script>"));
489
+ }
490
+ let i = `<script>${I()}<\/script>\n`;
491
+ return n = q(n, "</head>", i), /^\s*<!DOCTYPE/i.test(n) ? n : `<!DOCTYPE html>${n}`;
492
+ }, me = (e) => {
493
+ let t = e["index.html"];
494
+ return !t && !e["index.js"] && !e["bundle.js"] ? "" : pe(t || "<!DOCTYPE html><html><head></head><body></body></html>", e);
495
+ }, he = /* @__PURE__ */ ee((/* @__PURE__ */ p(((e, t) => {
496
+ t.exports = {
497
+ d3: "d3",
498
+ "d3-array": "d3",
499
+ "d3-axis": "d3",
500
+ "d3-brush": "d3",
501
+ "d3-chord": "d3",
502
+ "d3-collection": "d3",
503
+ "d3-color": "d3",
504
+ "d3-contour": "d3",
505
+ "d3-dispatch": "d3",
506
+ "d3-drag": "d3",
507
+ "d3-dsv": "d3",
508
+ "d3-ease": "d3",
509
+ "d3-fetch": "d3",
510
+ "d3-force": "d3",
511
+ "d3-format": "d3",
512
+ "d3-geo": "d3",
513
+ "d3-hierarchy": "d3",
514
+ "d3-interpolate": "d3",
515
+ "d3-path": "d3",
516
+ "d3-polygon": "d3",
517
+ "d3-quadtree": "d3",
518
+ "d3-random": "d3",
519
+ "d3-scale": "d3",
520
+ "d3-scale-chromatic": "d3",
521
+ "d3-selection": "d3",
522
+ "d3-shape": "d3",
523
+ "d3-tile": "d3",
524
+ "d3-time": "d3",
525
+ "d3-time-format": "d3",
526
+ "d3-timer": "d3",
527
+ "d3-transition": "d3",
528
+ "d3-voronoi": "d3",
529
+ "d3-zoom": "d3",
530
+ react: "React",
531
+ "react-dom": "ReactDOM",
532
+ "react-dropdown-browser": "ReactDropdown",
533
+ "react-dropdown": "ReactDropdown",
534
+ three: "THREE",
535
+ vega: "vega",
536
+ "vega-embed": "vegaEmbed",
537
+ "vega-lite": "vegaLite",
538
+ "vega-lite-api": "vl",
539
+ "vega-tooltip": "vegaTooltip",
540
+ "vega-themes": "vegaThemes",
541
+ "vizhub-vega-lite-config": "vizhubVegaLiteConfig",
542
+ semiotic: "Semiotic",
543
+ "viz.js": "Viz"
544
+ };
545
+ })))(), 1), J = "\0virtual:", ge = (e) => {
546
+ let t = e.replace(/^\.\//, "");
547
+ return t = t.replace(/\/+/g, "/"), t = t.replace(/\/$/, ""), t;
548
+ }, _e = (e, t) => {
549
+ let n = e.includes("/") ? e.slice(0, e.lastIndexOf("/")) : "", r = t.split("/"), i = n ? n.split("/") : [];
550
+ for (let e of r) e === ".." ? i.pop() : e !== "." && e !== "" && i.push(e);
551
+ return i.join("/");
552
+ }, Y = (e) => ({
553
+ name: "virtual-file-system",
554
+ resolveId(t, n) {
555
+ let r = n?.startsWith("\0virtual:") ? n.slice(9) : n;
556
+ if (t.startsWith("./") || t.startsWith("../")) {
557
+ let n = ge(r ? _e(r, t) : t);
558
+ if (e[n]) return J + n;
559
+ for (let t of [
560
+ ".js",
561
+ ".jsx",
562
+ ".ts",
563
+ ".tsx"
564
+ ]) {
565
+ let r = n + t;
566
+ if (e[r]) return J + r;
567
+ }
568
+ }
569
+ if (e[t]) return J + t;
570
+ for (let n of [
571
+ ".js",
572
+ ".jsx",
573
+ ".ts",
574
+ ".tsx"
575
+ ]) {
576
+ let r = t + n;
577
+ if (e[r]) return J + r;
578
+ }
579
+ return null;
580
+ },
581
+ load(t) {
582
+ if (t.startsWith("\0virtual:")) {
583
+ let n = t.slice(9);
584
+ if (e[n]) return E(n) ? `export default "${D(n, e[n])}";` : e[n];
585
+ }
586
+ return null;
587
+ }
588
+ }), ve = async ({ files: e, rollup: t, enableSourcemap: n = !0 }) => {
589
+ let r = "index.js";
590
+ if (!e[r] && (r = "index.jsx", !e[r])) throw Error("Missing entry point, can't find index.js or index.jsx");
591
+ let i = {
592
+ input: "./" + r,
593
+ plugins: [Y(e), g()],
594
+ onwarn(e, t) {
595
+ e.code !== "UNRESOLVED_IMPORT" && t(e);
596
+ }
597
+ }, a = {
598
+ format: "iife",
599
+ sourcemap: n
600
+ }, o = v(e);
601
+ if (o) {
602
+ let e = {
603
+ ...he.default,
604
+ ...C(o)
605
+ };
606
+ e && (i.external = Object.keys(e), a.globals = e);
607
+ }
608
+ let { output: s } = await (await t(i)).generate(a);
609
+ return s[0].code;
610
+ }, ye = async ({ files: e, rollup: t, enableSourcemap: n }) => ({
611
+ ...e,
612
+ "bundle.js": await ve({
613
+ files: e,
614
+ rollup: t,
615
+ enableSourcemap: n
616
+ }),
617
+ "index.html": me(e)
618
+ }), be = (e) => {
619
+ let t = [], n = [], r = /<script\b([^>]*)>([\s\S]*?)<\/script>/gi, i, a = 0;
620
+ for (; (i = r.exec(e)) !== null;) {
621
+ let e = i[1], r = i[2];
622
+ if (!/\btype\s*=\s*["']module["']/i.test(e)) continue;
623
+ let o = e.match(/\bsrc\s*=\s*["']([^"']+)["']/i);
624
+ if (o) t.push(o[1]);
625
+ else if (r.trim()) {
626
+ let e = `__inline_script_${a++}.js`;
627
+ n.push({
628
+ id: e,
629
+ content: r.trim()
630
+ }), t.push(e);
631
+ }
632
+ }
633
+ return {
634
+ entryPoints: t,
635
+ inlineScripts: n
636
+ };
637
+ }, xe = () => ({
638
+ name: "catch-all-prevent-fs",
639
+ resolveId(e, t) {
640
+ return {
641
+ id: e,
642
+ external: !0
643
+ };
644
+ }
645
+ }), Se = async ({ entryPoint: e, files: t, rollup: n, enableSourcemap: r = !0 }) => {
646
+ let { output: i } = await (await n({
647
+ input: e.startsWith("./") ? e : `./${e}`,
648
+ plugins: [
649
+ Y(t),
650
+ g({ jsxRuntime: "automatic" }),
651
+ xe()
652
+ ],
653
+ onwarn(e, t) {}
654
+ })).generate({
655
+ format: "es",
656
+ sourcemap: r
657
+ });
658
+ return i[0].code;
659
+ }, X = (e, t) => RegExp(`<${t}\\b`, "i").test(e) && RegExp(`</${t}>`, "i").test(e), Ce = (e) => {
660
+ let t = e.trim();
661
+ return X(t, "html") && X(t, "head") && X(t, "body") ? t : `<html><head></head><body>${t}</body></html>`;
662
+ }, Z = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), Q = (e, t, n) => e.replace(new RegExp(t, "i"), `${n}${t}`), we = (e) => {
663
+ let t = y(e);
664
+ if (Object.keys(t).length === 0) return null;
665
+ let n = b(e), r = {};
666
+ for (let [e, i] of Object.entries(t)) r[e] = x({
667
+ name: e,
668
+ version: i
669
+ }, n);
670
+ return JSON.stringify({ imports: r }, null, 2);
671
+ }, Te = () => "\n // V4 Hot Reloading Support\n (() => {\n const runJS = (js) => {\n // Remove all existing bundled module scripts\n const existingScripts = document.querySelectorAll('script[type=\"module\"]');\n existingScripts.forEach(script => {\n // Only remove scripts that contain bundled code (not import maps or external scripts)\n if (script.textContent && script.textContent.trim()) {\n script.remove();\n }\n });\n \n // Create new script with updated bundled code\n const script = document.createElement('script');\n script.type = 'module';\n script.textContent = js;\n document.body.appendChild(script);\n };\n \n const runCSS = (css) => {\n let style = document.getElementById('v4-injected-style');\n if (!style) {\n style = document.createElement('style');\n style.type = 'text/css';\n style.id = 'v4-injected-style';\n document.head.appendChild(style);\n }\n style.textContent = css;\n };\n \n // Listen for hot reload messages\n window.addEventListener('message', (message) => {\n switch (message.data.type) {\n case 'runJS':\n try {\n runJS(message.data.js);\n parent.postMessage({ type: 'runDone' }, \"*\");\n } catch (error) {\n console.error('V4 Hot reload error:', error);\n parent.postMessage({ type: 'runError', error }, \"*\");\n }\n break;\n case 'runCSS':\n runCSS(message.data.css);\n break;\n case 'ping':\n parent.postMessage({ type: 'pong' }, \"*\");\n break;\n default:\n break;\n }\n });\n })();\n ", Ee = (e, t, n = [], r = !1) => {
672
+ if (!e["index.html"]) return "";
673
+ let i = Ce(e["index.html"]);
674
+ t.forEach((e, t) => {
675
+ if (n.some((e) => e.id === t)) {
676
+ let r = Z(n.find((e) => e.id === t)?.content || ""), a = RegExp(`<script\\b[^>]*\\btype=["']module["'][^>]*>\\s*${r}\\s*<\/script>`, "gi");
677
+ i = i.replace(a, `<script type="module">\n${e}\n<\/script>`);
678
+ } else {
679
+ let n = RegExp(`<script\\b[^>]*\\bsrc=["']${Z(t)}["'][^>]*>[^<]*<\/script>`, "gi");
680
+ i = i.replace(n, `<script type="module">\n${e}\n<\/script>`);
681
+ }
682
+ });
683
+ let a = we(e);
684
+ if (a && !/<script\b[^>]*type=["']importmap["'][^>]*>/i.test(i)) {
685
+ let e = `<script type="importmap">\n${a}\n<\/script>\n`;
686
+ i = Q(i, "</head>", e);
687
+ }
688
+ let o = `<script>${I()}<\/script>\n`;
689
+ if (i = Q(i, "</head>", o), r) {
690
+ let e = `<script>${Te()}<\/script>\n`;
691
+ i = Q(i, "</body>", e);
692
+ }
693
+ return /^\s*<!DOCTYPE/i.test(i) ? i : `<!DOCTYPE html>${i}`;
694
+ }, De = async ({ files: e, rollup: t, enableSourcemap: n = !0 }) => {
695
+ let { entryPoints: r, inlineScripts: i } = be(e["index.html"] || "");
696
+ if (r.length === 0) return {
697
+ files: e,
698
+ bundledJS: ""
699
+ };
700
+ let a = { ...e };
701
+ for (let e of i) a[e.id] = e.content;
702
+ let o = /* @__PURE__ */ new Map(), s = [];
703
+ for (let e of r) {
704
+ let r = await Se({
705
+ entryPoint: e,
706
+ files: a,
707
+ rollup: t,
708
+ enableSourcemap: n
709
+ });
710
+ o.set(e, r), s.push(r);
711
+ }
712
+ let c = Ee(a, o, i, !0), l = s.join("\n");
713
+ return {
714
+ files: {
715
+ ...e,
716
+ "index.html": c
717
+ },
718
+ bundledJS: l
719
+ };
720
+ }, Oe = (e) => {
721
+ let t = `<script>${I()}<\/script>`;
722
+ return e.includes("</head>") ? e.replace("</head>", `${t}\n</head>`) : e.includes("</body>") ? e.replace("</body>", `${t}\n</body>`) : e + t;
723
+ }, $ = (e) => {
724
+ let t = { ...e };
725
+ for (let [n, r] of Object.entries(t)) n.toLowerCase().endsWith(".html") && (t[n] = le(r, e));
726
+ return t;
727
+ }, ke = async ({ files: t, rollup: n, enableSourcemap: r = !0, vizCache: i, vizId: o, slugCache: s, getSvelteCompiler: c }) => {
728
+ try {
729
+ if (!t && !i) throw Error("Either files or vizCache is required");
730
+ if (!t && i && !o) throw Error("vizId is required when using vizCache");
731
+ if (!t && i && o && (t = a((await i.get(o))?.files)), !t) throw Error("Upable to extract viz files");
732
+ let l = W(t);
733
+ if (l === "v1") return {
734
+ html: Oe(e($(t))),
735
+ runtimeVersion: l
736
+ };
737
+ if (l === "v2") {
738
+ if (!n) throw Error("Rollup is required for v2 runtime");
739
+ return {
740
+ html: e($(await ye({
741
+ files: t,
742
+ rollup: n,
743
+ enableSourcemap: r
744
+ }))),
745
+ runtimeVersion: l
746
+ };
747
+ }
748
+ if (l === "v3") {
749
+ if (!n) throw Error("Rollup is required for v3 runtime");
750
+ if (!i && !o) {
751
+ let e = U(t);
752
+ o = e.id, i = B({
753
+ initialContents: [e],
754
+ handleCacheMiss: async () => {
755
+ throw Error("Cache miss handler not implemented");
756
+ }
757
+ });
758
+ }
759
+ if (!i) throw Error("vizCache is required for v3 runtime");
760
+ if (!o) throw Error("vizId is required for v3 runtime if vizCache is provided");
761
+ return await z({
762
+ files: t,
763
+ rollup: n,
764
+ vizCache: i,
765
+ vizId: o,
766
+ slugCache: s,
767
+ getSvelteCompiler: c
768
+ });
769
+ }
770
+ if (l === "v4") {
771
+ if (!n) throw Error("Rollup is required for v4 runtime");
772
+ let i = await De({
773
+ files: t,
774
+ rollup: n,
775
+ enableSourcemap: r
776
+ });
777
+ return {
778
+ html: e($(i.files)),
779
+ js: i.bundledJS,
780
+ runtimeVersion: l
781
+ };
782
+ }
783
+ throw Error(`Unsupported runtime version: ${l}`);
784
+ } catch (e) {
785
+ throw e instanceof Error && e.message.indexOf("\0virtual:") && (e.message = e.message.replace(J, "")), e;
786
+ }
787
+ };
788
+ //#endregion
789
+ export { V as a, P as c, H as i, ue as l, W as n, B as o, U as r, z as s, ke as t, h as u };
790
+
791
+ //# sourceMappingURL=build-DLVodqQH.js.map