@demiurgejs/core 0.1.1 → 0.2.0-beta.2

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 (151) hide show
  1. package/README.md +5 -0
  2. package/bin/demiurge.mjs +51 -0
  3. package/dist/adapter/testing.d.ts +33 -0
  4. package/dist/adapter/testing.d.ts.map +1 -0
  5. package/dist/adapter/testing.js +251 -0
  6. package/dist/adapter/testing.js.map +1 -0
  7. package/dist/browser/file-router.d.ts.map +1 -1
  8. package/dist/chunks/document-shell-D1xo6cEA.js +35 -0
  9. package/dist/chunks/document-shell-D1xo6cEA.js.map +1 -0
  10. package/dist/chunks/image-codec-BGTx_t5K.js +141 -0
  11. package/dist/chunks/image-codec-BGTx_t5K.js.map +1 -0
  12. package/dist/chunks/images-B9MqcjSA.js +339 -0
  13. package/dist/chunks/images-B9MqcjSA.js.map +1 -0
  14. package/dist/chunks/request-metadata-D5NrT8ks.js +642 -0
  15. package/dist/chunks/request-metadata-D5NrT8ks.js.map +1 -0
  16. package/dist/chunks/streaming-BQ1bykDo.js +469 -0
  17. package/dist/chunks/streaming-BQ1bykDo.js.map +1 -0
  18. package/dist/chunks/{testing-DR3eQAvY.js → testing-B_iMFYz_.js} +2376 -1927
  19. package/dist/chunks/testing-B_iMFYz_.js.map +1 -0
  20. package/dist/cli.d.ts +42 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +173 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/document/deferred-scripts.d.ts +11 -0
  25. package/dist/document/deferred-scripts.d.ts.map +1 -0
  26. package/dist/document/index.d.ts +4 -2
  27. package/dist/document/index.d.ts.map +1 -1
  28. package/dist/document/render.d.ts +1 -1
  29. package/dist/document/render.d.ts.map +1 -1
  30. package/dist/document/scripts.d.ts +34 -1
  31. package/dist/document/scripts.d.ts.map +1 -1
  32. package/dist/edge/assets.d.ts +14 -0
  33. package/dist/edge/assets.d.ts.map +1 -0
  34. package/dist/edge/index.d.ts +19 -0
  35. package/dist/edge/index.d.ts.map +1 -0
  36. package/dist/edge/index.js +286 -0
  37. package/dist/edge/index.js.map +1 -0
  38. package/dist/edge/stores.d.ts +8 -0
  39. package/dist/edge/stores.d.ts.map +1 -0
  40. package/dist/edge/streaming.d.ts +7 -0
  41. package/dist/edge/streaming.d.ts.map +1 -0
  42. package/dist/index.d.ts +9 -9
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +894 -1043
  45. package/dist/index.js.map +1 -1
  46. package/dist/internal/testing.js +12 -11
  47. package/dist/internal/testing.js.map +1 -1
  48. package/dist/kv/index.d.ts +3 -0
  49. package/dist/kv/index.d.ts.map +1 -0
  50. package/dist/kv/index.js +103 -0
  51. package/dist/kv/index.js.map +1 -0
  52. package/dist/kv/store.d.ts +28 -0
  53. package/dist/kv/store.d.ts.map +1 -0
  54. package/dist/node/font.d.ts +5 -0
  55. package/dist/node/font.d.ts.map +1 -0
  56. package/dist/node/image.d.ts +15 -0
  57. package/dist/node/image.d.ts.map +1 -0
  58. package/dist/node/index.d.ts +4 -0
  59. package/dist/node/index.d.ts.map +1 -1
  60. package/dist/node/index.js +25 -23
  61. package/dist/node/index.js.map +1 -1
  62. package/dist/node/streaming.d.ts +2 -0
  63. package/dist/node/streaming.d.ts.map +1 -1
  64. package/dist/platform/analytics.d.ts +58 -5
  65. package/dist/platform/analytics.d.ts.map +1 -1
  66. package/dist/platform/font-assets.d.ts +19 -0
  67. package/dist/platform/font-assets.d.ts.map +1 -0
  68. package/dist/platform/fonts.d.ts +14 -4
  69. package/dist/platform/fonts.d.ts.map +1 -1
  70. package/dist/platform/image-codec.d.ts +15 -0
  71. package/dist/platform/image-codec.d.ts.map +1 -0
  72. package/dist/platform/image-url.d.ts +17 -0
  73. package/dist/platform/image-url.d.ts.map +1 -0
  74. package/dist/platform/image.d.ts +8 -0
  75. package/dist/platform/image.d.ts.map +1 -0
  76. package/dist/platform/images.d.ts +15 -0
  77. package/dist/platform/images.d.ts.map +1 -1
  78. package/dist/platform/index.d.ts +8 -5
  79. package/dist/platform/index.d.ts.map +1 -1
  80. package/dist/redis/index.d.ts +3 -0
  81. package/dist/redis/index.d.ts.map +1 -0
  82. package/dist/redis/index.js +171 -0
  83. package/dist/redis/index.js.map +1 -0
  84. package/dist/redis/store.d.ts +8 -0
  85. package/dist/redis/store.d.ts.map +1 -0
  86. package/dist/route/action.d.ts +11 -11
  87. package/dist/route/action.d.ts.map +1 -1
  88. package/dist/route/index.d.ts +2 -1
  89. package/dist/route/index.d.ts.map +1 -1
  90. package/dist/route/middleware.d.ts +7 -0
  91. package/dist/route/middleware.d.ts.map +1 -0
  92. package/dist/route/page.d.ts +2 -2
  93. package/dist/route/page.d.ts.map +1 -1
  94. package/dist/route/response.d.ts +19 -19
  95. package/dist/route/response.d.ts.map +1 -1
  96. package/dist/route/types.d.ts +55 -31
  97. package/dist/route/types.d.ts.map +1 -1
  98. package/dist/route/webhook.d.ts +1 -1
  99. package/dist/router/manifest.d.ts +1 -0
  100. package/dist/router/manifest.d.ts.map +1 -1
  101. package/dist/routing/generate.d.ts +2 -0
  102. package/dist/routing/generate.d.ts.map +1 -1
  103. package/dist/routing/index.d.ts +1 -1
  104. package/dist/routing/index.d.ts.map +1 -1
  105. package/dist/routing/types.d.ts +2 -0
  106. package/dist/routing/types.d.ts.map +1 -1
  107. package/dist/security/cors.d.ts.map +1 -1
  108. package/dist/security/index.d.ts +4 -2
  109. package/dist/security/index.d.ts.map +1 -1
  110. package/dist/security/policy.d.ts +5 -1
  111. package/dist/security/policy.d.ts.map +1 -1
  112. package/dist/security/types.d.ts +34 -13
  113. package/dist/security/types.d.ts.map +1 -1
  114. package/dist/security/verification.d.ts +8 -0
  115. package/dist/security/verification.d.ts.map +1 -0
  116. package/dist/server/document-shell.d.ts +12 -0
  117. package/dist/server/document-shell.d.ts.map +1 -0
  118. package/dist/server/errors.d.ts.map +1 -1
  119. package/dist/server/not-found.d.ts.map +1 -1
  120. package/dist/server/render-tree.d.ts +6 -1
  121. package/dist/server/render-tree.d.ts.map +1 -1
  122. package/dist/server/request-handler.d.ts +4 -1
  123. package/dist/server/request-handler.d.ts.map +1 -1
  124. package/dist/server/ssr.d.ts +1 -0
  125. package/dist/server/ssr.d.ts.map +1 -1
  126. package/dist/static/images.d.ts +13 -0
  127. package/dist/static/images.d.ts.map +1 -0
  128. package/dist/static/index.d.ts +18 -0
  129. package/dist/static/index.d.ts.map +1 -1
  130. package/dist/static/index.js +677 -129
  131. package/dist/static/index.js.map +1 -1
  132. package/dist/static/preview.d.ts +8 -0
  133. package/dist/static/preview.d.ts.map +1 -0
  134. package/dist/static/vercel.d.ts +34 -0
  135. package/dist/static/vercel.d.ts.map +1 -0
  136. package/dist/vite/index.d.ts +3 -2
  137. package/dist/vite/index.d.ts.map +1 -1
  138. package/dist/vite/index.js +782 -329
  139. package/dist/vite/index.js.map +1 -1
  140. package/dist/vite/plugin.d.ts +20 -0
  141. package/dist/vite/plugin.d.ts.map +1 -1
  142. package/dist/vite/policy-verification.d.ts +10 -0
  143. package/dist/vite/policy-verification.d.ts.map +1 -0
  144. package/package.json +38 -2
  145. package/dist/chunks/index-BnX9Qxbm.js +0 -44
  146. package/dist/chunks/index-BnX9Qxbm.js.map +0 -1
  147. package/dist/chunks/ssr-BJejKlkZ.js +0 -275
  148. package/dist/chunks/ssr-BJejKlkZ.js.map +0 -1
  149. package/dist/chunks/streaming-DN1DnbRE.js +0 -343
  150. package/dist/chunks/streaming-DN1DnbRE.js.map +0 -1
  151. package/dist/chunks/testing-DR3eQAvY.js.map +0 -1
