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

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 (94) hide show
  1. package/README.md +14 -0
  2. package/bin/demiurge.mjs +6 -0
  3. package/dist/browser/file-router.d.ts +1 -0
  4. package/dist/browser/file-router.d.ts.map +1 -1
  5. package/dist/chunks/{document-shell-9GPwtcTt.js → document-shell-C0aPrkhd.js} +2 -2
  6. package/dist/chunks/{document-shell-9GPwtcTt.js.map → document-shell-C0aPrkhd.js.map} +1 -1
  7. package/dist/chunks/image-CRerJ5BY.js +145 -0
  8. package/dist/chunks/image-CRerJ5BY.js.map +1 -0
  9. package/dist/chunks/{image-codec-Dh1POFhE.js → image-codec-CQ8Cwxwb.js} +2 -2
  10. package/dist/chunks/{image-codec-Dh1POFhE.js.map → image-codec-CQ8Cwxwb.js.map} +1 -1
  11. package/dist/chunks/{images-CG7ZzayG.js → images-QgdmLyQ3.js} +11 -11
  12. package/dist/chunks/{images-CG7ZzayG.js.map → images-QgdmLyQ3.js.map} +1 -1
  13. package/dist/chunks/{index-0MNiR_wo.js → index-LYve1rQp.js} +286 -351
  14. package/dist/chunks/index-LYve1rQp.js.map +1 -0
  15. package/dist/chunks/links-iU22QkCE.js +68 -0
  16. package/dist/chunks/links-iU22QkCE.js.map +1 -0
  17. package/dist/chunks/{plugin-BZauDxRY.js → plugin-bkP6WwrS.js} +13 -12
  18. package/dist/chunks/{plugin-BZauDxRY.js.map → plugin-bkP6WwrS.js.map} +1 -1
  19. package/dist/chunks/runtime-BH519j2t.js +294 -0
  20. package/dist/chunks/runtime-BH519j2t.js.map +1 -0
  21. package/dist/chunks/streaming-BlKlC3nw.js +427 -0
  22. package/dist/chunks/streaming-BlKlC3nw.js.map +1 -0
  23. package/dist/chunks/{testing-CUwGj2ie.js → testing-BEW1nchS.js} +645 -630
  24. package/dist/chunks/testing-BEW1nchS.js.map +1 -0
  25. package/dist/chunks/{vite-QoqrGl6f.js → vite-BADZA8Fl.js} +73 -70
  26. package/dist/chunks/vite-BADZA8Fl.js.map +1 -0
  27. package/dist/cli.d.ts +8 -2
  28. package/dist/cli.d.ts.map +1 -1
  29. package/dist/cli.js +186 -122
  30. package/dist/cli.js.map +1 -1
  31. package/dist/config/index.js +2 -2
  32. package/dist/config/types.d.ts +3 -1
  33. package/dist/config/types.d.ts.map +1 -1
  34. package/dist/config/validate.d.ts.map +1 -1
  35. package/dist/data/cache.d.ts +5 -0
  36. package/dist/data/cache.d.ts.map +1 -1
  37. package/dist/data/index.d.ts +1 -1
  38. package/dist/data/index.d.ts.map +1 -1
  39. package/dist/data/testing.d.ts.map +1 -1
  40. package/dist/data/testing.js +101 -67
  41. package/dist/data/testing.js.map +1 -1
  42. package/dist/data/tiered.d.ts.map +1 -1
  43. package/dist/edge/index.js +27 -26
  44. package/dist/edge/index.js.map +1 -1
  45. package/dist/edge/stores.d.ts.map +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +910 -891
  49. package/dist/index.js.map +1 -1
  50. package/dist/internal/testing.js +2 -2
  51. package/dist/kv/index.js +7 -6
  52. package/dist/kv/index.js.map +1 -1
  53. package/dist/kv/store.d.ts.map +1 -1
  54. package/dist/node/http.d.ts +2 -0
  55. package/dist/node/http.d.ts.map +1 -1
  56. package/dist/node/index.d.ts +1 -1
  57. package/dist/node/index.d.ts.map +1 -1
  58. package/dist/node/index.js +12 -11
  59. package/dist/node/index.js.map +1 -1
  60. package/dist/node/serve.d.ts +4 -0
  61. package/dist/node/serve.d.ts.map +1 -1
  62. package/dist/redis/index.js +29 -28
  63. package/dist/redis/index.js.map +1 -1
  64. package/dist/redis/store.d.ts.map +1 -1
  65. package/dist/route/serialization.d.ts +4 -4
  66. package/dist/route/serialization.d.ts.map +1 -1
  67. package/dist/static/index.d.ts.map +1 -1
  68. package/dist/static/index.js +255 -255
  69. package/dist/static/index.js.map +1 -1
  70. package/dist/static/testing.d.ts +26 -0
  71. package/dist/static/testing.d.ts.map +1 -0
  72. package/dist/static/testing.js +76 -0
  73. package/dist/static/testing.js.map +1 -0
  74. package/dist/testing/index.d.ts +47 -0
  75. package/dist/testing/index.d.ts.map +1 -0
  76. package/dist/testing/index.js +99 -0
  77. package/dist/testing/index.js.map +1 -0
  78. package/dist/vercel/build.d.ts +31 -0
  79. package/dist/vercel/build.d.ts.map +1 -0
  80. package/dist/vercel/config.d.ts +15 -0
  81. package/dist/vercel/config.d.ts.map +1 -0
  82. package/dist/vercel/index.d.ts +7 -0
  83. package/dist/vercel/index.d.ts.map +1 -0
  84. package/dist/vercel/index.js +11 -0
  85. package/dist/vercel/index.js.map +1 -0
  86. package/dist/vercel/runtime.d.ts +29 -0
  87. package/dist/vercel/runtime.d.ts.map +1 -0
  88. package/dist/vite/index.js +1 -1
  89. package/package.json +13 -1
  90. package/dist/chunks/index-0MNiR_wo.js.map +0 -1
  91. package/dist/chunks/streaming-GYIsVTQH.js +0 -560
  92. package/dist/chunks/streaming-GYIsVTQH.js.map +0 -1
  93. package/dist/chunks/testing-CUwGj2ie.js.map +0 -1
  94. package/dist/chunks/vite-QoqrGl6f.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tiered.d.ts","sourceRoot":"","sources":["../../src/data/tiered.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IAGpC,EAAE,EAAE,UAAU,CAAC;IAKf,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAiBF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,UAAU,CAqEZ"}
