@demiurgejs/core 0.2.0-beta.5 → 0.2.0-beta.6

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 (92) hide show
  1. package/README.md +14 -0
  2. package/bin/demiurge.mjs +6 -0
  3. package/dist/chunks/{document-shell-9GPwtcTt.js → document-shell-C0aPrkhd.js} +2 -2
  4. package/dist/chunks/{document-shell-9GPwtcTt.js.map → document-shell-C0aPrkhd.js.map} +1 -1
  5. package/dist/chunks/image-CRerJ5BY.js +145 -0
  6. package/dist/chunks/image-CRerJ5BY.js.map +1 -0
  7. package/dist/chunks/{image-codec-Dh1POFhE.js → image-codec-CQ8Cwxwb.js} +2 -2
  8. package/dist/chunks/{image-codec-Dh1POFhE.js.map → image-codec-CQ8Cwxwb.js.map} +1 -1
  9. package/dist/chunks/{images-CG7ZzayG.js → images-QgdmLyQ3.js} +11 -11
  10. package/dist/chunks/{images-CG7ZzayG.js.map → images-QgdmLyQ3.js.map} +1 -1
  11. package/dist/chunks/{index-0MNiR_wo.js → index-LYve1rQp.js} +286 -351
  12. package/dist/chunks/index-LYve1rQp.js.map +1 -0
  13. package/dist/chunks/links-iU22QkCE.js +68 -0
  14. package/dist/chunks/links-iU22QkCE.js.map +1 -0
  15. package/dist/chunks/{plugin-BZauDxRY.js → plugin-bkP6WwrS.js} +13 -12
  16. package/dist/chunks/{plugin-BZauDxRY.js.map → plugin-bkP6WwrS.js.map} +1 -1
  17. package/dist/chunks/runtime-BH519j2t.js +294 -0
  18. package/dist/chunks/runtime-BH519j2t.js.map +1 -0
  19. package/dist/chunks/streaming-BlKlC3nw.js +427 -0
  20. package/dist/chunks/streaming-BlKlC3nw.js.map +1 -0
  21. package/dist/chunks/{testing-CUwGj2ie.js → testing-BEW1nchS.js} +645 -630
  22. package/dist/chunks/testing-BEW1nchS.js.map +1 -0
  23. package/dist/chunks/{vite-QoqrGl6f.js → vite-BADZA8Fl.js} +73 -70
  24. package/dist/chunks/vite-BADZA8Fl.js.map +1 -0
  25. package/dist/cli.d.ts +8 -2
  26. package/dist/cli.d.ts.map +1 -1
  27. package/dist/cli.js +186 -122
  28. package/dist/cli.js.map +1 -1
  29. package/dist/config/index.js +2 -2
  30. package/dist/config/types.d.ts +3 -1
  31. package/dist/config/types.d.ts.map +1 -1
  32. package/dist/config/validate.d.ts.map +1 -1
  33. package/dist/data/cache.d.ts +5 -0
  34. package/dist/data/cache.d.ts.map +1 -1
  35. package/dist/data/index.d.ts +1 -1
  36. package/dist/data/index.d.ts.map +1 -1
  37. package/dist/data/testing.d.ts.map +1 -1
  38. package/dist/data/testing.js +101 -67
  39. package/dist/data/testing.js.map +1 -1
  40. package/dist/data/tiered.d.ts.map +1 -1
  41. package/dist/edge/index.js +27 -26
  42. package/dist/edge/index.js.map +1 -1
  43. package/dist/edge/stores.d.ts.map +1 -1
  44. package/dist/index.d.ts +1 -1
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +126 -125
  47. package/dist/index.js.map +1 -1
  48. package/dist/internal/testing.js +2 -2
  49. package/dist/kv/index.js +7 -6
  50. package/dist/kv/index.js.map +1 -1
  51. package/dist/kv/store.d.ts.map +1 -1
  52. package/dist/node/http.d.ts +2 -0
  53. package/dist/node/http.d.ts.map +1 -1
  54. package/dist/node/index.d.ts +1 -1
  55. package/dist/node/index.d.ts.map +1 -1
  56. package/dist/node/index.js +12 -11
  57. package/dist/node/index.js.map +1 -1
  58. package/dist/node/serve.d.ts +4 -0
  59. package/dist/node/serve.d.ts.map +1 -1
  60. package/dist/redis/index.js +29 -28
  61. package/dist/redis/index.js.map +1 -1
  62. package/dist/redis/store.d.ts.map +1 -1
  63. package/dist/route/serialization.d.ts +4 -4
  64. package/dist/route/serialization.d.ts.map +1 -1
  65. package/dist/static/index.d.ts.map +1 -1
  66. package/dist/static/index.js +255 -255
  67. package/dist/static/index.js.map +1 -1
  68. package/dist/static/testing.d.ts +26 -0
  69. package/dist/static/testing.d.ts.map +1 -0
  70. package/dist/static/testing.js +76 -0
  71. package/dist/static/testing.js.map +1 -0
  72. package/dist/testing/index.d.ts +47 -0
  73. package/dist/testing/index.d.ts.map +1 -0
  74. package/dist/testing/index.js +99 -0
  75. package/dist/testing/index.js.map +1 -0
  76. package/dist/vercel/build.d.ts +31 -0
  77. package/dist/vercel/build.d.ts.map +1 -0
  78. package/dist/vercel/config.d.ts +15 -0
  79. package/dist/vercel/config.d.ts.map +1 -0
  80. package/dist/vercel/index.d.ts +7 -0
  81. package/dist/vercel/index.d.ts.map +1 -0
  82. package/dist/vercel/index.js +11 -0
  83. package/dist/vercel/index.js.map +1 -0
  84. package/dist/vercel/runtime.d.ts +29 -0
  85. package/dist/vercel/runtime.d.ts.map +1 -0
  86. package/dist/vite/index.js +1 -1
  87. package/package.json +13 -1
  88. package/dist/chunks/index-0MNiR_wo.js.map +0 -1
  89. package/dist/chunks/streaming-GYIsVTQH.js +0 -560
  90. package/dist/chunks/streaming-GYIsVTQH.js.map +0 -1
  91. package/dist/chunks/testing-CUwGj2ie.js.map +0 -1
  92. package/dist/chunks/vite-QoqrGl6f.js.map +0 -1