@@ -1,44 +0,0 @@
1
- const n = {
2
- backgroundLifetime: !1,
3
- crossOriginIsolationHeaders: !1,
4
- nonceInjection: !1,
5
- sharedCache: !1,
6
- staticOutput: !1,
7
- streaming: !1,
8
- webSocket: !1,
9
- webTransport: !1
10
- };
11
- function c(e) {
12
- return {
13
- capabilities: {
14
- ...n,
15
- ...e.capabilities
16
- },
17
- name: e.name
18
- };
19
- }
20
- function r(e, i) {
21
- const a = [...new Set(i)], s = a.filter(
22
- (t) => !e.capabilities[t]
23
- );
24
- return {
25
- adapter: e.name,
26
- missing: s,
27
- ok: s.length === 0,
28
- required: a
29
- };
30
- }
31
- function o(e, i) {
32
- const a = r(e, i);
33
- if (!a.ok)
34
- throw new Error(
35
- `Adapter "${e.name}" does not support required capabilities: ${a.missing.join(", ")}.`
36
- );
37
- return a;
38
- }
39
- export {
40
- o as a,
41
- r as c,
42
- c as d
43
- };
44
- //# sourceMappingURL=index-BnX9Qxbm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BnX9Qxbm.js","sources":["../../src/adapter/index.ts"],"sourcesContent":["export type AdapterCapability =\n | \"backgroundLifetime\"\n | \"crossOriginIsolationHeaders\"\n | \"nonceInjection\"\n | \"sharedCache\"\n | \"staticOutput\"\n | \"streaming\"\n | \"webSocket\"\n | \"webTransport\";\n\nexport type AdapterCapabilityMap = Record<AdapterCapability, boolean>;\n\nexport type Adapter = {\n capabilities: AdapterCapabilityMap;\n name: string;\n};\n\nexport type AdapterDefinition = {\n capabilities?: Partial<AdapterCapabilityMap>;\n name: string;\n};\n\nexport type AdapterCapabilityCheck = {\n adapter: string;\n missing: AdapterCapability[];\n ok: boolean;\n required: AdapterCapability[];\n};\n\nconst defaultCapabilities = {\n backgroundLifetime: false,\n crossOriginIsolationHeaders: false,\n nonceInjection: false,\n sharedCache: false,\n staticOutput: false,\n streaming: false,\n webSocket: false,\n webTransport: false,\n} satisfies AdapterCapabilityMap;\n\nexport function defineAdapter(definition: AdapterDefinition): Adapter {\n return {\n capabilities: {\n ...defaultCapabilities,\n ...definition.capabilities,\n },\n name: definition.name,\n };\n}\n\nexport function checkAdapterCapabilities(\n adapter: Adapter,\n required: readonly AdapterCapability[],\n): AdapterCapabilityCheck {\n const uniqueRequired = [...new Set(required)];\n const missing = uniqueRequired.filter(\n (capability) => !adapter.capabilities[capability],\n );\n\n return {\n adapter: adapter.name,\n missing,\n ok: missing.length === 0,\n required: uniqueRequired,\n };\n}\n\nexport function assertAdapterCapabilities(\n adapter: Adapter,\n required: readonly AdapterCapability[],\n) {\n const check = checkAdapterCapabilities(adapter, required);\n\n if (!check.ok) {\n throw new Error(\n `Adapter \"${adapter.name}\" does not support required capabilities: ${check.missing.join(\", \")}.`,\n );\n }\n\n return check;\n}\n"],"names":["defaultCapabilities","defineAdapter","definition","checkAdapterCapabilities","adapter","required","uniqueRequired","missing","capability","assertAdapterCapabilities","check"],"mappings":"AA6BA,MAAMA,IAAsB;AAAA,EAC1B,oBAAoB;AAAA,EACpB,6BAA6B;AAAA,EAC7B,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,cAAc;AAChB;AAEO,SAASC,EAAcC,GAAwC;AACpE,SAAO;AAAA,IACL,cAAc;AAAA,MACZ,GAAGF;AAAA,MACH,GAAGE,EAAW;AAAA,IAAA;AAAA,IAEhB,MAAMA,EAAW;AAAA,EAAA;AAErB;AAEO,SAASC,EACdC,GACAC,GACwB;AACxB,QAAMC,IAAiB,CAAC,GAAG,IAAI,IAAID,CAAQ,CAAC,GACtCE,IAAUD,EAAe;AAAA,IAC7B,CAACE,MAAe,CAACJ,EAAQ,aAAaI,CAAU;AAAA,EAAA;AAGlD,SAAO;AAAA,IACL,SAASJ,EAAQ;AAAA,IACjB,SAAAG;AAAA,IACA,IAAIA,EAAQ,WAAW;AAAA,IACvB,UAAUD;AAAA,EAAA;AAEd;AAEO,SAASG,EACdL,GACAC,GACA;AACA,QAAMK,IAAQP,EAAyBC,GAASC,CAAQ;AAExD,MAAI,CAACK,EAAM;AACT,UAAM,IAAI;AAAA,MACR,YAAYN,EAAQ,IAAI,6CAA6CM,EAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,IAAA;AAIjG,SAAOA;AACT;"}
@@ -1,275 +0,0 @@
1
- import { renderToString as b } from "react-dom/server";
2
- import { createElement as h } from "react";
3
- const g = "__demiurge_data", E = "data-demiurge-hydrate", v = "data-demiurge-fallback";
4
- function w(e, n = {}) {
5
- return S(
6
- JSON.stringify({ data: e, hasData: !0, ...n })
7
- );
8
- }
9
- function F(e) {
10
- const n = e.getElementById(g), t = n?.tagName === "TEMPLATE" ? n.content.textContent : n?.textContent;
11
- if (t)
12
- try {
13
- return JSON.parse(t);
14
- } catch (o) {
15
- throw new Error(
16
- "Demiurge could not parse the initial route data payload.",
17
- { cause: o }
18
- );
19
- }
20
- }
21
- function S(e) {
22
- return e.replace(/&/g, "\\u0026").replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
23
- }
24
- const k = "data-demiurge-structured-data";
25
- function _(e) {
26
- if (e.body) {
27
- const { html: n, ...t } = e.body, { prefix: o, suffix: a } = x({ ...e, body: t });
28
- return `${o}${n}${a}`;
29
- }
30
- return B(e);
31
- }
32
- function x({
33
- body: e,
34
- entrySrc: n,
35
- lang: t = "en",
36
- links: o = [],
37
- metadata: a,
38
- nonce: c,
39
- scripts: s = [],
40
- styles: p = [],
41
- title: d = "Demiurge App"
42
- }) {
43
- const f = a?.title ?? d, $ = [
44
- ...s.map((R) => ` ${D(R, c)}`),
45
- C(e.data, e.navigation),
46
- ...n ? [A(n, c)] : []
47
- ].join(`
48
- `);
49
- return {
50
- prefix: `<!doctype html>
51
- <html lang="${i(t)}">
52
- <head>
53
- ${T({ links: o, metadata: a, nonce: c, styles: p, title: f })}
54
- </head>
55
- <body>
56
- ${O(e)}`,
57
- suffix: `</div>
58
- ${$}
59
- </body>
60
- </html>
61
- `
62
- };
63
- }
64
- function B({
65
- entrySrc: e,
66
- lang: n = "en",
67
- links: t = [],
68
- metadata: o,
69
- nonce: a,
70
- scripts: c = [],
71
- styles: s = [],
72
- title: p = "Demiurge App"
73
- }) {
74
- const d = o?.title ?? p, f = [
75
- I(),
76
- ...c.map(($) => ` ${D($, a)}`),
77
- ...e ? [A(e, a)] : []
78
- ].join(`
79
- `);
80
- return `<!doctype html>
81
- <html lang="${i(n)}">
82
- <head>
83
- ${T({ links: t, metadata: o, nonce: a, styles: s, title: d })}
84
- </head>
85
- <body>
86
- ${f}
87
- </body>
88
- </html>
89
- `;
90
- }
91
- function I(e) {
92
- return ' <div id="root"></div>';
93
- }
94
- function O(e) {
95
- const n = e.fallback ? ` ${v}="${i(e.fallback)}"` : "";
96
- return ` <div id="root" ${E}=""${n}>`;
97
- }
98
- function C(e, n) {
99
- return ` <template id="${g}">${w(e, { navigation: n })}</template>`;
100
- }
101
- function A(e, n) {
102
- return ` <script type="module" src="${i(e)}"${r("nonce", n)}><\/script>`;
103
- }
104
- function T({
105
- links: e,
106
- metadata: n,
107
- nonce: t,
108
- styles: o,
109
- title: a
110
- }) {
111
- return [
112
- l({
113
- content: n?.charset ?? "UTF-8",
114
- name: "charset"
115
- }),
116
- l({
117
- content: n?.viewport ?? "width=device-width, initial-scale=1.0",
118
- name: "viewport"
119
- }),
120
- ` <title>${i(a)}</title>`,
121
- ...n?.description ? [
122
- l({
123
- content: n.description,
124
- name: "description"
125
- })
126
- ] : [],
127
- ...n?.canonical ? [
128
- y({
129
- href: n.canonical,
130
- rel: "canonical"
131
- })
132
- ] : [],
133
- ...M(n),
134
- ...G(n),
135
- ...(n?.custom ?? []).map(N),
136
- ...(n?.structuredData ?? []).map(
137
- (c) => H(c, t)
138
- ),
139
- ...o.map(
140
- (c) => ` <link rel="stylesheet" href="${i(c)}" />`
141
- ),
142
- ...e.map(y)
143
- ].join(`
144
- `);
145
- }
146
- function M(e) {
147
- if (!e?.robots)
148
- return [];
149
- const n = [
150
- e.robots.index === !1 ? "noindex" : "index",
151
- e.robots.follow === !1 ? "nofollow" : "follow"
152
- ];
153
- return [
154
- l({
155
- content: n.join(", "),
156
- name: "robots"
157
- })
158
- ];
159
- }
160
- function G(e) {
161
- return e?.openGraph ? [
162
- e.openGraph.title ? l({
163
- content: e.openGraph.title,
164
- property: "og:title"
165
- }) : null,
166
- e.openGraph.description ? l({
167
- content: e.openGraph.description,
168
- property: "og:description"
169
- }) : null,
170
- e.openGraph.image ? l({
171
- content: e.openGraph.image,
172
- property: "og:image"
173
- }) : null
174
- ].filter((n) => !!n) : [];
175
- }
176
- function N(e) {
177
- return e.kind === "link" ? y(e) : l(e);
178
- }
179
- function H(e, n) {
180
- return ` <script type="application/ld+json"${n ? "" : ` ${k}`}${r("nonce", n)}>${U(JSON.stringify(e.value))}<\/script>`;
181
- }
182
- function l(e) {
183
- if (e.name === "charset")
184
- return ` <meta charset="${i(e.content)}" />`;
185
- const n = e.name ? ` name="${i(e.name)}"` : "", t = e.property ? ` property="${i(e.property)}"` : "";
186
- return ` <meta${n}${t} content="${i(e.content)}" />`;
187
- }
188
- function y(e) {
189
- return ` <link${r("rel", e.rel)}${r("href", e.href)}${r("as", e.as)}${r("type", e.type)}${r("crossorigin", e.crossOrigin)}${r("hreflang", e.hrefLang)} />`;
190
- }
191
- function D(e, n) {
192
- return `<script${r("id", e.id)}${r("src", e.src)}${r("type", e.type ?? L(e.strategy))}${r("nonce", e.nonce ?? n)}${r("integrity", e.integrity)}${r("referrerpolicy", e.referrerPolicy)}${r("data-api", e.dataApi)}${r("data-domain", e.dataDomain)}${m("async", e.async)}${m("defer", e.defer)}><\/script>`;
193
- }
194
- function L(e) {
195
- return e === "module" ? "module" : void 0;
196
- }
197
- function r(e, n) {
198
- return n ? ` ${e}="${i(n)}"` : "";
199
- }
200
- function m(e, n) {
201
- return n ? ` ${e}` : "";
202
- }
203
- function i(e) {
204
- return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll('"', "&quot;");
205
- }
206
- function U(e) {
207
- return e.replaceAll("<", "\\u003c").replaceAll(">", "\\u003e").replaceAll("\u2028", "\\u2028").replaceAll("\u2029", "\\u2029");
208
- }
209
- const u = /* @__PURE__ */ new WeakMap();
210
- function Y(e) {
211
- return u.get(e);
212
- }
213
- function z(e, n) {
214
- u.set(e, n);
215
- }
216
- function W(e, n) {
217
- const t = u.get(e);
218
- t && u.set(n, t);
219
- }
220
- function j(e) {
221
- const n = h(e.page, {
222
- data: e.data,
223
- path: e.path,
224
- pathname: e.pathname
225
- });
226
- return e.layouts.reduceRight(
227
- (t, o) => h(o, {
228
- children: t,
229
- path: e.path,
230
- pathname: e.pathname
231
- }),
232
- n
233
- );
234
- }
235
- function J(e, n = {}) {
236
- const t = b(j(e));
237
- return _({
238
- body: {
239
- data: e.data,
240
- html: t,
241
- navigation: e.render.mode === "static" ? "document" : n.navigation
242
- },
243
- entrySrc: n.clientEntry,
244
- lang: n.lang,
245
- links: e.links,
246
- metadata: e.metadata,
247
- nonce: n.nonce,
248
- scripts: e.scripts,
249
- styles: n.styles,
250
- title: n.title
251
- });
252
- }
253
- function K(e, n = {}) {
254
- const t = J(e, n);
255
- return new Response(t, {
256
- headers: {
257
- "content-type": "text/html; charset=utf-8"
258
- }
259
- });
260
- }
261
- export {
262
- E as H,
263
- k as S,
264
- x as a,
265
- _ as b,
266
- j as c,
267
- J as d,
268
- F as e,
269
- v as f,
270
- Y as g,
271
- W as h,
272
- K as r,
273
- z as s
274
- };
275
- //# sourceMappingURL=ssr-BJejKlkZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ssr-BJejKlkZ.js","sources":["../../src/document/hydration.ts","../../src/document/render.ts","../../src/server/request-metadata.ts","../../src/server/render-tree.ts","../../src/server/ssr.ts"],"sourcesContent":["export type InitialRouteData = {\n data?: unknown;\n hasData: boolean;\n navigation?: \"document\";\n};\n\nexport const HYDRATION_DATA_ELEMENT_ID = \"__demiurge_data\";\nexport const HYDRATION_ROOT_ATTRIBUTE = \"data-demiurge-hydrate\";\n// Marks a server document as a fallback, not a page. The client hydrates markup\n// that it can reproduce. It replaces other markup. This attribute distinguishes\n// a server 404 from a page that does not match the client manifest.\nexport const HYDRATION_FALLBACK_ATTRIBUTE = \"data-demiurge-fallback\";\n\nexport function serializeInitialRouteData(\n data: unknown,\n options: { navigation?: \"document\" } = {},\n) {\n return escapeJsonScript(\n JSON.stringify({ data, hasData: true, ...options }),\n );\n}\n\nexport function readInitialRouteData(source: Document) {\n const element = source.getElementById(HYDRATION_DATA_ELEMENT_ID);\n const serialized = element?.tagName === \"TEMPLATE\"\n ? (element as HTMLTemplateElement).content.textContent\n : element?.textContent;\n\n if (!serialized) {\n return undefined;\n }\n\n try {\n return JSON.parse(serialized) as InitialRouteData;\n } catch (error) {\n throw new Error(\n \"Demiurge could not parse the initial route data payload.\",\n { cause: error },\n );\n }\n}\n\nfunction escapeJsonScript(value: string) {\n return value\n .replace(/&/g, \"\\\\u0026\")\n .replace(/</g, \"\\\\u003c\")\n .replace(/>/g, \"\\\\u003e\")\n .replace(/\\u2028/g, \"\\\\u2028\")\n .replace(/\\u2029/g, \"\\\\u2029\");\n}\n","import {\n HYDRATION_DATA_ELEMENT_ID,\n HYDRATION_FALLBACK_ATTRIBUTE,\n HYDRATION_ROOT_ATTRIBUTE,\n serializeInitialRouteData,\n} from \"./hydration\";\nimport type {\n DocumentMetadataTag,\n LinkTag,\n ResolvedMetadata,\n StructuredDataTag,\n} from \"./metadata\";\nimport type { ScriptTag } from \"./scripts\";\n\nexport const STRUCTURED_DATA_ATTRIBUTE = \"data-demiurge-structured-data\";\n\nexport type DocumentBody = {\n data: unknown;\n fallback?: \"not-found\";\n html: string;\n navigation?: \"document\";\n};\n\nexport type RenderDocumentOptions = {\n body?: DocumentBody;\n entrySrc?: string;\n lang?: string;\n links?: LinkTag[];\n metadata?: ResolvedMetadata;\n nonce?: string;\n scripts?: ScriptTag[];\n styles?: string[];\n title?: string;\n};\n\nexport type RenderDocumentShellOptions = Omit<RenderDocumentOptions, \"body\"> & {\n body: Omit<DocumentBody, \"html\">;\n};\n\nexport function renderDocument(options: RenderDocumentOptions) {\n if (options.body) {\n const { html, ...body } = options.body;\n const { prefix, suffix } = renderDocumentShell({ ...options, body });\n\n return `${prefix}${html}${suffix}`;\n }\n\n return renderDocumentWithoutBody(options);\n}\n\nexport function renderDocumentShell({\n body,\n entrySrc,\n lang = \"en\",\n links = [],\n metadata,\n nonce,\n scripts = [],\n styles = [],\n title = \"Demiurge App\",\n}: RenderDocumentShellOptions) {\n const documentTitle = metadata?.title ?? title;\n const trailingBodyContent = [\n ...scripts.map((scriptTag) => ` ${renderScriptTag(scriptTag, nonce)}`),\n renderBootstrapData(body.data, body.navigation),\n ...(entrySrc ? [renderEntryScript(entrySrc, nonce)] : []),\n ].join(\"\\n\");\n\n return {\n prefix: `<!doctype html>\n<html lang=\"${escapeHtml(lang)}\">\n <head>\n${renderHeadTags({ links, metadata, nonce, styles, title: documentTitle })}\n </head>\n <body>\n${renderRootStart(body)}`,\n suffix: `</div>\n${trailingBodyContent}\n </body>\n</html>\n`,\n };\n}\n\nfunction renderDocumentWithoutBody({\n entrySrc,\n lang = \"en\",\n links = [],\n metadata,\n nonce,\n scripts = [],\n styles = [],\n title = \"Demiurge App\",\n}: RenderDocumentOptions) {\n const documentTitle = metadata?.title ?? title;\n const bodyContent = [\n renderRootElement(),\n ...scripts.map((scriptTag) => ` ${renderScriptTag(scriptTag, nonce)}`),\n ...(entrySrc ? [renderEntryScript(entrySrc, nonce)] : []),\n ].join(\"\\n\");\n\n return `<!doctype html>\n<html lang=\"${escapeHtml(lang)}\">\n <head>\n${renderHeadTags({ links, metadata, nonce, styles, title: documentTitle })}\n </head>\n <body>\n${bodyContent}\n </body>\n</html>\n`;\n}\n\nfunction renderRootElement(body?: DocumentBody) {\n if (!body) {\n return ` <div id=\"root\"></div>`;\n }\n\n return `${renderRootStart(body)}${body.html}</div>`;\n}\n\nfunction renderRootStart(body: Omit<DocumentBody, \"html\">) {\n const fallback = body.fallback\n ? ` ${HYDRATION_FALLBACK_ATTRIBUTE}=\"${escapeHtml(body.fallback)}\"`\n : \"\";\n\n return ` <div id=\"root\" ${HYDRATION_ROOT_ATTRIBUTE}=\"\"${fallback}>`;\n}\n\nfunction renderBootstrapData(data: unknown, navigation?: \"document\") {\n return ` <template id=\"${HYDRATION_DATA_ELEMENT_ID}\">${serializeInitialRouteData(data, { navigation })}</template>`;\n}\n\nfunction renderEntryScript(entrySrc: string, nonce: string | undefined) {\n return ` <script type=\"module\" src=\"${escapeHtml(entrySrc)}\"${renderAttribute(\"nonce\", nonce)}></script>`;\n}\n\nfunction renderHeadTags({\n links,\n metadata,\n nonce,\n styles,\n title,\n}: {\n links: LinkTag[];\n metadata: ResolvedMetadata | undefined;\n nonce: string | undefined;\n styles: string[];\n title: string;\n}) {\n return [\n renderMetaTag({\n content: metadata?.charset ?? \"UTF-8\",\n kind: \"meta\",\n name: \"charset\",\n }),\n renderMetaTag({\n content: metadata?.viewport ?? \"width=device-width, initial-scale=1.0\",\n kind: \"meta\",\n name: \"viewport\",\n }),\n ` <title>${escapeHtml(title)}</title>`,\n ...(metadata?.description\n ? [\n renderMetaTag({\n content: metadata.description,\n kind: \"meta\",\n name: \"description\",\n }),\n ]\n : []),\n ...(metadata?.canonical\n ? [\n renderLinkTag({\n href: metadata.canonical,\n kind: \"link\",\n rel: \"canonical\",\n }),\n ]\n : []),\n ...renderRobotsTags(metadata),\n ...renderOpenGraphTags(metadata),\n ...(metadata?.custom ?? []).map(renderDocumentMetadataTag),\n ...(metadata?.structuredData ?? []).map((tag) =>\n renderStructuredDataTag(tag, nonce),\n ),\n ...styles.map(\n (href) => ` <link rel=\"stylesheet\" href=\"${escapeHtml(href)}\" />`,\n ),\n ...links.map(renderLinkTag),\n ].join(\"\\n\");\n}\n\nfunction renderRobotsTags(metadata: ResolvedMetadata | undefined) {\n if (!metadata?.robots) {\n return [];\n }\n\n const directives = [\n metadata.robots.index === false ? \"noindex\" : \"index\",\n metadata.robots.follow === false ? \"nofollow\" : \"follow\",\n ];\n\n return [\n renderMetaTag({\n content: directives.join(\", \"),\n kind: \"meta\",\n name: \"robots\",\n }),\n ];\n}\n\nfunction renderOpenGraphTags(metadata: ResolvedMetadata | undefined) {\n if (!metadata?.openGraph) {\n return [];\n }\n\n return [\n metadata.openGraph.title\n ? renderMetaTag({\n content: metadata.openGraph.title,\n kind: \"meta\",\n property: \"og:title\",\n })\n : null,\n metadata.openGraph.description\n ? renderMetaTag({\n content: metadata.openGraph.description,\n kind: \"meta\",\n property: \"og:description\",\n })\n : null,\n metadata.openGraph.image\n ? renderMetaTag({\n content: metadata.openGraph.image,\n kind: \"meta\",\n property: \"og:image\",\n })\n : null,\n ].filter((tag): tag is string => Boolean(tag));\n}\n\nfunction renderDocumentMetadataTag(tag: DocumentMetadataTag) {\n if (tag.kind === \"link\") {\n return renderLinkTag(tag);\n }\n\n return renderMetaTag(tag);\n}\n\nfunction renderStructuredDataTag(\n tag: StructuredDataTag,\n nonce: string | undefined,\n) {\n const ownership = nonce ? \"\" : ` ${STRUCTURED_DATA_ATTRIBUTE}`;\n\n return ` <script type=\"application/ld+json\"${ownership}${renderAttribute(\"nonce\", nonce)}>${escapeJsonScript(JSON.stringify(tag.value))}</script>`;\n}\n\nfunction renderMetaTag(tag: DocumentMetadataTag & { kind: \"meta\" }) {\n if (tag.name === \"charset\") {\n return ` <meta charset=\"${escapeHtml(tag.content)}\" />`;\n }\n\n const name = tag.name ? ` name=\"${escapeHtml(tag.name)}\"` : \"\";\n const property = tag.property ? ` property=\"${escapeHtml(tag.property)}\"` : \"\";\n\n return ` <meta${name}${property} content=\"${escapeHtml(tag.content)}\" />`;\n}\n\nfunction renderLinkTag(tag: LinkTag) {\n return ` <link${renderAttribute(\"rel\", tag.rel)}${renderAttribute(\"href\", tag.href)}${renderAttribute(\"as\", tag.as)}${renderAttribute(\"type\", tag.type)}${renderAttribute(\"crossorigin\", tag.crossOrigin)}${renderAttribute(\"hreflang\", tag.hrefLang)} />`;\n}\n\nfunction renderScriptTag(scriptTag: ScriptTag, nonce: string | undefined) {\n return `<script${renderAttribute(\"id\", scriptTag.id)}${renderAttribute(\"src\", scriptTag.src)}${renderAttribute(\"type\", scriptTag.type ?? scriptTypeForStrategy(scriptTag.strategy))}${renderAttribute(\"nonce\", scriptTag.nonce ?? nonce)}${renderAttribute(\"integrity\", scriptTag.integrity)}${renderAttribute(\"referrerpolicy\", scriptTag.referrerPolicy)}${renderAttribute(\"data-api\", scriptTag.dataApi)}${renderAttribute(\"data-domain\", scriptTag.dataDomain)}${renderBooleanAttribute(\"async\", scriptTag.async)}${renderBooleanAttribute(\"defer\", scriptTag.defer)}></script>`;\n}\n\nfunction scriptTypeForStrategy(strategy: ScriptTag[\"strategy\"]) {\n return strategy === \"module\" ? \"module\" : undefined;\n}\n\nfunction renderAttribute(name: string, value: string | undefined) {\n return value ? ` ${name}=\"${escapeHtml(value)}\"` : \"\";\n}\n\nfunction renderBooleanAttribute(name: string, value: boolean | undefined) {\n return value ? ` ${name}` : \"\";\n}\n\nfunction escapeHtml(value: string) {\n return value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\");\n}\n\nfunction escapeJsonScript(value: string) {\n return value\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\">\", \"\\\\u003e\")\n .replaceAll(\"
\", \"\\\\u2028\")\n .replaceAll(\"
\", \"\\\\u2029\");\n}\n","export type RequestConnectionMetadata = {\n clientIp: string;\n};\n\nconst connectionMetadata = new WeakMap<Request, RequestConnectionMetadata>();\n\nexport function getRequestConnectionMetadata(request: Request) {\n return connectionMetadata.get(request);\n}\n\nexport function setRequestConnectionMetadata(\n request: Request,\n metadata: RequestConnectionMetadata,\n) {\n connectionMetadata.set(request, metadata);\n}\n\nexport function copyRequestConnectionMetadata(from: Request, to: Request) {\n const metadata = connectionMetadata.get(from);\n\n if (metadata) {\n connectionMetadata.set(to, metadata);\n }\n}\n","import { createElement, type ReactNode } from \"react\";\nimport type { LoadedRouteMatch } from \"../router\";\n\nexport function createPageRenderTree(match: LoadedRouteMatch) {\n const page = createElement(match.page, {\n data: match.data,\n path: match.path,\n pathname: match.pathname,\n });\n\n return match.layouts.reduceRight<ReactNode>(\n (children, Layout) =>\n createElement(Layout, {\n children,\n path: match.path,\n pathname: match.pathname,\n }),\n page,\n );\n}\n","import { renderToString } from \"react-dom/server\";\nimport { renderDocument } from \"../document\";\nimport type { LoadedRouteMatch } from \"../router\";\nimport { createPageRenderTree } from \"./render-tree\";\n\nexport type SsrOptions = {\n clientEntry?: string;\n lang?: string;\n navigation?: \"document\";\n styles?: string[];\n title?: string;\n};\n\nexport type SsrRenderOptions = SsrOptions & {\n nonce?: string;\n onStreamError?: (error: unknown) => void;\n signal?: AbortSignal;\n transformDocument?: (html: string) => string | Promise<string>;\n};\n\nexport function renderPageDocument(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n) {\n const html = renderToString(createPageRenderTree(match));\n\n return renderDocument({\n body: {\n data: match.data,\n html,\n navigation: match.render.mode === \"static\"\n ? \"document\"\n : options.navigation,\n },\n entrySrc: options.clientEntry,\n lang: options.lang,\n links: match.links,\n metadata: match.metadata,\n nonce: options.nonce,\n scripts: match.scripts,\n styles: options.styles,\n title: options.title,\n });\n}\n\nexport function renderPageResponse(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n) {\n const html = renderPageDocument(match, options);\n\n return new Response(html, {\n headers: {\n \"content-type\": \"text/html; charset=utf-8\",\n },\n });\n}\n"],"names":["HYDRATION_DATA_ELEMENT_ID","HYDRATION_ROOT_ATTRIBUTE","HYDRATION_FALLBACK_ATTRIBUTE","serializeInitialRouteData","data","options","escapeJsonScript","readInitialRouteData","source","element","serialized","error","value","STRUCTURED_DATA_ATTRIBUTE","renderDocument","html","body","prefix","suffix","renderDocumentShell","renderDocumentWithoutBody","entrySrc","lang","links","metadata","nonce","scripts","styles","title","documentTitle","trailingBodyContent","scriptTag","renderScriptTag","renderBootstrapData","renderEntryScript","escapeHtml","renderHeadTags","renderRootStart","bodyContent","renderRootElement","fallback","navigation","renderAttribute","renderMetaTag","renderLinkTag","renderRobotsTags","renderOpenGraphTags","renderDocumentMetadataTag","tag","renderStructuredDataTag","href","directives","name","property","scriptTypeForStrategy","renderBooleanAttribute","strategy","connectionMetadata","getRequestConnectionMetadata","request","setRequestConnectionMetadata","copyRequestConnectionMetadata","from","to","createPageRenderTree","match","page","createElement","children","Layout","renderPageDocument","renderToString","renderPageResponse"],"mappings":"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"}