1
+ {"version":3,"file":"tiered.d.ts","sourceRoot":"","sources":["../../src/data/tiered.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,MAAM,uBAAuB,GAAG;IAGpC,EAAE,EAAE,UAAU,CAAC;IAKf,EAAE,EAAE,UAAU,CAAC;CAChB,CAAC;AAiBF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,UAAU,CAsEZ"}
@@ -1,24 +1,24 @@
1
- import { a as E, c as p, b as y, d as w, s as S } from "../chunks/index-0MNiR_wo.js";
2
- import { c as b } from "../chunks/testing-CUwGj2ie.js";
1
+ import { a as E, c as p, b as y, d as w, s as b } from "../chunks/index-LYve1rQp.js";
2
+ import { c as S } from "../chunks/testing-BEW1nchS.js";
3
3
  import { renderToReadableStream as R } from "react-dom/server";
4
4
  import "react";
5
5
  import "react/jsx-runtime";
6
6
  import { i as L, I as v, R as A, c as T } from "../chunks/static-files-ehaD1kE7.js";
7
- import { c as P } from "../chunks/document-shell-9GPwtcTt.js";
7
+ import { c as P } from "../chunks/document-shell-C0aPrkhd.js";
8
8
  const C = /* @__PURE__ */ new Set([
9
9
  "/demiurge-manifest.json",
10
10
  "/index.html"
11
11
  ]);
12
12
  function O(e) {
13
- const t = e.immutable ?? L, r = M(e.prefix), c = /* @__PURE__ */ new Map();
13
+ const t = e.immutable ?? L, r = M(e.prefix), i = /* @__PURE__ */ new Map();
14
14
  for (const [o, n] of Object.entries(e.assets)) {
15
- const a = h(o);
15
+ const a = m(o);
16
16
  if (C.has(a))
17
17
  continue;
18
18
  const s = x(n.body);
19
- c.set(a, {
19
+ i.set(a, {
20
20
  body: s,
21
- cacheControl: n.immutable ?? t(m(a)) ? v : A,
21
+ cacheControl: n.immutable ?? t(h(a)) ? v : A,
22
22
  contentType: n.contentType ?? N(a),
23
23
  etag: D(s)
24
24
  });
@@ -26,10 +26,10 @@ function O(e) {
26
26
  return async function(n) {
27
27
  if (n.method !== "GET" && n.method !== "HEAD")
28
28
  return null;
29
- const a = I(r, new URL(n.url).pathname), s = a === null ? void 0 : c.get(a);
29
+ const a = I(r, new URL(n.url).pathname), s = a === null ? void 0 : i.get(a);
30
30
  if (!s)
31
31
  return null;
32
- const i = new Headers({
32
+ const c = new Headers({
33
33
  "cache-control": s.cacheControl,
34
34
  "content-length": String(s.body.byteLength),
35
35
  "content-type": s.contentType,
@@ -37,7 +37,7 @@ function O(e) {
37
37
  etag: s.etag,
38
38
  "x-content-type-options": "nosniff"
39
39
  });
40
- return H(n, s.etag) ? (i.delete("content-length"), i.delete("content-type"), new Response(null, { headers: i, status: 304 })) : n.method === "HEAD" ? new Response(null, { headers: i }) : new Response(s.body, { headers: i });
40
+ return H(n, s.etag) ? (c.delete("content-length"), c.delete("content-type"), new Response(null, { headers: c, status: 304 })) : n.method === "HEAD" ? new Response(null, { headers: c }) : new Response(s.body, { headers: c });
41
41
  };
42
42
  }
43
43
  function D(e) {
@@ -49,7 +49,7 @@ function D(e) {
49
49
  function H(e, t) {
50
50
  const r = e.headers.get("if-none-match");
51
51
  return r === null ? !1 : r.trim() === "*" || r.split(",").some(
52
- (c) => f(c) === f(t)
52
+ (i) => f(i) === f(t)
53
53
  );
54
54
  }
55
55
  function f(e) {
@@ -67,9 +67,9 @@ function I(e, t) {
67
67
  return null;
68
68
  r = r.slice(e.length - 1);
69
69
  }
70
- return h(r);
70
+ return m(r);
71
71
  }
72
- function h(e) {
72
+ function m(e) {
73
73
  return e.startsWith("/") ? e : `/${e}`;
74
74
  }
75
75
  function M(e) {
@@ -81,12 +81,12 @@ function x(e) {
81
81
  const t = ArrayBuffer.isView(e) ? new Uint8Array(e.buffer, e.byteOffset, e.byteLength) : new Uint8Array(e), r = new Uint8Array(t.byteLength);
82
82
  return r.set(t), r;
83
83
  }
84
- function m(e) {
84
+ function h(e) {
85
85
  return e.slice(e.lastIndexOf("/") + 1);
86
86
  }
87
87
  function N(e) {
88
- const t = m(e), r = t.lastIndexOf("."), c = r === -1 ? "" : t.slice(r);
89
- return T(c);
88
+ const t = h(e), r = t.lastIndexOf("."), i = r === -1 ? "" : t.slice(r);
89
+ return T(i);
90
90
  }
91
91
  function U(e, t = {}) {
92
92
  return e.render.mode === "streaming" ? _(e, t) : E(e, t);
@@ -94,7 +94,7 @@ function U(e, t = {}) {
94
94
  async function _(e, t = {}) {
95
95
  if (t.signal?.aborted)
96
96
  throw t.signal.reason;
97
- const r = p(e, t), c = y(e, r), o = new AbortController();
97
+ const r = p(e, t), i = y(e, r), o = new AbortController();
98
98
  let n = !1;
99
99
  const a = () => {
100
100
  o.abort(
@@ -104,7 +104,7 @@ async function _(e, t = {}) {
104
104
  t.signal?.addEventListener("abort", a, { once: !0 });
105
105
  let s;
106
106
  try {
107
- s = await R(c, {
107
+ s = await R(i, {
108
108
  nonce: t.nonce,
109
109
  onError(l) {
110
110
  n && !o.signal.aborted && t.onStreamError?.(l);
@@ -115,21 +115,21 @@ async function _(e, t = {}) {
115
115
  throw t.signal?.removeEventListener("abort", a), l;
116
116
  }
117
117
  s.allReady.catch(u);
118
- let i;
118
+ let c;
119
119
  try {
120
- i = await P(e, {
120
+ c = await P(e, {
121
121
  ...t,
122
122
  scripts: r.scripts()
123
123
  });
124
124
  } catch (l) {
125
125
  throw t.signal?.removeEventListener("abort", a), a(), await s.cancel().catch(u), l;
126
126
  }
127
- return r.flushHead(), n = !0, new Response(j(s, i, a), {
127
+ return r.flushHead(), n = !0, new Response(j(s, c, a), {
128
128
  headers: { "content-type": "text/html; charset=utf-8" }
129
129
  });
130
130
  }
131
131
  function j(e, t, r) {
132
- const c = new TextEncoder(), o = e.getReader();
132
+ const i = new TextEncoder(), o = e.getReader();
133
133
  return new ReadableStream({
134
134
  async cancel(n) {
135
135
  r(), await o.cancel(n).catch(u);
@@ -143,13 +143,13 @@ function j(e, t, r) {
143
143
  return;
144
144
  }
145
145
  if (a.done) {
146
- n.enqueue(c.encode(t.suffix)), n.close();
146
+ n.enqueue(i.encode(t.suffix)), n.close();
147
147
  return;
148
148
  }
149
149
  n.enqueue(a.value);
150
150
  },
151
151
  start(n) {
152
- n.enqueue(c.encode(t.prefix));
152
+ n.enqueue(i.encode(t.prefix));
153
153
  }
154
154
  });
155
155
  }
@@ -166,6 +166,7 @@ function q() {
166
166
  throw new g(k);
167
167
  };
168
168
  return {
169
+ capabilities: { atomicity: "best-effort" },
169
170
  acquireRefreshLease: e,
170
171
  delete: e,
171
172
  get: e,
@@ -205,7 +206,7 @@ const B = w({
205
206
  function ne(e) {
206
207
  const t = z(e.cacheStore), r = G(e.rateLimitStore);
207
208
  e.rateLimitStore === d && e.routeModules && J(e.routeModules);
208
- const c = K(e.assets), o = b({
209
+ const i = K(e.assets), o = S({
209
210
  adapter: B,
210
211
  cacheStore: t,
211
212
  onError: e.onError,
@@ -217,7 +218,7 @@ function ne(e) {
217
218
  });
218
219
  return async function(a) {
219
220
  const s = e.clientIp?.(a);
220
- return s && S(a, { clientIp: s }), await c?.(a) ?? await o(a);
221
+ return s && b(a, { clientIp: s }), await i?.(a) ?? await o(a);
221
222
  };
222
223
  }
223
224
  function z(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/edge/assets.ts","../../src/edge/streaming.ts","../../src/edge/stores.ts","../../src/edge/index.ts"],"sourcesContent":["import {\n contentTypeForExtension,\n IMMUTABLE_FILE_CACHE_CONTROL,\n isContentHashedFileName,\n REVALIDATED_FILE_CACHE_CONTROL,\n} from \"../static-files\";\n\n// An edge isolate has no persistent filesystem at request time, so the Node\n// root-directory boundary does not exist here. The boundary is the map\n// itself. A request can only reach a pathname the map declares, which makes\n// traversal, symbolic links, and null bytes unreachable rather than rejected.\nexport type EdgeAsset = {\n body: ArrayBuffer | ArrayBufferView | string;\n contentType?: string;\n immutable?: boolean;\n};\n\nexport type EdgeAssetMap = Readonly<Record<string, EdgeAsset>>;\n\nexport type EdgeAssetHandler = (request: Request) => Promise<Response | null>;\n\nexport type EdgeAssetHandlerOptions = {\n assets: EdgeAssetMap;\n immutable?: (fileName: string) => boolean;\n prefix?: string;\n};\n\ntype ResolvedAsset = {\n body: Uint8Array<ArrayBuffer>;\n cacheControl: string;\n contentType: string;\n etag: string;\n};\n\n// The framework build output is never a public asset. The route pipeline owns\n// the shell document and applies the policy headers, and the manifest\n// describes the deployment rather than serving it.\nconst excludedPathnames = new Set([\n \"/demiurge-manifest.json\",\n \"/index.html\",\n]);\n\nexport function createEdgeAssetHandler(\n options: EdgeAssetHandlerOptions,\n): EdgeAssetHandler {\n const isImmutable = options.immutable ?? isContentHashedFileName;\n const prefix = normalizePrefix(options.prefix);\n const assets = new Map<string, ResolvedAsset>();\n\n for (const [pathname, asset] of Object.entries(options.assets)) {\n const normalized = normalizePathname(pathname);\n\n if (excludedPathnames.has(normalized)) {\n continue;\n }\n\n const body = toBytes(asset.body);\n assets.set(normalized, {\n body,\n cacheControl: (asset.immutable ?? isImmutable(fileNameOf(normalized)))\n ? IMMUTABLE_FILE_CACHE_CONTROL\n : REVALIDATED_FILE_CACHE_CONTROL,\n contentType: asset.contentType ?? contentTypeOf(normalized),\n etag: createEtag(body),\n });\n }\n\n return async function handleEdgeAsset(request) {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return null;\n }\n\n const pathname = resolvePathname(prefix, new URL(request.url).pathname);\n const asset = pathname === null ? undefined : assets.get(pathname);\n\n if (!asset) {\n return null;\n }\n\n const headers = new Headers({\n \"cache-control\": asset.cacheControl,\n \"content-length\": String(asset.body.byteLength),\n \"content-type\": asset.contentType,\n \"cross-origin-resource-policy\": \"same-origin\",\n etag: asset.etag,\n \"x-content-type-options\": \"nosniff\",\n });\n\n if (isNotModified(request, asset.etag)) {\n headers.delete(\"content-length\");\n headers.delete(\"content-type\");\n\n return new Response(null, { headers, status: 304 });\n }\n\n if (request.method === \"HEAD\") {\n return new Response(null, { headers });\n }\n\n return new Response(asset.body, { headers });\n };\n}\n\n// A bundled asset has no modification time, so the validator comes from the\n// bytes. FNV-1a over the body with the byte length keeps the value stable\n// across isolates and across deployments of the same build.\nfunction createEtag(body: Uint8Array) {\n let hash = 0x811c9dc5;\n\n for (const byte of body) {\n hash = Math.imul(hash ^ byte, 0x01000193) >>> 0;\n }\n\n return `W/\"${body.byteLength.toString(16)}-${hash.toString(16)}\"`;\n}\n\nfunction isNotModified(request: Request, etag: string) {\n const ifNoneMatch = request.headers.get(\"if-none-match\");\n\n if (ifNoneMatch === null) {\n return false;\n }\n\n return ifNoneMatch.trim() === \"*\" || ifNoneMatch.split(\",\").some(\n (candidate) => weakEtagValue(candidate) === weakEtagValue(etag),\n );\n}\n\nfunction weakEtagValue(value: string) {\n return value.trim().replace(/^W\\//i, \"\");\n}\n\nfunction resolvePathname(prefix: string, pathname: string) {\n let decoded: string;\n\n try {\n decoded = decodeURIComponent(pathname);\n } catch {\n return null;\n }\n\n if (prefix) {\n if (!decoded.startsWith(prefix)) {\n return null;\n }\n\n decoded = decoded.slice(prefix.length - 1);\n }\n\n return normalizePathname(decoded);\n}\n\nfunction normalizePathname(pathname: string) {\n return pathname.startsWith(\"/\") ? pathname : `/${pathname}`;\n}\n\nfunction normalizePrefix(prefix: string | undefined) {\n if (!prefix || prefix === \"/\") {\n return \"\";\n }\n\n return `/${prefix.replace(/^\\/|\\/$/g, \"\")}/`;\n}\n\n// The handler owns its copy of every body. A caller that reuses the buffer it\n// passed in cannot change what a later request receives.\nfunction toBytes(body: EdgeAsset[\"body\"]): Uint8Array<ArrayBuffer> {\n if (typeof body === \"string\") {\n return new TextEncoder().encode(body);\n }\n\n const view = ArrayBuffer.isView(body)\n ? new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n : new Uint8Array(body);\n const bytes = new Uint8Array(view.byteLength);\n bytes.set(view);\n\n return bytes;\n}\n\nfunction fileNameOf(pathname: string) {\n return pathname.slice(pathname.lastIndexOf(\"/\") + 1);\n}\n\nfunction contentTypeOf(pathname: string) {\n const fileName = fileNameOf(pathname);\n const dot = fileName.lastIndexOf(\".\");\n const extension = dot === -1 ? \"\" : fileName.slice(dot);\n\n return contentTypeForExtension(extension);\n}\n","import { renderToReadableStream } from \"react-dom/server\";\nimport type { LoadedRouteMatch } from \"../router\";\nimport {\n createDocumentShell,\n type DocumentShell,\n} from \"../server/document-shell\";\nimport {\n createPageRenderTree,\n createPageScriptContext,\n} from \"../server/render-tree\";\nimport { renderPageResponse, type SsrRenderOptions } from \"../server/ssr\";\n\nexport function renderEdgePageResponse(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n) {\n return match.render.mode === \"streaming\"\n ? renderEdgeStreamingPageResponse(match, options)\n : renderPageResponse(match, options);\n}\n\n// An edge runtime has no Node stream. React renders into a Web\n// ReadableStream, and the document shell is added around it with a second\n// Web stream. Nothing in this path touches a Node built-in.\nexport async function renderEdgeStreamingPageResponse(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n): Promise<Response> {\n if (options.signal?.aborted) {\n throw options.signal.reason;\n }\n\n const scripts = createPageScriptContext(match, options);\n const content = createPageRenderTree(match, scripts);\n const renderAbort = new AbortController();\n let committed = false;\n const abortRender = () => {\n renderAbort.abort(\n options.signal?.reason ??\n new Error(\"Demiurge streaming response was cancelled.\"),\n );\n };\n\n options.signal?.addEventListener(\"abort\", abortRender, { once: true });\n\n let stream: Awaited<ReturnType<typeof renderToReadableStream>>;\n\n try {\n stream = await renderToReadableStream(content, {\n nonce: options.nonce,\n onError(error) {\n if (committed && !renderAbort.signal.aborted) {\n options.onStreamError?.(error);\n }\n },\n signal: renderAbort.signal,\n });\n } catch (error) {\n options.signal?.removeEventListener(\"abort\", abortRender);\n throw error;\n }\n\n // A cancelled render rejects this promise, and nothing else awaits it. An\n // unhandled rejection would fault the isolate instead of the response.\n stream.allReady.catch(ignoreRejection);\n\n let shell: DocumentShell;\n\n try {\n shell = await createDocumentShell(match, {\n ...options,\n scripts: scripts.scripts(),\n });\n } catch (error) {\n options.signal?.removeEventListener(\"abort\", abortRender);\n abortRender();\n await stream.cancel().catch(ignoreRejection);\n throw error;\n }\n\n scripts.flushHead();\n committed = true;\n\n return new Response(withDocumentShell(stream, shell, abortRender), {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n });\n}\n\nexport function withDocumentShell(\n body: ReadableStream<Uint8Array>,\n shell: DocumentShell,\n onCancel: () => void,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const reader = body.getReader();\n\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n onCancel();\n await reader.cancel(reason).catch(ignoreRejection);\n },\n async pull(controller) {\n let chunk: ReadableStreamReadResult<Uint8Array>;\n\n try {\n chunk = await reader.read();\n } catch (error) {\n controller.error(error);\n return;\n }\n\n if (chunk.done) {\n controller.enqueue(encoder.encode(shell.suffix));\n controller.close();\n return;\n }\n\n controller.enqueue(chunk.value);\n },\n start(controller) {\n controller.enqueue(encoder.encode(shell.prefix));\n },\n });\n}\n\n// A cancelled render rejects more than one promise, and none of them is a\n// request failure. The rejection is absorbed rather than logged.\nfunction ignoreRejection() {}\n","import type { CacheStore } from \"../data/cache\";\nimport type { RateLimitStore } from \"../security/types\";\n\n// An edge deployment runs many isolates, and an isolate keeps its memory to\n// itself. An in-memory store therefore counts one client in several buckets\n// and caches one value several times. That reads as a working store and is not\n// one. These stores refuse the operation instead.\nexport class EdgeSharedStoreError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"EdgeSharedStoreError\";\n }\n}\n\nconst cacheStoreMessage =\n 'Demiurge edge deployments have no shared cache store. This handler declares cacheStore \"unavailable\", so a \"build\", \"private\", or \"public\" cache scope cannot run. Pass a shared CacheStore, or keep the cache scope at \"request\".';\n\nconst rateLimitStoreMessage =\n 'Demiurge edge deployments have no shared rate limit store. This handler declares rateLimitStore \"unavailable\", so a rate limit policy cannot be enforced. Pass a shared RateLimitStore, or remove the rate limit policy.';\n\nexport function createUnavailableCacheStore(): CacheStore {\n const refuse = (): never => {\n throw new EdgeSharedStoreError(cacheStoreMessage);\n };\n\n return {\n acquireRefreshLease: refuse,\n delete: refuse,\n get: refuse,\n invalidateTags: refuse,\n publishRefresh: refuse,\n releaseRefreshLease: refuse,\n set: refuse,\n };\n}\n\nexport function createUnavailableRateLimitStore(): RateLimitStore {\n return {\n increment() {\n throw new EdgeSharedStoreError(rateLimitStoreMessage);\n },\n };\n}\n","import { defineAdapter } from \"../adapter\";\nimport type { HttpMethod, RouteModule } from \"../route\";\nimport { setRequestConnectionMetadata } from \"../server/request-metadata\";\nimport {\n createRequestHandler,\n type RequestCacheStoreOptions,\n type RequestHandler,\n type RequestHandlerOptions,\n} from \"../server\";\nimport type { RateLimitStore } from \"../security\";\nimport { createEdgeAssetHandler } from \"./assets\";\nimport type { EdgeAssetHandler, EdgeAssetHandlerOptions } from \"./assets\";\nimport { renderEdgePageResponse } from \"./streaming\";\nimport {\n createUnavailableCacheStore,\n createUnavailableRateLimitStore,\n} from \"./stores\";\n\nexport { createEdgeAssetHandler } from \"./assets\";\nexport {\n renderEdgePageResponse,\n renderEdgeStreamingPageResponse,\n} from \"./streaming\";\nexport {\n createUnavailableCacheStore,\n createUnavailableRateLimitStore,\n EdgeSharedStoreError,\n} from \"./stores\";\nexport type {\n EdgeAsset,\n EdgeAssetHandler,\n EdgeAssetHandlerOptions,\n EdgeAssetMap,\n} from \"./assets\";\n\n// The edge adapter declares only what a Web-platform runtime proves through\n// the shared adapter contract. Streaming uses a Web ReadableStream, and the\n// two header capabilities travel on the Response the handler returns.\n// Background lifetime stays false because an isolate has no shutdown to wait\n// on, and a host waitUntil call is best effort. Shared cache stays false\n// because no shared store backend ships yet. Static output belongs to the\n// static adapter.\nexport const edgeAdapter = defineAdapter({\n name: \"edge\",\n capabilities: {\n crossOriginIsolationHeaders: true,\n nonceInjection: true,\n streaming: true,\n },\n});\n\nexport const EDGE_SHARED_STORE_UNAVAILABLE = \"unavailable\";\n\nexport type EdgeCacheStoreOption =\n | RequestCacheStoreOptions\n | typeof EDGE_SHARED_STORE_UNAVAILABLE;\n\nexport type EdgeRateLimitStoreOption =\n | RateLimitStore\n | typeof EDGE_SHARED_STORE_UNAVAILABLE;\n\nexport type EdgeRequestHandlerOptions =\n & Omit<RequestHandlerOptions, \"adapter\" | \"cacheStore\" | \"rateLimitStore\">\n & {\n assets?: EdgeAssetHandler | EdgeAssetHandlerOptions;\n // Both store options are required. An omitted store is the silent\n // per-isolate default this adapter exists to prevent, so construction\n // refuses it and names the option to set.\n cacheStore: EdgeCacheStoreOption;\n // An edge host reports the client address in a header it owns, and the\n // framework does not guess which one. A rate limit keyed on \"ip\" needs\n // this function to read that header.\n clientIp?: (request: Request) => string | undefined | null;\n rateLimitStore: EdgeRateLimitStoreOption;\n };\n\nconst unavailableCacheNamespace = {\n app: \"demiurge-edge\",\n environment: \"unavailable\",\n schemaVersion: 1,\n} as const;\n\nconst httpMethods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n] as const satisfies readonly HttpMethod[];\n\nexport function createEdgeRequestHandler(\n options: EdgeRequestHandlerOptions,\n): RequestHandler {\n const cacheStore = resolveCacheStore(options.cacheStore);\n const rateLimitStore = resolveRateLimitStore(options.rateLimitStore);\n\n if (\n options.rateLimitStore === EDGE_SHARED_STORE_UNAVAILABLE &&\n options.routeModules\n ) {\n assertNoRateLimitPolicies(options.routeModules);\n }\n\n const serveAsset = toEdgeAssetHandler(options.assets);\n const handleRequest = createRequestHandler({\n adapter: edgeAdapter,\n cacheStore,\n onError: options.onError,\n rateLimitStore,\n renderPage: options.renderPage ?? renderEdgePageResponse,\n routeModules: options.routeModules,\n routes: options.routes,\n ssr: options.ssr,\n });\n\n return async function handleEdgeRequest(request) {\n const clientIp = options.clientIp?.(request);\n\n if (clientIp) {\n setRequestConnectionMetadata(request, { clientIp });\n }\n\n const asset = await serveAsset?.(request);\n\n return asset ?? await handleRequest(request);\n };\n}\n\nfunction resolveCacheStore(\n option: EdgeCacheStoreOption | undefined,\n): RequestCacheStoreOptions {\n if (option === EDGE_SHARED_STORE_UNAVAILABLE) {\n return {\n namespace: unavailableCacheNamespace,\n store: createUnavailableCacheStore(),\n };\n }\n\n if (!option || typeof option.store !== \"object\") {\n throw new Error(\n 'Demiurge edge cacheStore is required. Pass a shared cache store, or pass \"unavailable\" to make a shared cache scope fail instead of caching per isolate.',\n );\n }\n\n return option;\n}\n\nfunction resolveRateLimitStore(\n option: EdgeRateLimitStoreOption | undefined,\n): RateLimitStore {\n if (option === EDGE_SHARED_STORE_UNAVAILABLE) {\n return createUnavailableRateLimitStore();\n }\n\n if (!option || typeof option.increment !== \"function\") {\n throw new Error(\n 'Demiurge edge rateLimitStore is required. Pass a shared rate limit store, or pass \"unavailable\" to make a rate limit policy fail instead of counting per isolate.',\n );\n }\n\n return option;\n}\n\n// A rate limit policy is visible before the first request when the caller\n// hands over the route modules. Reporting it at construction beats a 500 on\n// the request the policy was meant to protect.\nfunction assertNoRateLimitPolicies(\n modules: Readonly<Record<string, RouteModule>>,\n) {\n for (const [file, routeModule] of Object.entries(modules)) {\n const declared = routeModule.policy?.security?.rateLimit ??\n httpMethods\n .map((method) => routeModule[method])\n .find((capability) =>\n capability && capability.kind !== \"page\" && capability.security?.rateLimit\n );\n\n if (declared) {\n throw new Error(\n `Demiurge edge route ${JSON.stringify(file)} declares a rate limit policy, and this handler declares rateLimitStore \"unavailable\". Pass a shared rate limit store, or remove the policy.`,\n );\n }\n }\n}\n\nfunction toEdgeAssetHandler(\n value: EdgeAssetHandler | EdgeAssetHandlerOptions | undefined,\n) {\n if (!value) {\n return undefined;\n }\n\n return typeof value === \"function\" ? value : createEdgeAssetHandler(value);\n}\n"],"names":["excludedPathnames","createEdgeAssetHandler","options","isImmutable","isContentHashedFileName","prefix","normalizePrefix","assets","pathname","asset","normalized","normalizePathname","body","toBytes","fileNameOf","IMMUTABLE_FILE_CACHE_CONTROL","REVALIDATED_FILE_CACHE_CONTROL","contentTypeOf","createEtag","request","resolvePathname","headers","isNotModified","hash","byte","etag","ifNoneMatch","candidate","weakEtagValue","value","decoded","view","bytes","fileName","dot","extension","contentTypeForExtension","renderEdgePageResponse","match","renderEdgeStreamingPageResponse","renderPageResponse","scripts","createPageScriptContext","content","createPageRenderTree","renderAbort","committed","abortRender","stream","renderToReadableStream","error","ignoreRejection","shell","createDocumentShell","withDocumentShell","onCancel","encoder","reader","reason","controller","chunk","EdgeSharedStoreError","message","cacheStoreMessage","rateLimitStoreMessage","createUnavailableCacheStore","refuse","createUnavailableRateLimitStore","edgeAdapter","defineAdapter","EDGE_SHARED_STORE_UNAVAILABLE","unavailableCacheNamespace","httpMethods","createEdgeRequestHandler","cacheStore","resolveCacheStore","rateLimitStore","resolveRateLimitStore","assertNoRateLimitPolicies","serveAsset","toEdgeAssetHandler","handleRequest","createRequestHandler","clientIp","setRequestConnectionMetadata","option","modules","file","routeModule","method","capability"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/edge/assets.ts","../../src/edge/streaming.ts","../../src/edge/stores.ts","../../src/edge/index.ts"],"sourcesContent":["import {\n contentTypeForExtension,\n IMMUTABLE_FILE_CACHE_CONTROL,\n isContentHashedFileName,\n REVALIDATED_FILE_CACHE_CONTROL,\n} from \"../static-files\";\n\n// An edge isolate has no persistent filesystem at request time, so the Node\n// root-directory boundary does not exist here. The boundary is the map\n// itself. A request can only reach a pathname the map declares, which makes\n// traversal, symbolic links, and null bytes unreachable rather than rejected.\nexport type EdgeAsset = {\n body: ArrayBuffer | ArrayBufferView | string;\n contentType?: string;\n immutable?: boolean;\n};\n\nexport type EdgeAssetMap = Readonly<Record<string, EdgeAsset>>;\n\nexport type EdgeAssetHandler = (request: Request) => Promise<Response | null>;\n\nexport type EdgeAssetHandlerOptions = {\n assets: EdgeAssetMap;\n immutable?: (fileName: string) => boolean;\n prefix?: string;\n};\n\ntype ResolvedAsset = {\n body: Uint8Array<ArrayBuffer>;\n cacheControl: string;\n contentType: string;\n etag: string;\n};\n\n// The framework build output is never a public asset. The route pipeline owns\n// the shell document and applies the policy headers, and the manifest\n// describes the deployment rather than serving it.\nconst excludedPathnames = new Set([\n \"/demiurge-manifest.json\",\n \"/index.html\",\n]);\n\nexport function createEdgeAssetHandler(\n options: EdgeAssetHandlerOptions,\n): EdgeAssetHandler {\n const isImmutable = options.immutable ?? isContentHashedFileName;\n const prefix = normalizePrefix(options.prefix);\n const assets = new Map<string, ResolvedAsset>();\n\n for (const [pathname, asset] of Object.entries(options.assets)) {\n const normalized = normalizePathname(pathname);\n\n if (excludedPathnames.has(normalized)) {\n continue;\n }\n\n const body = toBytes(asset.body);\n assets.set(normalized, {\n body,\n cacheControl: (asset.immutable ?? isImmutable(fileNameOf(normalized)))\n ? IMMUTABLE_FILE_CACHE_CONTROL\n : REVALIDATED_FILE_CACHE_CONTROL,\n contentType: asset.contentType ?? contentTypeOf(normalized),\n etag: createEtag(body),\n });\n }\n\n return async function handleEdgeAsset(request) {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return null;\n }\n\n const pathname = resolvePathname(prefix, new URL(request.url).pathname);\n const asset = pathname === null ? undefined : assets.get(pathname);\n\n if (!asset) {\n return null;\n }\n\n const headers = new Headers({\n \"cache-control\": asset.cacheControl,\n \"content-length\": String(asset.body.byteLength),\n \"content-type\": asset.contentType,\n \"cross-origin-resource-policy\": \"same-origin\",\n etag: asset.etag,\n \"x-content-type-options\": \"nosniff\",\n });\n\n if (isNotModified(request, asset.etag)) {\n headers.delete(\"content-length\");\n headers.delete(\"content-type\");\n\n return new Response(null, { headers, status: 304 });\n }\n\n if (request.method === \"HEAD\") {\n return new Response(null, { headers });\n }\n\n return new Response(asset.body, { headers });\n };\n}\n\n// A bundled asset has no modification time, so the validator comes from the\n// bytes. FNV-1a over the body with the byte length keeps the value stable\n// across isolates and across deployments of the same build.\nfunction createEtag(body: Uint8Array) {\n let hash = 0x811c9dc5;\n\n for (const byte of body) {\n hash = Math.imul(hash ^ byte, 0x01000193) >>> 0;\n }\n\n return `W/\"${body.byteLength.toString(16)}-${hash.toString(16)}\"`;\n}\n\nfunction isNotModified(request: Request, etag: string) {\n const ifNoneMatch = request.headers.get(\"if-none-match\");\n\n if (ifNoneMatch === null) {\n return false;\n }\n\n return ifNoneMatch.trim() === \"*\" || ifNoneMatch.split(\",\").some(\n (candidate) => weakEtagValue(candidate) === weakEtagValue(etag),\n );\n}\n\nfunction weakEtagValue(value: string) {\n return value.trim().replace(/^W\\//i, \"\");\n}\n\nfunction resolvePathname(prefix: string, pathname: string) {\n let decoded: string;\n\n try {\n decoded = decodeURIComponent(pathname);\n } catch {\n return null;\n }\n\n if (prefix) {\n if (!decoded.startsWith(prefix)) {\n return null;\n }\n\n decoded = decoded.slice(prefix.length - 1);\n }\n\n return normalizePathname(decoded);\n}\n\nfunction normalizePathname(pathname: string) {\n return pathname.startsWith(\"/\") ? pathname : `/${pathname}`;\n}\n\nfunction normalizePrefix(prefix: string | undefined) {\n if (!prefix || prefix === \"/\") {\n return \"\";\n }\n\n return `/${prefix.replace(/^\\/|\\/$/g, \"\")}/`;\n}\n\n// The handler owns its copy of every body. A caller that reuses the buffer it\n// passed in cannot change what a later request receives.\nfunction toBytes(body: EdgeAsset[\"body\"]): Uint8Array<ArrayBuffer> {\n if (typeof body === \"string\") {\n return new TextEncoder().encode(body);\n }\n\n const view = ArrayBuffer.isView(body)\n ? new Uint8Array(body.buffer, body.byteOffset, body.byteLength)\n : new Uint8Array(body);\n const bytes = new Uint8Array(view.byteLength);\n bytes.set(view);\n\n return bytes;\n}\n\nfunction fileNameOf(pathname: string) {\n return pathname.slice(pathname.lastIndexOf(\"/\") + 1);\n}\n\nfunction contentTypeOf(pathname: string) {\n const fileName = fileNameOf(pathname);\n const dot = fileName.lastIndexOf(\".\");\n const extension = dot === -1 ? \"\" : fileName.slice(dot);\n\n return contentTypeForExtension(extension);\n}\n","import { renderToReadableStream } from \"react-dom/server\";\nimport type { LoadedRouteMatch } from \"../router\";\nimport {\n createDocumentShell,\n type DocumentShell,\n} from \"../server/document-shell\";\nimport {\n createPageRenderTree,\n createPageScriptContext,\n} from \"../server/render-tree\";\nimport { renderPageResponse, type SsrRenderOptions } from \"../server/ssr\";\n\nexport function renderEdgePageResponse(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n) {\n return match.render.mode === \"streaming\"\n ? renderEdgeStreamingPageResponse(match, options)\n : renderPageResponse(match, options);\n}\n\n// An edge runtime has no Node stream. React renders into a Web\n// ReadableStream, and the document shell is added around it with a second\n// Web stream. Nothing in this path touches a Node built-in.\nexport async function renderEdgeStreamingPageResponse(\n match: LoadedRouteMatch,\n options: SsrRenderOptions = {},\n): Promise<Response> {\n if (options.signal?.aborted) {\n throw options.signal.reason;\n }\n\n const scripts = createPageScriptContext(match, options);\n const content = createPageRenderTree(match, scripts);\n const renderAbort = new AbortController();\n let committed = false;\n const abortRender = () => {\n renderAbort.abort(\n options.signal?.reason ??\n new Error(\"Demiurge streaming response was cancelled.\"),\n );\n };\n\n options.signal?.addEventListener(\"abort\", abortRender, { once: true });\n\n let stream: Awaited<ReturnType<typeof renderToReadableStream>>;\n\n try {\n stream = await renderToReadableStream(content, {\n nonce: options.nonce,\n onError(error) {\n if (committed && !renderAbort.signal.aborted) {\n options.onStreamError?.(error);\n }\n },\n signal: renderAbort.signal,\n });\n } catch (error) {\n options.signal?.removeEventListener(\"abort\", abortRender);\n throw error;\n }\n\n // A cancelled render rejects this promise, and nothing else awaits it. An\n // unhandled rejection would fault the isolate instead of the response.\n stream.allReady.catch(ignoreRejection);\n\n let shell: DocumentShell;\n\n try {\n shell = await createDocumentShell(match, {\n ...options,\n scripts: scripts.scripts(),\n });\n } catch (error) {\n options.signal?.removeEventListener(\"abort\", abortRender);\n abortRender();\n await stream.cancel().catch(ignoreRejection);\n throw error;\n }\n\n scripts.flushHead();\n committed = true;\n\n return new Response(withDocumentShell(stream, shell, abortRender), {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n });\n}\n\nexport function withDocumentShell(\n body: ReadableStream<Uint8Array>,\n shell: DocumentShell,\n onCancel: () => void,\n): ReadableStream<Uint8Array> {\n const encoder = new TextEncoder();\n const reader = body.getReader();\n\n return new ReadableStream<Uint8Array>({\n async cancel(reason) {\n onCancel();\n await reader.cancel(reason).catch(ignoreRejection);\n },\n async pull(controller) {\n let chunk: ReadableStreamReadResult<Uint8Array>;\n\n try {\n chunk = await reader.read();\n } catch (error) {\n controller.error(error);\n return;\n }\n\n if (chunk.done) {\n controller.enqueue(encoder.encode(shell.suffix));\n controller.close();\n return;\n }\n\n controller.enqueue(chunk.value);\n },\n start(controller) {\n controller.enqueue(encoder.encode(shell.prefix));\n },\n });\n}\n\n// A cancelled render rejects more than one promise, and none of them is a\n// request failure. The rejection is absorbed rather than logged.\nfunction ignoreRejection() {}\n","import type { CacheStore } from \"../data/cache\";\nimport type { RateLimitStore } from \"../security/types\";\n\n// An edge deployment runs many isolates, and an isolate keeps its memory to\n// itself. An in-memory store therefore counts one client in several buckets\n// and caches one value several times. That reads as a working store and is not\n// one. These stores refuse the operation instead.\nexport class EdgeSharedStoreError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"EdgeSharedStoreError\";\n }\n}\n\nconst cacheStoreMessage =\n 'Demiurge edge deployments have no shared cache store. This handler declares cacheStore \"unavailable\", so a \"build\", \"private\", or \"public\" cache scope cannot run. Pass a shared CacheStore, or keep the cache scope at \"request\".';\n\nconst rateLimitStoreMessage =\n 'Demiurge edge deployments have no shared rate limit store. This handler declares rateLimitStore \"unavailable\", so a rate limit policy cannot be enforced. Pass a shared RateLimitStore, or remove the rate limit policy.';\n\nexport function createUnavailableCacheStore(): CacheStore {\n const refuse = (): never => {\n throw new EdgeSharedStoreError(cacheStoreMessage);\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\nexport function createUnavailableRateLimitStore(): RateLimitStore {\n return {\n increment() {\n throw new EdgeSharedStoreError(rateLimitStoreMessage);\n },\n };\n}\n","import { defineAdapter } from \"../adapter\";\nimport type { HttpMethod, RouteModule } from \"../route\";\nimport { setRequestConnectionMetadata } from \"../server/request-metadata\";\nimport {\n createRequestHandler,\n type RequestCacheStoreOptions,\n type RequestHandler,\n type RequestHandlerOptions,\n} from \"../server\";\nimport type { RateLimitStore } from \"../security\";\nimport { createEdgeAssetHandler } from \"./assets\";\nimport type { EdgeAssetHandler, EdgeAssetHandlerOptions } from \"./assets\";\nimport { renderEdgePageResponse } from \"./streaming\";\nimport {\n createUnavailableCacheStore,\n createUnavailableRateLimitStore,\n} from \"./stores\";\n\nexport { createEdgeAssetHandler } from \"./assets\";\nexport {\n renderEdgePageResponse,\n renderEdgeStreamingPageResponse,\n} from \"./streaming\";\nexport {\n createUnavailableCacheStore,\n createUnavailableRateLimitStore,\n EdgeSharedStoreError,\n} from \"./stores\";\nexport type {\n EdgeAsset,\n EdgeAssetHandler,\n EdgeAssetHandlerOptions,\n EdgeAssetMap,\n} from \"./assets\";\n\n// The edge adapter declares only what a Web-platform runtime proves through\n// the shared adapter contract. Streaming uses a Web ReadableStream, and the\n// two header capabilities travel on the Response the handler returns.\n// Background lifetime stays false because an isolate has no shutdown to wait\n// on, and a host waitUntil call is best effort. Shared cache stays false\n// because no shared store backend ships yet. Static output belongs to the\n// static adapter.\nexport const edgeAdapter = defineAdapter({\n name: \"edge\",\n capabilities: {\n crossOriginIsolationHeaders: true,\n nonceInjection: true,\n streaming: true,\n },\n});\n\nexport const EDGE_SHARED_STORE_UNAVAILABLE = \"unavailable\";\n\nexport type EdgeCacheStoreOption =\n | RequestCacheStoreOptions\n | typeof EDGE_SHARED_STORE_UNAVAILABLE;\n\nexport type EdgeRateLimitStoreOption =\n | RateLimitStore\n | typeof EDGE_SHARED_STORE_UNAVAILABLE;\n\nexport type EdgeRequestHandlerOptions =\n & Omit<RequestHandlerOptions, \"adapter\" | \"cacheStore\" | \"rateLimitStore\">\n & {\n assets?: EdgeAssetHandler | EdgeAssetHandlerOptions;\n // Both store options are required. An omitted store is the silent\n // per-isolate default this adapter exists to prevent, so construction\n // refuses it and names the option to set.\n cacheStore: EdgeCacheStoreOption;\n // An edge host reports the client address in a header it owns, and the\n // framework does not guess which one. A rate limit keyed on \"ip\" needs\n // this function to read that header.\n clientIp?: (request: Request) => string | undefined | null;\n rateLimitStore: EdgeRateLimitStoreOption;\n };\n\nconst unavailableCacheNamespace = {\n app: \"demiurge-edge\",\n environment: \"unavailable\",\n schemaVersion: 1,\n} as const;\n\nconst httpMethods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n] as const satisfies readonly HttpMethod[];\n\nexport function createEdgeRequestHandler(\n options: EdgeRequestHandlerOptions,\n): RequestHandler {\n const cacheStore = resolveCacheStore(options.cacheStore);\n const rateLimitStore = resolveRateLimitStore(options.rateLimitStore);\n\n if (\n options.rateLimitStore === EDGE_SHARED_STORE_UNAVAILABLE &&\n options.routeModules\n ) {\n assertNoRateLimitPolicies(options.routeModules);\n }\n\n const serveAsset = toEdgeAssetHandler(options.assets);\n const handleRequest = createRequestHandler({\n adapter: edgeAdapter,\n cacheStore,\n onError: options.onError,\n rateLimitStore,\n renderPage: options.renderPage ?? renderEdgePageResponse,\n routeModules: options.routeModules,\n routes: options.routes,\n ssr: options.ssr,\n });\n\n return async function handleEdgeRequest(request) {\n const clientIp = options.clientIp?.(request);\n\n if (clientIp) {\n setRequestConnectionMetadata(request, { clientIp });\n }\n\n const asset = await serveAsset?.(request);\n\n return asset ?? await handleRequest(request);\n };\n}\n\nfunction resolveCacheStore(\n option: EdgeCacheStoreOption | undefined,\n): RequestCacheStoreOptions {\n if (option === EDGE_SHARED_STORE_UNAVAILABLE) {\n return {\n namespace: unavailableCacheNamespace,\n store: createUnavailableCacheStore(),\n };\n }\n\n if (!option || typeof option.store !== \"object\") {\n throw new Error(\n 'Demiurge edge cacheStore is required. Pass a shared cache store, or pass \"unavailable\" to make a shared cache scope fail instead of caching per isolate.',\n );\n }\n\n return option;\n}\n\nfunction resolveRateLimitStore(\n option: EdgeRateLimitStoreOption | undefined,\n): RateLimitStore {\n if (option === EDGE_SHARED_STORE_UNAVAILABLE) {\n return createUnavailableRateLimitStore();\n }\n\n if (!option || typeof option.increment !== \"function\") {\n throw new Error(\n 'Demiurge edge rateLimitStore is required. Pass a shared rate limit store, or pass \"unavailable\" to make a rate limit policy fail instead of counting per isolate.',\n );\n }\n\n return option;\n}\n\n// A rate limit policy is visible before the first request when the caller\n// hands over the route modules. Reporting it at construction beats a 500 on\n// the request the policy was meant to protect.\nfunction assertNoRateLimitPolicies(\n modules: Readonly<Record<string, RouteModule>>,\n) {\n for (const [file, routeModule] of Object.entries(modules)) {\n const declared = routeModule.policy?.security?.rateLimit ??\n httpMethods\n .map((method) => routeModule[method])\n .find((capability) =>\n capability && capability.kind !== \"page\" && capability.security?.rateLimit\n );\n\n if (declared) {\n throw new Error(\n `Demiurge edge route ${JSON.stringify(file)} declares a rate limit policy, and this handler declares rateLimitStore \"unavailable\". Pass a shared rate limit store, or remove the policy.`,\n );\n }\n }\n}\n\nfunction toEdgeAssetHandler(\n value: EdgeAssetHandler | EdgeAssetHandlerOptions | undefined,\n) {\n if (!value) {\n return undefined;\n }\n\n return typeof value === \"function\" ? value : createEdgeAssetHandler(value);\n}\n"],"names":["excludedPathnames","createEdgeAssetHandler","options","isImmutable","isContentHashedFileName","prefix","normalizePrefix","assets","pathname","asset","normalized","normalizePathname","body","toBytes","fileNameOf","IMMUTABLE_FILE_CACHE_CONTROL","REVALIDATED_FILE_CACHE_CONTROL","contentTypeOf","createEtag","request","resolvePathname","headers","isNotModified","hash","byte","etag","ifNoneMatch","candidate","weakEtagValue","value","decoded","view","bytes","fileName","dot","extension","contentTypeForExtension","renderEdgePageResponse","match","renderEdgeStreamingPageResponse","renderPageResponse","scripts","createPageScriptContext","content","createPageRenderTree","renderAbort","committed","abortRender","stream","renderToReadableStream","error","ignoreRejection","shell","createDocumentShell","withDocumentShell","onCancel","encoder","reader","reason","controller","chunk","EdgeSharedStoreError","message","cacheStoreMessage","rateLimitStoreMessage","createUnavailableCacheStore","refuse","createUnavailableRateLimitStore","edgeAdapter","defineAdapter","EDGE_SHARED_STORE_UNAVAILABLE","unavailableCacheNamespace","httpMethods","createEdgeRequestHandler","cacheStore","resolveCacheStore","rateLimitStore","resolveRateLimitStore","assertNoRateLimitPolicies","serveAsset","toEdgeAssetHandler","handleRequest","createRequestHandler","clientIp","setRequestConnectionMetadata","option","modules","file","routeModule","method","capability"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/edge/stores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAQD,wBAAgB,2BAA2B,IAAI,UAAU,CAcxD;AAED,wBAAgB,+BAA+B,IAAI,cAAc,CAMhE"}
1
+ {"version":3,"file":"stores.d.ts","sourceRoot":"","sources":["../../src/edge/stores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMxD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAQD,wBAAgB,2BAA2B,IAAI,UAAU,CAexD;AAED,wBAAgB,+BAA+B,IAAI,cAAc,CAMhE"}
package/dist/index.d.ts CHANGED
@@ -12,7 +12,7 @@ export { mutation, mutationInput, MUTATION_REQUEST_HEADER, MUTATION_REQUEST_VALU
12
12
  export type { Adapter, AdapterCapability, AdapterCapabilityCheck, AdapterCapabilityMap, AdapterDefinition, } from "./adapter";
13
13
  export type { MutationContext, MutationCapability, MutationIdempotency, MutationInput, MutationMethod, MutationMethodsOf, MutationOptions, MutationRevalidation, MutationRevalidationDeclaration, MutationValidationIssue, HttpErrorDetails, HttpErrorInit, HttpErrorStatus, } from "./route";
14
14
  export type { RequestCacheStoreOptions } from "./server";
15
- export type { Cache, CacheDuration, CacheKey, CacheKeyPart, CacheRequest, CacheScope, CacheNamespace, CacheStore, CacheStoreEntry, CacheTag, CreateCacheOptions, Invalidation, InvalidationResult, IdempotencyRequest, IdempotencyResult, IdempotencyStore, Query, QueryDefinition, MemoryCacheOptions, MemoryCacheStoreOptions, MemoryIdempotencyStoreOptions, } from "./data";
15
+ export type { Cache, CacheDuration, CacheKey, CacheKeyPart, CacheRequest, CacheStoreAtomicity, CacheStoreCapabilities, CacheScope, CacheNamespace, CacheStore, CacheStoreEntry, CacheTag, CreateCacheOptions, Invalidation, InvalidationResult, IdempotencyRequest, IdempotencyResult, IdempotencyStore, Query, QueryDefinition, MemoryCacheOptions, MemoryCacheStoreOptions, MemoryIdempotencyStoreOptions, } from "./data";
16
16
  export type { DeferredScriptStrategy, DocumentMetadataTag, LinkTag, LinkContribution, Metadata, MetadataTitle, MetaTag, OgImage, OpenGraphMetadata, ResolvedMetadata, Robots, RobotsDirective, RobotsMetadata, PreconnectOptions, PreloadOptions, ScriptContribution, ScriptCspNeeds, ScriptProps, ScriptStrategy, ScriptTag, Sitemap, SitemapAlternate, SitemapChangeFrequency, SitemapEntry, StructuredDataTag, StructuredDataValue, } from "./document";
17
17
  export type { AnalyticsConsent, AnalyticsIntegration, AnalyticsProvider, CollectWebVitalsOptions, FontContribution, FontDefinition, FontFormat, FontStyle, GoogleFontOptions, Instrumentation, InstrumentationEvent, InstrumentationHandler, InstrumentationOptions, ImageFormat, ImageLoader, ImagePolicy, ImageProps, ImageRequestRejection, ImageRequestResult, ImageTransformOptions, ImageTransformPlan, ImageVariant, ImageVariantDescriptor, LocalFontOptions, PlausibleAnalytics, PlausibleAnalyticsOptions, ReadWebVitalsBeaconOptions, SentryAnalytics, SentryAnalyticsOptions, RemoteImagePattern, ObservabilityValue, OpenTelemetryAnalytics, OpenTelemetryAnalyticsOptions, RequestSignal, ServerStartSignal, TraceSignal, WebVitalName, WebVitalNavigationType, WebVitalRating, WebVitalReport, WebVitalSignal, WebVitalsBeacon, WebVitalsBeaconRejection, WebVitalsBeaconResult, WebVitalsIntegration, WebVitalsOptions, WebVitalsProps, WebVitalsTransport, } from "./platform";
18
18
  export type { InitialRouteData } from "./router";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,EACJ,iBAAiB,EACjB,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,SAAS,EACT,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,yBAAyB,EACzB,wBAAwB,EACxB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,4BAA4B,EAC5B,iBAAiB,EACjB,sBAAsB,EACtB,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,EACL,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,GAAG,GACJ,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,8BAA8B,EAC9B,eAAe,EACf,IAAI,EACJ,IAAI,EACJ,aAAa,EACb,UAAU,EACV,OAAO,EACP,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,MAAM,EACN,MAAM,EACN,oBAAoB,EACpB,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnH,OAAO,EACL,SAAS,EACT,yBAAyB,EACzB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,qBAAqB,EACrB,YAAY,EACZ,eAAe,EACf,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,KAAK,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,SAAS,EACT,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,4BAA4B,EAC5B,0BAA0B,EAC1B,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,QAAQ,EACR,OAAO,EACP,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,GAAG,EACH,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,OAAO,EACP,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,QAAQ,EACR,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,EACzB,yBAAyB,EACzB,WAAW,EACX,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,QAAQ,EACR,aAAa,EACb,uBAAuB,EACvB,sBAAsB,EACtB,4BAA4B,EAC5B,gBAAgB,EAChB,uBAAuB,EACvB,IAAI,EACJ,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,WAAW,EACX,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,uBAAuB,EACvB,YAAY,EACZ,GAAG,EACH,MAAM,EACN,IAAI,EACJ,UAAU,EACV,OAAO,GACR,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACzD,YAAY,EACV,KAAK,EACL,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,EACV,eAAe,EACf,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,QAAQ,CAAC;AAChB,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,OAAO,EACP,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,gBAAgB,EAChB,MAAM,EACN,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,cAAc,EACd,SAAS,EACT,OAAO,EACP,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,EACZ,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,6BAA6B,EAC7B,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EACV,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC7D,YAAY,EACV,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,eAAe,EACf,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,6BAA6B,EAC7B,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,2BAA2B,EAC3B,yBAAyB,EACzB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,4BAA4B,EAC5B,qBAAqB,EACrB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,sBAAsB,EACtB,WAAW,EACX,8BAA8B,EAC9B,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,WAAW,EACX,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,6BAA6B,EAC7B,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,qBAAqB,GACtB,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}