@@ -0,0 +1,294 @@
1
+ import { mkdir as p, mkdtemp as j, cp as d, writeFile as f, rm as v, rename as C } from "node:fs/promises";
2
+ import { resolve as h, dirname as E, join as n, relative as y, sep as R } from "node:path";
3
+ import { isIP as N } from "node:net";
4
+ import { d as O } from "./index-LYve1rQp.js";
5
+ import { v as H, r as P, t as k, b as L, U as A, w as F, a as I } from "./streaming-BlKlC3nw.js";
6
+ function ie(e = {}) {
7
+ const r = {
8
+ adapter: "vercel-node",
9
+ runtime: e.runtime ?? "nodejs22.x",
10
+ ...e.maxDuration === void 0 ? {} : { maxDuration: e.maxDuration },
11
+ ...e.regions === void 0 ? {} : { regions: [...e.regions] }
12
+ };
13
+ return x(r), r;
14
+ }
15
+ function x(e) {
16
+ if (e.adapter !== "vercel-node" || e.runtime !== "nodejs22.x")
17
+ throw new Error("The Vercel Node deployment configuration is not valid.");
18
+ if (e.maxDuration !== void 0 && (!Number.isSafeInteger(e.maxDuration) || e.maxDuration < 1))
19
+ throw new Error("Vercel maxDuration must be a positive integer.");
20
+ if (e.regions !== void 0 && (!Array.isArray(e.regions) || e.regions.length === 0 || e.regions.some(
21
+ (r) => typeof r != "string" || r.trim() !== r || !r
22
+ )))
23
+ throw new Error("Vercel regions must contain one or more region identifiers.");
24
+ }
25
+ async function se(e) {
26
+ x(e.deployment);
27
+ const r = h(e.projectRoot), t = h(e.clientDir), o = h(e.serverDir), a = h(r, ".vercel/output");
28
+ if (w(a, t) || w(a, o) || w(t, o))
29
+ throw new Error("Vercel build directories must not overlap.");
30
+ await p(E(a), { recursive: !0 });
31
+ const i = await j(n(E(a), "output-demiurge-"));
32
+ try {
33
+ const u = n(i, "static"), s = n(i, "functions", "demiurge.func");
34
+ await d(t, u, {
35
+ filter: (c) => !q(t, c),
36
+ recursive: !0
37
+ }), await p(s, { recursive: !0 }), await d(o, n(s, "server"), { recursive: !0 }), await d(
38
+ n(t, "demiurge-manifest.json"),
39
+ n(s, "demiurge-manifest.json")
40
+ ), await f(n(s, "index.mjs"), T()), await f(n(s, "package.json"), `{"type":"module"}
41
+ `), await $(r, s), await f(
42
+ n(s, ".vc-config.json"),
43
+ `${JSON.stringify(_(e.deployment), null, 2)}
44
+ `
45
+ ), await f(
46
+ n(i, "config.json"),
47
+ `${JSON.stringify(U(), null, 2)}
48
+ `
49
+ ), await v(a, { force: !0, recursive: !0 }), await C(i, a);
50
+ } catch (u) {
51
+ throw await v(i, { force: !0, recursive: !0 }), u;
52
+ }
53
+ return a;
54
+ }
55
+ function _(e) {
56
+ return {
57
+ handler: "index.mjs",
58
+ launcherType: "Nodejs",
59
+ runtime: e.runtime,
60
+ shouldAddHelpers: !0,
61
+ supportsCancellation: !0,
62
+ supportsResponseStreaming: !0,
63
+ ...e.maxDuration === void 0 ? {} : { maxDuration: e.maxDuration },
64
+ ...e.regions === void 0 ? {} : { regions: e.regions }
65
+ };
66
+ }
67
+ function U() {
68
+ return {
69
+ routes: [
70
+ { handle: "filesystem" },
71
+ { dest: "/demiurge", src: "^/.*$" }
72
+ ],
73
+ version: 3
74
+ };
75
+ }
76
+ function T() {
77
+ return `import { readFile } from "node:fs/promises";
78
+ import { createVercelFunction } from "@demiurgejs/core/vercel";
79
+ import * as application from "./server/server-entry.js";
80
+
81
+ const manifest = JSON.parse(await readFile(
82
+ new URL("./demiurge-manifest.json", import.meta.url),
83
+ "utf8",
84
+ ));
85
+
86
+ export default createVercelFunction({
87
+ createHandler({ page }) {
88
+ return application.createHandler(page);
89
+ },
90
+ manifest,
91
+ });
92
+ `;
93
+ }
94
+ async function $(e, r) {
95
+ const t = n(e, "node_modules", "@demiurgejs", "core"), o = n(r, "node_modules", "@demiurgejs", "core");
96
+ try {
97
+ await d(n(t, "dist"), n(o, "dist"), {
98
+ dereference: !0,
99
+ recursive: !0
100
+ }), await d(n(t, "package.json"), n(o, "package.json"));
101
+ } catch (i) {
102
+ throw new Error(
103
+ 'Demiurge could not package the Vercel runtime dependency "@demiurgejs/core".',
104
+ { cause: i }
105
+ );
106
+ }
107
+ const a = [
108
+ [n(e, "node_modules", "react"), "react"],
109
+ [n(e, "node_modules", "react-dom"), "react-dom"]
110
+ ];
111
+ for (const [i, u] of a) {
112
+ const s = n(r, "node_modules", u);
113
+ try {
114
+ await d(i, s, { dereference: !0, recursive: !0 });
115
+ } catch (c) {
116
+ throw new Error(
117
+ `Demiurge could not package the Vercel runtime dependency ${JSON.stringify(u)}. Install it for the application or the framework.`,
118
+ { cause: c }
119
+ );
120
+ }
121
+ }
122
+ }
123
+ function q(e, r) {
124
+ const t = y(e, r).split(R).join("/");
125
+ return t === "index.html" || t === "demiurge-manifest.json" || t === "demiurge-static-manifest.json";
126
+ }
127
+ function w(e, r) {
128
+ return b(e, r) || b(r, e);
129
+ }
130
+ function b(e, r) {
131
+ const t = y(e, r);
132
+ return t === "" || !t.startsWith(`..${R}`) && t !== "..";
133
+ }
134
+ const J = O({
135
+ name: "vercel-node",
136
+ capabilities: {
137
+ crossOriginIsolationHeaders: !0,
138
+ nonceInjection: !0,
139
+ streaming: !0
140
+ }
141
+ }), M = {
142
+ app: "demiurge-vercel",
143
+ environment: "unavailable",
144
+ schemaVersion: 1
145
+ };
146
+ function ce(e) {
147
+ const r = e.env ?? process.env, t = W(e.allowedHosts, r);
148
+ H({ allowedHosts: t });
149
+ const o = e.onError ?? Y, a = {
150
+ namespace: M,
151
+ store: Z()
152
+ }, i = ee(), u = Promise.resolve(e.createHandler({
153
+ page: {
154
+ adapter: J,
155
+ cacheStore: a,
156
+ clientEntry: e.manifest.clientEntry,
157
+ rateLimitStore: i,
158
+ renderPage: P,
159
+ styles: e.manifest.styles
160
+ }
161
+ }));
162
+ return async function(c, l) {
163
+ const g = K(c, l);
164
+ try {
165
+ const m = k(c, {
166
+ allowedHosts: t,
167
+ clientIp: z(c),
168
+ scheme: B(c),
169
+ signal: g.signal
170
+ }), V = G(
171
+ await (await u)(m)
172
+ );
173
+ await L(l, V);
174
+ } catch (m) {
175
+ if (g.signal.aborted)
176
+ return;
177
+ if (m instanceof A) {
178
+ F(l);
179
+ return;
180
+ }
181
+ if (m instanceof I) {
182
+ Q(l);
183
+ return;
184
+ }
185
+ o(m, c), X(l);
186
+ } finally {
187
+ g.cleanup();
188
+ }
189
+ };
190
+ }
191
+ function W(e, r) {
192
+ const t = r.ALLOWED_HOSTS?.split(",") ?? [], o = [
193
+ ...e ?? [],
194
+ ...t,
195
+ r.VERCEL_URL,
196
+ r.VERCEL_PROJECT_PRODUCTION_URL
197
+ ].map((a) => a?.trim()).filter((a) => !!a);
198
+ return [...new Set(o)];
199
+ }
200
+ function B(e) {
201
+ const r = D(e.headers["x-forwarded-proto"]);
202
+ if (r === "http" || r === "https")
203
+ return r;
204
+ if (r === void 0) return "http";
205
+ throw new Error(`Vercel sent an unsupported request protocol "${r}".`);
206
+ }
207
+ function z(e) {
208
+ const r = D(e.headers["x-vercel-forwarded-for"]);
209
+ if (r !== void 0) {
210
+ if (N(r) === 0)
211
+ throw new Error(`Vercel sent an invalid client address "${r}".`);
212
+ return r;
213
+ }
214
+ }
215
+ function D(e) {
216
+ if (typeof e == "string") return e.trim();
217
+ if (e !== void 0)
218
+ throw new Error("Vercel sent a repeated request header.");
219
+ }
220
+ function G(e) {
221
+ const r = new Headers(e.headers);
222
+ return r.set("cache-control", "private, no-store"), r.set("vercel-cdn-cache-control", "no-store"), new Response(e.body, {
223
+ headers: r,
224
+ status: e.status,
225
+ statusText: e.statusText
226
+ });
227
+ }
228
+ function K(e, r) {
229
+ const t = new AbortController(), o = () => {
230
+ t.signal.aborted || t.abort(new DOMException("Client disconnected.", "AbortError"));
231
+ }, a = () => {
232
+ r.writableFinished || o();
233
+ };
234
+ return e.once("aborted", o), r.once("close", a), {
235
+ cleanup() {
236
+ e.off("aborted", o), r.off("close", a);
237
+ },
238
+ signal: t.signal
239
+ };
240
+ }
241
+ function Q(e) {
242
+ e.statusCode = 421, e.setHeader("content-type", "text/plain; charset=utf-8"), e.end("Misdirected Request");
243
+ }
244
+ function X(e) {
245
+ if (e.headersSent || e.writableEnded) {
246
+ e.destroy();
247
+ return;
248
+ }
249
+ e.statusCode = 500, e.setHeader("content-type", "text/plain; charset=utf-8"), e.end("Internal Server Error");
250
+ }
251
+ function Y(e) {
252
+ console.error(e);
253
+ }
254
+ class S extends Error {
255
+ constructor(r) {
256
+ super(r), this.name = "VercelSharedStoreError";
257
+ }
258
+ }
259
+ function Z() {
260
+ const e = () => {
261
+ throw new S(
262
+ 'Demiurge Vercel has no shared cache store. Pass a shared CacheStore, or keep the cache scope at "request".'
263
+ );
264
+ };
265
+ return {
266
+ capabilities: { atomicity: "best-effort" },
267
+ acquireRefreshLease: e,
268
+ delete: e,
269
+ get: e,
270
+ invalidateTags: e,
271
+ publishRefresh: e,
272
+ releaseRefreshLease: e,
273
+ set: e
274
+ };
275
+ }
276
+ function ee() {
277
+ return {
278
+ increment() {
279
+ throw new S(
280
+ "Demiurge Vercel has no shared rate limit store. Pass a shared RateLimitStore, or remove the rate limit policy."
281
+ );
282
+ }
283
+ };
284
+ }
285
+ export {
286
+ U as a,
287
+ ce as b,
288
+ _ as c,
289
+ ie as d,
290
+ J as e,
291
+ se as g,
292
+ x as v
293
+ };
294
+ //# sourceMappingURL=runtime-BH519j2t.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-BH519j2t.js","sources":["../../src/vercel/config.ts","../../src/vercel/build.ts","../../src/vercel/runtime.ts"],"sourcesContent":["export type VercelNodeRuntime = \"nodejs22.x\";\n\nexport type VercelNodeOptions = {\n maxDuration?: number;\n regions?: readonly string[];\n runtime?: VercelNodeRuntime;\n};\n\nexport type VercelNodeDeployment = {\n adapter: \"vercel-node\";\n maxDuration?: number;\n regions?: string[];\n runtime: VercelNodeRuntime;\n};\n\nexport function vercelNode(\n options: VercelNodeOptions = {},\n): VercelNodeDeployment {\n const deployment: VercelNodeDeployment = {\n adapter: \"vercel-node\",\n runtime: options.runtime ?? \"nodejs22.x\",\n ...(options.maxDuration === undefined\n ? {}\n : { maxDuration: options.maxDuration }),\n ...(options.regions === undefined\n ? {}\n : { regions: [...options.regions] }),\n };\n\n validateVercelNodeDeployment(deployment);\n return deployment;\n}\n\nexport function validateVercelNodeDeployment(\n deployment: VercelNodeDeployment,\n) {\n if (\n deployment.adapter !== \"vercel-node\" ||\n deployment.runtime !== \"nodejs22.x\"\n ) {\n throw new Error(\"The Vercel Node deployment configuration is not valid.\");\n }\n\n if (\n deployment.maxDuration !== undefined &&\n (!Number.isSafeInteger(deployment.maxDuration) ||\n deployment.maxDuration < 1)\n ) {\n throw new Error(\"Vercel maxDuration must be a positive integer.\");\n }\n\n if (\n deployment.regions !== undefined &&\n (!Array.isArray(deployment.regions) ||\n deployment.regions.length === 0 ||\n deployment.regions.some((region) =>\n typeof region !== \"string\" || region.trim() !== region || !region\n ))\n ) {\n throw new Error(\"Vercel regions must contain one or more region identifiers.\");\n }\n}\n","import {\n cp,\n mkdir,\n mkdtemp,\n rename,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { dirname, join, relative, resolve, sep } from \"node:path\";\nimport type { VercelNodeDeployment } from \"./config\";\nimport { validateVercelNodeDeployment } from \"./config\";\n\nexport type GenerateVercelNodeOutputOptions = {\n clientDir: string;\n deployment: VercelNodeDeployment;\n projectRoot: string;\n serverDir: string;\n};\n\nexport async function generateVercelNodeOutput(\n options: GenerateVercelNodeOutputOptions,\n) {\n validateVercelNodeDeployment(options.deployment);\n const projectRoot = resolve(options.projectRoot);\n const clientDir = resolve(options.clientDir);\n const serverDir = resolve(options.serverDir);\n const outputRoot = resolve(projectRoot, \".vercel/output\");\n\n if (\n overlaps(outputRoot, clientDir) ||\n overlaps(outputRoot, serverDir) ||\n overlaps(clientDir, serverDir)\n ) {\n throw new Error(\"Vercel build directories must not overlap.\");\n }\n\n await mkdir(dirname(outputRoot), { recursive: true });\n const staging = await mkdtemp(join(dirname(outputRoot), \"output-demiurge-\"));\n try {\n const staticDir = join(staging, \"static\");\n const functionDir = join(staging, \"functions\", \"demiurge.func\");\n await cp(clientDir, staticDir, {\n filter: (source) => !isFrameworkManifest(clientDir, source),\n recursive: true,\n });\n await mkdir(functionDir, { recursive: true });\n await cp(serverDir, join(functionDir, \"server\"), { recursive: true });\n await cp(\n join(clientDir, \"demiurge-manifest.json\"),\n join(functionDir, \"demiurge-manifest.json\"),\n );\n await writeFile(join(functionDir, \"index.mjs\"), createFunctionEntry());\n await writeFile(join(functionDir, \"package.json\"), '{\"type\":\"module\"}\\n');\n await copyRuntimePackages(projectRoot, functionDir);\n await writeFile(\n join(functionDir, \".vc-config.json\"),\n `${JSON.stringify(createFunctionConfig(options.deployment), null, 2)}\\n`,\n );\n await writeFile(\n join(staging, \"config.json\"),\n `${JSON.stringify(createOutputConfig(), null, 2)}\\n`,\n );\n await rm(outputRoot, { force: true, recursive: true });\n await rename(staging, outputRoot);\n } catch (error) {\n await rm(staging, { force: true, recursive: true });\n throw error;\n }\n\n return outputRoot;\n}\n\nexport function createFunctionConfig(deployment: VercelNodeDeployment) {\n return {\n handler: \"index.mjs\",\n launcherType: \"Nodejs\",\n runtime: deployment.runtime,\n shouldAddHelpers: true,\n supportsCancellation: true,\n supportsResponseStreaming: true,\n ...(deployment.maxDuration === undefined\n ? {}\n : { maxDuration: deployment.maxDuration }),\n ...(deployment.regions === undefined ? {} : { regions: deployment.regions }),\n };\n}\n\nexport function createOutputConfig() {\n return {\n routes: [\n { handle: \"filesystem\" },\n { dest: \"/demiurge\", src: \"^/.*$\" },\n ],\n version: 3,\n };\n}\n\nfunction createFunctionEntry() {\n return `import { readFile } from \"node:fs/promises\";\nimport { createVercelFunction } from \"@demiurgejs/core/vercel\";\nimport * as application from \"./server/server-entry.js\";\n\nconst manifest = JSON.parse(await readFile(\n new URL(\"./demiurge-manifest.json\", import.meta.url),\n \"utf8\",\n));\n\nexport default createVercelFunction({\n createHandler({ page }) {\n return application.createHandler(page);\n },\n manifest,\n});\n`;\n}\n\nasync function copyRuntimePackages(projectRoot: string, functionDir: string) {\n const coreSource = join(projectRoot, \"node_modules\", \"@demiurgejs\", \"core\");\n const coreDestination = join(functionDir, \"node_modules\", \"@demiurgejs\", \"core\");\n try {\n await cp(join(coreSource, \"dist\"), join(coreDestination, \"dist\"), {\n dereference: true,\n recursive: true,\n });\n await cp(join(coreSource, \"package.json\"), join(coreDestination, \"package.json\"));\n } catch (error) {\n throw new Error(\n \"Demiurge could not package the Vercel runtime dependency \\\"@demiurgejs/core\\\".\",\n { cause: error },\n );\n }\n\n const runtimePackages = [\n [join(projectRoot, \"node_modules\", \"react\"), \"react\"],\n [join(projectRoot, \"node_modules\", \"react-dom\"), \"react-dom\"],\n ] as const;\n\n for (const [source, name] of runtimePackages) {\n const destination = join(functionDir, \"node_modules\", name);\n try {\n await cp(source, destination, { dereference: true, recursive: true });\n } catch (error) {\n throw new Error(\n `Demiurge could not package the Vercel runtime dependency ${JSON.stringify(name)}. Install it for the application or the framework.`,\n { cause: error },\n );\n }\n }\n}\n\nfunction isFrameworkManifest(root: string, source: string) {\n const file = relative(root, source).split(sep).join(\"/\");\n return file === \"index.html\" || file === \"demiurge-manifest.json\" ||\n file === \"demiurge-static-manifest.json\";\n}\n\nfunction overlaps(first: string, second: string) {\n return isWithin(first, second) || isWithin(second, first);\n}\n\nfunction isWithin(root: string, target: string) {\n const path = relative(root, target);\n return path === \"\" || (!path.startsWith(`..${sep}`) && path !== \"..\");\n}\n","import { isIP } from \"node:net\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { defineAdapter, type Adapter } from \"../adapter\";\nimport type { ClientBuildManifest } from \"../manifest\";\nimport {\n toWebRequest,\n UntrustedHostError,\n UnsupportedMethodError,\n validateNodeOriginPolicy,\n writeNotImplemented,\n writeWebResponse,\n} from \"../node/http\";\nimport { renderNodePageResponse } from \"../node/streaming\";\nimport {\n type PageRenderer,\n type RequestCacheStoreOptions,\n type RequestHandler,\n} from \"../server\";\nimport type { CacheStore } from \"../data\";\nimport type { RateLimitStore } from \"../security\";\n\nexport const vercelNodeAdapter = defineAdapter({\n name: \"vercel-node\",\n capabilities: {\n crossOriginIsolationHeaders: true,\n nonceInjection: true,\n streaming: true,\n },\n});\n\nexport type VercelBuildPageOptions = {\n adapter: Adapter;\n cacheStore: RequestCacheStoreOptions;\n clientEntry: string;\n rateLimitStore: RateLimitStore;\n renderPage: PageRenderer;\n styles: string[];\n};\n\nexport type VercelBuildContext = {\n page: VercelBuildPageOptions;\n root?: string;\n};\n\nexport type VercelFunctionEnvironment = Record<string, string | undefined>;\n\nexport type VercelFunctionOptions = {\n allowedHosts?: readonly string[];\n createHandler: (\n context: VercelBuildContext,\n ) => RequestHandler | Promise<RequestHandler>;\n env?: VercelFunctionEnvironment;\n manifest: ClientBuildManifest;\n onError?: (error: unknown, request: IncomingMessage) => void;\n};\n\nexport type VercelRequestListener = (\n request: IncomingMessage,\n response: ServerResponse,\n) => Promise<void>;\n\nconst unavailableCacheNamespace = {\n app: \"demiurge-vercel\",\n environment: \"unavailable\",\n schemaVersion: 1,\n} as const;\n\nexport function createVercelFunction(\n options: VercelFunctionOptions,\n): VercelRequestListener {\n const environment = options.env ?? process.env;\n const allowedHosts = resolveAllowedHosts(options.allowedHosts, environment);\n validateNodeOriginPolicy({ allowedHosts });\n const onError = options.onError ?? defaultOnError;\n const cacheStore: RequestCacheStoreOptions = {\n namespace: unavailableCacheNamespace,\n store: createUnavailableCacheStore(),\n };\n const rateLimitStore = createUnavailableRateLimitStore();\n const handler = Promise.resolve(options.createHandler({\n page: {\n adapter: vercelNodeAdapter,\n cacheStore,\n clientEntry: options.manifest.clientEntry,\n rateLimitStore,\n renderPage: renderNodePageResponse,\n styles: options.manifest.styles,\n },\n }));\n\n return async function handleVercelRequest(request, response) {\n const connection = createRequestAbort(request, response);\n\n try {\n const webRequest = toWebRequest(request, {\n allowedHosts,\n clientIp: resolveVercelClientIp(request),\n scheme: resolveVercelScheme(request),\n signal: connection.signal,\n });\n const webResponse = withDynamicCachePolicy(\n await (await handler)(webRequest),\n );\n\n await writeWebResponse(response, webResponse);\n } catch (error) {\n if (connection.signal.aborted) {\n return;\n }\n\n if (error instanceof UnsupportedMethodError) {\n writeNotImplemented(response);\n return;\n }\n\n if (error instanceof UntrustedHostError) {\n writeMisdirectedRequest(response);\n return;\n }\n\n onError(error, request);\n writeServerError(response);\n } finally {\n connection.cleanup();\n }\n };\n}\n\nfunction resolveAllowedHosts(\n configured: readonly string[] | undefined,\n environment: VercelFunctionEnvironment,\n) {\n const declared = environment.ALLOWED_HOSTS?.split(\",\") ?? [];\n const hosts = [\n ...(configured ?? []),\n ...declared,\n environment.VERCEL_URL,\n environment.VERCEL_PROJECT_PRODUCTION_URL,\n ]\n .map((value) => value?.trim())\n .filter((value): value is string => Boolean(value));\n\n return [...new Set(hosts)];\n}\n\nfunction resolveVercelScheme(request: IncomingMessage) {\n const value = singleHeader(request.headers[\"x-forwarded-proto\"]);\n\n if (value === \"http\" || value === \"https\") {\n return value;\n }\n\n if (value === undefined) return \"http\";\n\n throw new Error(`Vercel sent an unsupported request protocol \"${value}\".`);\n}\n\nfunction resolveVercelClientIp(request: IncomingMessage) {\n const value = singleHeader(request.headers[\"x-vercel-forwarded-for\"]);\n\n if (value === undefined) {\n return undefined;\n }\n\n if (isIP(value) === 0) {\n throw new Error(`Vercel sent an invalid client address \"${value}\".`);\n }\n\n return value;\n}\n\nfunction singleHeader(value: string | string[] | undefined) {\n if (typeof value === \"string\") return value.trim();\n if (value === undefined) return undefined;\n throw new Error(\"Vercel sent a repeated request header.\");\n}\n\nfunction withDynamicCachePolicy(response: Response) {\n const headers = new Headers(response.headers);\n headers.set(\"cache-control\", \"private, no-store\");\n headers.set(\"vercel-cdn-cache-control\", \"no-store\");\n\n return new Response(response.body, {\n headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\nfunction createRequestAbort(\n request: IncomingMessage,\n response: ServerResponse,\n) {\n const controller = new AbortController();\n const abort = () => {\n if (!controller.signal.aborted) {\n controller.abort(new DOMException(\"Client disconnected.\", \"AbortError\"));\n }\n };\n const abortPrematureResponse = () => {\n if (!response.writableFinished) {\n abort();\n }\n };\n\n request.once(\"aborted\", abort);\n response.once(\"close\", abortPrematureResponse);\n\n return {\n cleanup() {\n request.off(\"aborted\", abort);\n response.off(\"close\", abortPrematureResponse);\n },\n signal: controller.signal,\n };\n}\n\nfunction writeMisdirectedRequest(response: ServerResponse) {\n response.statusCode = 421;\n response.setHeader(\"content-type\", \"text/plain; charset=utf-8\");\n response.end(\"Misdirected Request\");\n}\n\nfunction writeServerError(response: ServerResponse) {\n if (response.headersSent || response.writableEnded) {\n response.destroy();\n return;\n }\n\n response.statusCode = 500;\n response.setHeader(\"content-type\", \"text/plain; charset=utf-8\");\n response.end(\"Internal Server Error\");\n}\n\nfunction defaultOnError(error: unknown) {\n console.error(error);\n}\n\nclass VercelSharedStoreError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"VercelSharedStoreError\";\n }\n}\n\nfunction createUnavailableCacheStore(): CacheStore {\n const refuse = (): never => {\n throw new VercelSharedStoreError(\n 'Demiurge Vercel has no shared cache store. Pass a shared CacheStore, or keep the cache scope at \"request\".',\n );\n };\n\n return {\n capabilities: { atomicity: \"best-effort\" },\n acquireRefreshLease: refuse,\n delete: refuse,\n get: refuse,\n invalidateTags: refuse,\n publishRefresh: refuse,\n releaseRefreshLease: refuse,\n set: refuse,\n };\n}\n\nfunction createUnavailableRateLimitStore(): RateLimitStore {\n return {\n increment() {\n throw new VercelSharedStoreError(\n \"Demiurge Vercel has no shared rate limit store. Pass a shared RateLimitStore, or remove the rate limit policy.\",\n );\n },\n };\n}\n"],"names":["vercelNode","options","deployment","validateVercelNodeDeployment","region","generateVercelNodeOutput","projectRoot","resolve","clientDir","serverDir","outputRoot","overlaps","mkdir","dirname","staging","mkdtemp","join","staticDir","functionDir","cp","source","isFrameworkManifest","writeFile","createFunctionEntry","copyRuntimePackages","createFunctionConfig","createOutputConfig","rm","rename","error","coreSource","coreDestination","runtimePackages","name","destination","root","file","relative","sep","first","second","isWithin","target","path","vercelNodeAdapter","defineAdapter","unavailableCacheNamespace","createVercelFunction","environment","allowedHosts","resolveAllowedHosts","validateNodeOriginPolicy","onError","defaultOnError","cacheStore","createUnavailableCacheStore","rateLimitStore","createUnavailableRateLimitStore","handler","renderNodePageResponse","request","response","connection","createRequestAbort","webRequest","toWebRequest","resolveVercelClientIp","resolveVercelScheme","webResponse","withDynamicCachePolicy","writeWebResponse","UnsupportedMethodError","writeNotImplemented","UntrustedHostError","writeMisdirectedRequest","writeServerError","configured","declared","hosts","value","singleHeader","isIP","headers","controller","abort","abortPrematureResponse","VercelSharedStoreError","message","refuse"],"mappings":"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"}