@voltro/web 0.6.0 → 0.8.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,99 @@
1
+ //#region src/serialise.ts
2
+ var e = /* @__PURE__ */ RegExp("\\u2028", "g"), t = /* @__PURE__ */ RegExp("\\u2029", "g"), n = (n) => JSON.stringify(n ?? null).replace(/</g, "\\u003c").replace(e, "\\u2028").replace(t, "\\u2029"), r = "__voltroDeferredLoaderResult", i = (e, t) => ({
3
+ [r]: !0,
4
+ eager: e,
5
+ deferred: t
6
+ }), a = (e) => typeof e == "object" && !!e && e[r] === !0, o = (e) => a(e) ? {
7
+ ...e.eager,
8
+ ...e.deferred
9
+ } : e, s = Symbol.for("voltro.deferId"), c = (e, t) => (Object.defineProperty(e, s, {
10
+ value: t,
11
+ enumerable: !1,
12
+ configurable: !0
13
+ }), e), l = (e) => {
14
+ if (typeof e != "object" || !e) return;
15
+ let t = e[s];
16
+ return typeof t == "string" ? t : void 0;
17
+ }, u = (e, t) => `${e === "page" ? "p" : `s${e}`}:${t}`, d = "__voltro_defer__", f = `window.${d}=window.${d}||(function(){var m={};function g(i){var p=m[i];if(!p){var r,j;p=new Promise(function(a,b){r=a;j=b});p.catch(function(){});p.__vr=r;p.__vj=j;m[i]=p}return p}return{get:g,settle:function(i,v){var p=g(i);if(!p.__vs){p.__vs=1;p.status="fulfilled";p.value=v;p.__vr(v)}}}})()`, p = () => `<script>${f}<\/script>`, m = (e, t) => `window.${d}.settle(${n(e)},${n(t)})`, h = (e, t) => `window.${d}.settle(${n(e)},${n(v(t))})`, g = () => {
18
+ let e = globalThis, t = e[d];
19
+ if (t) return t;
20
+ let n = /* @__PURE__ */ new Map(), r = (e) => {
21
+ let t = n.get(e);
22
+ if (t) return t;
23
+ let r, i, a = new Promise((e, t) => {
24
+ r = e, i = t;
25
+ });
26
+ return a.catch(() => {}), a.__vr = r, a.__vj = i, n.set(e, a), a;
27
+ }, i = {
28
+ get: r,
29
+ settle: (e, t) => {
30
+ let n = r(e);
31
+ n.__vs || (n.__vs = !0, n.status = "fulfilled", n.value = t, n.__vr?.(t));
32
+ }
33
+ };
34
+ return e[d] = i, i;
35
+ }, _ = "__voltroDeferError", v = (e) => ({ [_]: e }), y = (e) => {
36
+ if (typeof e != "object" || !e) return;
37
+ let t = e[_];
38
+ return typeof t == "string" ? t : void 0;
39
+ }, b = (e, t) => {
40
+ if (!a(e)) return {
41
+ renderData: e,
42
+ stateData: e,
43
+ deferredIds: void 0
44
+ };
45
+ let n = { ...e.eager }, r = {};
46
+ for (let [i, a] of Object.entries(e.deferred)) {
47
+ let e = u(t, i);
48
+ r[i] = e, n[i] = c(Promise.resolve(a).catch((e) => v(e instanceof Error ? e.message : String(e))), e);
49
+ }
50
+ return {
51
+ renderData: n,
52
+ stateData: { ...e.eager },
53
+ deferredIds: r
54
+ };
55
+ }, x = (e) => {
56
+ let { page: t, renderMode: n, interactive: r } = e;
57
+ if (n !== "ssr") throw Error(`[voltro] "${t}" uses defer() in its loader but has renderMode: '${n}'. defer() streams values in AFTER the shell, which only a per-request response can do — '${n}' produces a stored HTML artefact with no "after". Set \`export const renderMode = 'ssr'\` on this page, or drop defer() and return the values directly.`);
58
+ if (r !== "full") throw Error(`[voltro] "${t}" uses defer() in its loader but has interactive: '${r}'. ` + (r === "none" ? "Revealing a streamed <Suspense> boundary requires React's inline reveal scripts, and interactive: 'none' ships no JS at all — the <Await> fallback would be permanent. " : "interactive: 'islands' never hydrates the page's React root, so nothing consumes the streamed values and the <Await> fallback would be permanent. ") + "Remove the `interactive` export (defaults to 'full'), or drop defer() and return the values directly.");
59
+ }, S = "__voltro_state__", C = (e) => {
60
+ let t = Object.keys(e.segmentLoaderData ?? {}).map((e) => Number(e)).filter((e) => Number.isInteger(e)).sort((e, t) => e - t), n = e.deferredPageIds !== void 0, r = e.deferredSegmentIds !== void 0 && Object.keys(e.deferredSegmentIds).length > 0;
61
+ return {
62
+ page: e.loaderData,
63
+ ...e.segmentLoaderData ? { segments: e.segmentLoaderData } : {},
64
+ ran: {
65
+ ...e.pageLoaderRan ? { page: !0 } : {},
66
+ ...t.length > 0 ? { segments: t } : {}
67
+ },
68
+ ...n || r ? { deferred: {
69
+ ...n ? { page: e.deferredPageIds } : {},
70
+ ...r ? { segments: e.deferredSegmentIds } : {}
71
+ } } : {}
72
+ };
73
+ }, w = (e) => `<script type="application/json" id="${S}">${n(C(e))}<\/script>`, T = /* @__PURE__ */ new Map(), E = (e, t) => {
74
+ if (!e) return null;
75
+ let n;
76
+ try {
77
+ n = JSON.parse(e);
78
+ } catch {
79
+ return null;
80
+ }
81
+ if (typeof n != "object" || !n || Array.isArray(n)) return null;
82
+ let r = n, i = new Set(r.ran?.segments ?? []), a = /* @__PURE__ */ new Map();
83
+ for (let e of i) a.set(e, D(r.segments?.[String(e)], r.deferred?.segments?.[String(e)]));
84
+ return {
85
+ page: D(r.page, r.deferred?.page),
86
+ pageRan: r.ran?.page === !0,
87
+ segments: a.size > 0 ? a : T,
88
+ pathname: t
89
+ };
90
+ }, D = (e, t) => {
91
+ if (!t) return e;
92
+ let n = g(), r = { ...e ?? {} };
93
+ for (let [e, i] of Object.entries(t)) r[e] = c(n.get(i), i);
94
+ return r;
95
+ }, O = null, k = (e) => {
96
+ O = e;
97
+ }, A = () => O;
98
+ //#endregion
99
+ export { n as _, w as a, i as c, m as d, o as f, p as g, y as h, A as i, h as l, b as m, C as n, k as o, a as p, E as r, x as s, S as t, l as u };