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

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 (237) hide show
  1. package/README.md +36 -11
  2. package/bin/demiurge.mjs +47 -13
  3. package/dist/adapter/index.d.ts +1 -1
  4. package/dist/adapter/index.d.ts.map +1 -1
  5. package/dist/browser/file-router.d.ts +388 -5
  6. package/dist/browser/file-router.d.ts.map +1 -1
  7. package/dist/browser/focus.d.ts +20 -0
  8. package/dist/browser/focus.d.ts.map +1 -0
  9. package/dist/browser/index.d.ts +7 -1
  10. package/dist/browser/index.d.ts.map +1 -1
  11. package/dist/browser/mutation-action.d.ts +81 -0
  12. package/dist/browser/mutation-action.d.ts.map +1 -0
  13. package/dist/chunks/document-shell-9GPwtcTt.js +36 -0
  14. package/dist/chunks/document-shell-9GPwtcTt.js.map +1 -0
  15. package/dist/chunks/{image-codec-Di53WpcH.js → image-codec-Dh1POFhE.js} +2 -2
  16. package/dist/chunks/{image-codec-Di53WpcH.js.map → image-codec-Dh1POFhE.js.map} +1 -1
  17. package/dist/chunks/{images-Edar3eU1.js → images-CG7ZzayG.js} +99 -91
  18. package/dist/chunks/images-CG7ZzayG.js.map +1 -0
  19. package/dist/chunks/index-0MNiR_wo.js +833 -0
  20. package/dist/chunks/index-0MNiR_wo.js.map +1 -0
  21. package/dist/chunks/manifest-vO6c0G0W.js +19 -0
  22. package/dist/chunks/manifest-vO6c0G0W.js.map +1 -0
  23. package/dist/chunks/plugin-BZauDxRY.js +2310 -0
  24. package/dist/chunks/plugin-BZauDxRY.js.map +1 -0
  25. package/dist/chunks/session-store-ChModVcq.js +92 -0
  26. package/dist/chunks/session-store-ChModVcq.js.map +1 -0
  27. package/dist/chunks/static-files-ehaD1kE7.js +51 -0
  28. package/dist/chunks/static-files-ehaD1kE7.js.map +1 -0
  29. package/dist/chunks/streaming-GYIsVTQH.js +560 -0
  30. package/dist/chunks/streaming-GYIsVTQH.js.map +1 -0
  31. package/dist/chunks/testing-CUwGj2ie.js +4751 -0
  32. package/dist/chunks/testing-CUwGj2ie.js.map +1 -0
  33. package/dist/chunks/vite-QoqrGl6f.js +259 -0
  34. package/dist/chunks/vite-QoqrGl6f.js.map +1 -0
  35. package/dist/cli.d.ts +19 -25
  36. package/dist/cli.d.ts.map +1 -1
  37. package/dist/cli.js +289 -128
  38. package/dist/cli.js.map +1 -1
  39. package/dist/config/define.d.ts +3 -0
  40. package/dist/config/define.d.ts.map +1 -0
  41. package/dist/config/index.d.ts +7 -0
  42. package/dist/config/index.d.ts.map +1 -0
  43. package/dist/config/index.js +78 -0
  44. package/dist/config/index.js.map +1 -0
  45. package/dist/config/load.d.ts +12 -0
  46. package/dist/config/load.d.ts.map +1 -0
  47. package/dist/config/types.d.ts +74 -0
  48. package/dist/config/types.d.ts.map +1 -0
  49. package/dist/config/validate.d.ts +9 -0
  50. package/dist/config/validate.d.ts.map +1 -0
  51. package/dist/config/vite.d.ts +12 -0
  52. package/dist/config/vite.d.ts.map +1 -0
  53. package/dist/data/cache.d.ts +2 -0
  54. package/dist/data/cache.d.ts.map +1 -1
  55. package/dist/data/idempotency.d.ts.map +1 -1
  56. package/dist/deployment/testing.d.ts +25 -0
  57. package/dist/deployment/testing.d.ts.map +1 -0
  58. package/dist/deployment/testing.js +171 -0
  59. package/dist/deployment/testing.js.map +1 -0
  60. package/dist/document/hydration.d.ts +9 -0
  61. package/dist/document/hydration.d.ts.map +1 -1
  62. package/dist/document/index.d.ts +4 -2
  63. package/dist/document/index.d.ts.map +1 -1
  64. package/dist/document/metadata.d.ts +8 -0
  65. package/dist/document/metadata.d.ts.map +1 -1
  66. package/dist/document/navigation.d.ts +28 -0
  67. package/dist/document/navigation.d.ts.map +1 -0
  68. package/dist/document/render.d.ts +3 -1
  69. package/dist/document/render.d.ts.map +1 -1
  70. package/dist/document/seo.d.ts.map +1 -1
  71. package/dist/edge/assets.d.ts.map +1 -1
  72. package/dist/edge/index.js +55 -73
  73. package/dist/edge/index.js.map +1 -1
  74. package/dist/index.d.ts +12 -10
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +1883 -692
  77. package/dist/index.js.map +1 -1
  78. package/dist/inspect/command.d.ts +28 -0
  79. package/dist/inspect/command.d.ts.map +1 -0
  80. package/dist/inspect/index.d.ts +9 -0
  81. package/dist/inspect/index.d.ts.map +1 -0
  82. package/dist/inspect/redact.d.ts +35 -0
  83. package/dist/inspect/redact.d.ts.map +1 -0
  84. package/dist/inspect/report.d.ts +24 -0
  85. package/dist/inspect/report.d.ts.map +1 -0
  86. package/dist/inspect/types.d.ts +102 -0
  87. package/dist/inspect/types.d.ts.map +1 -0
  88. package/dist/internal/testing.js +5 -5
  89. package/dist/kv/index.d.ts +2 -0
  90. package/dist/kv/index.d.ts.map +1 -1
  91. package/dist/kv/index.js +170 -73
  92. package/dist/kv/index.js.map +1 -1
  93. package/dist/kv/session-store.d.ts +20 -0
  94. package/dist/kv/session-store.d.ts.map +1 -0
  95. package/dist/manifest.d.ts +10 -0
  96. package/dist/manifest.d.ts.map +1 -0
  97. package/dist/node/http.d.ts +5 -0
  98. package/dist/node/http.d.ts.map +1 -1
  99. package/dist/node/image.d.ts.map +1 -1
  100. package/dist/node/index.d.ts +4 -1
  101. package/dist/node/index.d.ts.map +1 -1
  102. package/dist/node/index.js +257 -182
  103. package/dist/node/index.js.map +1 -1
  104. package/dist/node/serve.d.ts +47 -0
  105. package/dist/node/serve.d.ts.map +1 -0
  106. package/dist/node/static.d.ts.map +1 -1
  107. package/dist/platform/fonts.d.ts.map +1 -1
  108. package/dist/platform/image-url.d.ts.map +1 -1
  109. package/dist/platform/url.d.ts +19 -0
  110. package/dist/platform/url.d.ts.map +1 -0
  111. package/dist/platform/web-vitals.d.ts.map +1 -1
  112. package/dist/redis/index.d.ts +2 -0
  113. package/dist/redis/index.d.ts.map +1 -1
  114. package/dist/redis/index.js +186 -69
  115. package/dist/redis/index.js.map +1 -1
  116. package/dist/redis/session-store.d.ts +9 -0
  117. package/dist/redis/session-store.d.ts.map +1 -0
  118. package/dist/route/index.d.ts +3 -2
  119. package/dist/route/index.d.ts.map +1 -1
  120. package/dist/route/mutation.d.ts +97 -0
  121. package/dist/route/mutation.d.ts.map +1 -0
  122. package/dist/route/serialization.d.ts +24 -0
  123. package/dist/route/serialization.d.ts.map +1 -0
  124. package/dist/route/types.d.ts +6 -1
  125. package/dist/route/types.d.ts.map +1 -1
  126. package/dist/route/webhook.d.ts +6 -1
  127. package/dist/route/webhook.d.ts.map +1 -1
  128. package/dist/router/manifest.d.ts +8 -0
  129. package/dist/router/manifest.d.ts.map +1 -1
  130. package/dist/router/navigation-data.d.ts +9 -1
  131. package/dist/router/navigation-data.d.ts.map +1 -1
  132. package/dist/routing/generate.d.ts +3 -0
  133. package/dist/routing/generate.d.ts.map +1 -1
  134. package/dist/routing/index.d.ts +3 -1
  135. package/dist/routing/index.d.ts.map +1 -1
  136. package/dist/routing/locale.d.ts +43 -0
  137. package/dist/routing/locale.d.ts.map +1 -0
  138. package/dist/routing/types.d.ts +12 -0
  139. package/dist/routing/types.d.ts.map +1 -1
  140. package/dist/security/audit.d.ts +2 -1
  141. package/dist/security/audit.d.ts.map +1 -1
  142. package/dist/security/authorization.d.ts +36 -0
  143. package/dist/security/authorization.d.ts.map +1 -0
  144. package/dist/security/cookie-session.d.ts +43 -0
  145. package/dist/security/cookie-session.d.ts.map +1 -0
  146. package/dist/security/csrf.d.ts +1 -1
  147. package/dist/security/csrf.d.ts.map +1 -1
  148. package/dist/security/env-startup.d.ts +13 -0
  149. package/dist/security/env-startup.d.ts.map +1 -0
  150. package/dist/security/env.d.ts +49 -11
  151. package/dist/security/env.d.ts.map +1 -1
  152. package/dist/security/exceptions.d.ts +29 -0
  153. package/dist/security/exceptions.d.ts.map +1 -0
  154. package/dist/security/finding-codes.d.ts +56 -0
  155. package/dist/security/finding-codes.d.ts.map +1 -0
  156. package/dist/security/index.d.ts +14 -3
  157. package/dist/security/index.d.ts.map +1 -1
  158. package/dist/security/policy.d.ts +2 -5
  159. package/dist/security/policy.d.ts.map +1 -1
  160. package/dist/security/report.d.ts +2 -1
  161. package/dist/security/report.d.ts.map +1 -1
  162. package/dist/security/request.d.ts +1 -0
  163. package/dist/security/request.d.ts.map +1 -1
  164. package/dist/security/session-manager.d.ts +32 -0
  165. package/dist/security/session-manager.d.ts.map +1 -0
  166. package/dist/security/session-store.d.ts +51 -0
  167. package/dist/security/session-store.d.ts.map +1 -0
  168. package/dist/security/testing.d.ts +10 -0
  169. package/dist/security/testing.d.ts.map +1 -0
  170. package/dist/security/testing.js +145 -0
  171. package/dist/security/testing.js.map +1 -0
  172. package/dist/security/types.d.ts +139 -5
  173. package/dist/security/types.d.ts.map +1 -1
  174. package/dist/security/upload.d.ts +3 -3
  175. package/dist/security/upload.d.ts.map +1 -1
  176. package/dist/security/verification.d.ts.map +1 -1
  177. package/dist/server/document-shell.d.ts.map +1 -1
  178. package/dist/server/errors.d.ts +1 -0
  179. package/dist/server/errors.d.ts.map +1 -1
  180. package/dist/server/index.d.ts +1 -0
  181. package/dist/server/index.d.ts.map +1 -1
  182. package/dist/server/not-found.d.ts +1 -0
  183. package/dist/server/not-found.d.ts.map +1 -1
  184. package/dist/server/render-tree.d.ts.map +1 -1
  185. package/dist/server/request-handler.d.ts +7 -2
  186. package/dist/server/request-handler.d.ts.map +1 -1
  187. package/dist/server/request-metadata.d.ts +1 -0
  188. package/dist/server/request-metadata.d.ts.map +1 -1
  189. package/dist/server/ssr.d.ts +2 -0
  190. package/dist/server/ssr.d.ts.map +1 -1
  191. package/dist/server-only/browser.d.ts +2 -0
  192. package/dist/server-only/browser.d.ts.map +1 -0
  193. package/dist/server-only/browser.js +4 -0
  194. package/dist/server-only/browser.js.map +1 -0
  195. package/dist/server-only/index.d.ts +2 -0
  196. package/dist/server-only/index.d.ts.map +1 -0
  197. package/dist/server-only/index.js +2 -0
  198. package/dist/server-only/index.js.map +1 -0
  199. package/dist/static/index.d.ts +2 -0
  200. package/dist/static/index.d.ts.map +1 -1
  201. package/dist/static/index.js +380 -363
  202. package/dist/static/index.js.map +1 -1
  203. package/dist/static/preview.d.ts.map +1 -1
  204. package/dist/static/vercel.d.ts +11 -2
  205. package/dist/static/vercel.d.ts.map +1 -1
  206. package/dist/static-files.d.ts +12 -0
  207. package/dist/static-files.d.ts.map +1 -1
  208. package/dist/type-guards.d.ts +19 -0
  209. package/dist/type-guards.d.ts.map +1 -0
  210. package/dist/vite/env-boundary.d.ts +14 -0
  211. package/dist/vite/env-boundary.d.ts.map +1 -0
  212. package/dist/vite/index.d.ts +13 -6
  213. package/dist/vite/index.d.ts.map +1 -1
  214. package/dist/vite/index.js +29 -1560
  215. package/dist/vite/index.js.map +1 -1
  216. package/dist/vite/plugin.d.ts +24 -3
  217. package/dist/vite/plugin.d.ts.map +1 -1
  218. package/dist/vite/policy-verification.d.ts +33 -2
  219. package/dist/vite/policy-verification.d.ts.map +1 -1
  220. package/dist/vite/route-audit.d.ts +14 -2
  221. package/dist/vite/route-audit.d.ts.map +1 -1
  222. package/dist/vite/server-only-boundary.d.ts +8 -0
  223. package/dist/vite/server-only-boundary.d.ts.map +1 -0
  224. package/package.json +24 -6
  225. package/dist/chunks/document-shell-WoM8yZlR.js +0 -35
  226. package/dist/chunks/document-shell-WoM8yZlR.js.map +0 -1
  227. package/dist/chunks/images-Edar3eU1.js.map +0 -1
  228. package/dist/chunks/request-metadata-DaIYq4Ea.js +0 -677
  229. package/dist/chunks/request-metadata-DaIYq4Ea.js.map +0 -1
  230. package/dist/chunks/static-files-DUjHw-4H.js +0 -11
  231. package/dist/chunks/static-files-DUjHw-4H.js.map +0 -1
  232. package/dist/chunks/streaming-D0fGAuiO.js +0 -469
  233. package/dist/chunks/streaming-D0fGAuiO.js.map +0 -1
  234. package/dist/chunks/testing-CRflAw4X.js +0 -3475
  235. package/dist/chunks/testing-CRflAw4X.js.map +0 -1
  236. package/dist/route/action.d.ts +0 -33
  237. package/dist/route/action.d.ts.map +0 -1
@@ -0,0 +1,28 @@
1
+ import type { LinkTag, ResolvedMetadata } from "./metadata";
2
+ import type { ScriptTag } from "./scripts";
3
+ export declare const DOCUMENT_CONTRIBUTION_ATTRIBUTE = "data-demiurge-document-contribution";
4
+ export declare const DOCUMENT_SCRIPT_STRATEGY_ATTRIBUTE = "data-demiurge-script-strategy";
5
+ export declare const NAVIGATION_STATUS_ATTRIBUTE = "data-demiurge-navigation-status";
6
+ export declare const NAVIGATION_STATUS_ID = "__demiurge_navigation_status";
7
+ export declare const NAVIGATION_STATUS_STYLE_ATTRIBUTE = "data-demiurge-navigation-status-style";
8
+ export declare function ensureNavigationStatusRegion(target?: Document): HTMLElement | null | undefined;
9
+ export declare function announceNavigation(message: string, target?: Document): void;
10
+ export type NavigationScriptTag = Pick<ScriptTag, "async" | "crossOrigin" | "dataApi" | "dataDomain" | "defer" | "id" | "integrity" | "kind" | "referrerPolicy" | "src" | "strategy" | "type">;
11
+ export type NavigationDocument = {
12
+ dir?: "ltr" | "rtl";
13
+ lang?: string;
14
+ links: LinkTag[];
15
+ metadata: ResolvedMetadata;
16
+ scripts: NavigationScriptTag[];
17
+ title: string;
18
+ };
19
+ export declare function createNavigationDocument(options: {
20
+ dir?: "ltr" | "rtl";
21
+ lang?: string;
22
+ links?: readonly LinkTag[];
23
+ metadata: ResolvedMetadata;
24
+ scripts?: readonly ScriptTag[];
25
+ title?: string;
26
+ }): NavigationDocument;
27
+ export declare function applyNavigationDocument(contribution: NavigationDocument, target?: Document): void;
28
+ //# sourceMappingURL=navigation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/document/navigation.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAkB,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3D,eAAO,MAAM,+BAA+B,wCACL,CAAC;AACxC,eAAO,MAAM,kCAAkC,kCACd,CAAC;AAClC,eAAO,MAAM,2BAA2B,oCAAoC,CAAC;AAC7E,eAAO,MAAM,oBAAoB,iCAAiC,CAAC;AACnE,eAAO,MAAM,iCAAiC,0CAA0C,CAAC;AAIzF,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,QAAQ,kCAsB7D;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,QAMpE;AAED,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,SAAS,EACP,OAAO,GACP,aAAa,GACb,SAAS,GACT,YAAY,GACZ,OAAO,GACP,IAAI,GACJ,WAAW,GACX,MAAM,GACN,gBAAgB,GAChB,KAAK,GACL,UAAU,GACV,MAAM,CACT,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,kBAAkB,CASrB;AAmBD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,kBAAkB,EAChC,MAAM,CAAC,EAAE,QAAQ,QA0BlB"}
@@ -5,10 +5,12 @@ export type DocumentBody = {
5
5
  data: unknown;
6
6
  fallback?: "not-found";
7
7
  html: string;
8
+ locale?: string;
8
9
  navigation?: "document";
9
10
  };
10
11
  export type RenderDocumentOptions = {
11
12
  body?: DocumentBody;
13
+ dir?: "ltr" | "rtl";
12
14
  entrySrc?: string;
13
15
  lang?: string;
14
16
  links?: LinkTag[];
@@ -22,7 +24,7 @@ export type RenderDocumentShellOptions = Omit<RenderDocumentOptions, "body"> & {
22
24
  body: Omit<DocumentBody, "html">;
23
25
  };
24
26
  export declare function renderDocument(options: RenderDocumentOptions): string;
25
- export declare function renderDocumentShell({ body, entrySrc, lang, links, metadata, nonce, scripts, styles, title, }: RenderDocumentShellOptions): {
27
+ export declare function renderDocumentShell({ body, dir, entrySrc, lang, links, metadata, nonce, scripts, styles, title, }: RenderDocumentShellOptions): {
26
28
  prefix: string;
27
29
  suffix: string;
28
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/document/render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE5D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;IAC7E,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,UAS5D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,QAAQ,EACR,IAAW,EACX,KAAU,EACV,QAAQ,EACR,KAAK,EACL,OAAY,EACZ,MAAW,EACX,KAAsB,GACvB,EAAE,0BAA0B;;;EAwB5B"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/document/render.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,OAAO,EACP,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAS5D,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;IAC7E,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;CAClC,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,UAS5D;AAED,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,GAAG,EACH,QAAQ,EACR,IAAW,EACX,KAAU,EACV,QAAQ,EACR,KAAK,EACL,OAAY,EACZ,MAAW,EACX,KAAsB,GACvB,EAAE,0BAA0B;;;EAyB5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/document/seo.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAIvE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,UAU7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,UA4B1C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,UAuB9C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,YAOnD"}
1
+ {"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/document/seo.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,sBAAsB,GAC9B,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACzC,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,YAAY,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACtC,SAAS,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,MAAM,GAAG;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,OAAO,CAOvE;AAsCD,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,UAU7C;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,UA4B1C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,UAuB9C;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,YAOnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/edge/assets.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAqCF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAyDlB"}
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/edge/assets.ts"],"names":[],"mappings":"AAWA,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,WAAW,GAAG,eAAe,GAAG,MAAM,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;AAE/D,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;AAE9E,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAiBF,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,CAyDlB"}
@@ -1,53 +1,35 @@
1
- import { a as p, c as w, b as E, d as y, s as b } from "../chunks/request-metadata-DaIYq4Ea.js";
2
- import { c as S } from "../chunks/testing-CRflAw4X.js";
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";
3
3
  import { renderToReadableStream as R } from "react-dom/server";
4
4
  import "react";
5
5
  import "react/jsx-runtime";
6
- import { i as v, I as L, R as A } from "../chunks/static-files-DUjHw-4H.js";
7
- import { c as T } from "../chunks/document-shell-WoM8yZlR.js";
8
- const x = {
9
- ".avif": "image/avif",
10
- ".css": "text/css; charset=utf-8",
11
- ".gif": "image/gif",
12
- ".html": "text/html; charset=utf-8",
13
- ".ico": "image/x-icon",
14
- ".jpeg": "image/jpeg",
15
- ".jpg": "image/jpeg",
16
- ".js": "text/javascript; charset=utf-8",
17
- ".json": "application/json; charset=utf-8",
18
- ".mjs": "text/javascript; charset=utf-8",
19
- ".png": "image/png",
20
- ".svg": "image/svg+xml",
21
- ".txt": "text/plain; charset=utf-8",
22
- ".webmanifest": "application/manifest+json",
23
- ".webp": "image/webp",
24
- ".woff": "font/woff",
25
- ".woff2": "font/woff2"
26
- }, P = /* @__PURE__ */ new Set([
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";
8
+ const C = /* @__PURE__ */ new Set([
27
9
  "/demiurge-manifest.json",
28
10
  "/index.html"
29
11
  ]);
30
- function C(e) {
31
- const t = e.immutable ?? v, r = H(e.prefix), i = /* @__PURE__ */ new Map();
12
+ function O(e) {
13
+ const t = e.immutable ?? L, r = M(e.prefix), c = /* @__PURE__ */ new Map();
32
14
  for (const [o, n] of Object.entries(e.assets)) {
33
- const a = m(o);
34
- if (P.has(a))
15
+ const a = h(o);
16
+ if (C.has(a))
35
17
  continue;
36
- const s = I(n.body);
37
- i.set(a, {
18
+ const s = x(n.body);
19
+ c.set(a, {
38
20
  body: s,
39
- cacheControl: n.immutable ?? t(h(a)) ? L : A,
40
- contentType: n.contentType ?? M(a),
41
- etag: j(s)
21
+ cacheControl: n.immutable ?? t(m(a)) ? v : A,
22
+ contentType: n.contentType ?? N(a),
23
+ etag: D(s)
42
24
  });
43
25
  }
44
26
  return async function(n) {
45
27
  if (n.method !== "GET" && n.method !== "HEAD")
46
28
  return null;
47
- const a = D(r, new URL(n.url).pathname), s = a === null ? void 0 : i.get(a);
29
+ const a = I(r, new URL(n.url).pathname), s = a === null ? void 0 : c.get(a);
48
30
  if (!s)
49
31
  return null;
50
- const c = new Headers({
32
+ const i = new Headers({
51
33
  "cache-control": s.cacheControl,
52
34
  "content-length": String(s.body.byteLength),
53
35
  "content-type": s.contentType,
@@ -55,25 +37,25 @@ function C(e) {
55
37
  etag: s.etag,
56
38
  "x-content-type-options": "nosniff"
57
39
  });
58
- return O(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 });
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 });
59
41
  };
60
42
  }
61
- function j(e) {
43
+ function D(e) {
62
44
  let t = 2166136261;
63
45
  for (const r of e)
64
46
  t = Math.imul(t ^ r, 16777619) >>> 0;
65
47
  return `W/"${e.byteLength.toString(16)}-${t.toString(16)}"`;
66
48
  }
67
- function O(e, t) {
49
+ function H(e, t) {
68
50
  const r = e.headers.get("if-none-match");
69
51
  return r === null ? !1 : r.trim() === "*" || r.split(",").some(
70
- (i) => f(i) === f(t)
52
+ (c) => f(c) === f(t)
71
53
  );
72
54
  }
73
55
  function f(e) {
74
56
  return e.trim().replace(/^W\//i, "");
75
57
  }
76
- function D(e, t) {
58
+ function I(e, t) {
77
59
  let r;
78
60
  try {
79
61
  r = decodeURIComponent(t);
@@ -85,34 +67,34 @@ function D(e, t) {
85
67
  return null;
86
68
  r = r.slice(e.length - 1);
87
69
  }
88
- return m(r);
70
+ return h(r);
89
71
  }
90
- function m(e) {
72
+ function h(e) {
91
73
  return e.startsWith("/") ? e : `/${e}`;
92
74
  }
93
- function H(e) {
75
+ function M(e) {
94
76
  return !e || e === "/" ? "" : `/${e.replace(/^\/|\/$/g, "")}/`;
95
77
  }
96
- function I(e) {
78
+ function x(e) {
97
79
  if (typeof e == "string")
98
80
  return new TextEncoder().encode(e);
99
81
  const t = ArrayBuffer.isView(e) ? new Uint8Array(e.buffer, e.byteOffset, e.byteLength) : new Uint8Array(e), r = new Uint8Array(t.byteLength);
100
82
  return r.set(t), r;
101
83
  }
102
- function h(e) {
84
+ function m(e) {
103
85
  return e.slice(e.lastIndexOf("/") + 1);
104
86
  }
105
- function M(e) {
106
- const t = h(e), r = t.lastIndexOf("."), i = r === -1 ? "" : t.slice(r).toLowerCase();
107
- return x[i] ?? "application/octet-stream";
87
+ function N(e) {
88
+ const t = m(e), r = t.lastIndexOf("."), c = r === -1 ? "" : t.slice(r);
89
+ return T(c);
108
90
  }
109
- function N(e, t = {}) {
110
- return e.render.mode === "streaming" ? U(e, t) : p(e, t);
91
+ function U(e, t = {}) {
92
+ return e.render.mode === "streaming" ? _(e, t) : E(e, t);
111
93
  }
112
- async function U(e, t = {}) {
94
+ async function _(e, t = {}) {
113
95
  if (t.signal?.aborted)
114
96
  throw t.signal.reason;
115
- const r = w(e, t), i = E(e, r), o = new AbortController();
97
+ const r = p(e, t), c = y(e, r), o = new AbortController();
116
98
  let n = !1;
117
99
  const a = () => {
118
100
  o.abort(
@@ -122,7 +104,7 @@ async function U(e, t = {}) {
122
104
  t.signal?.addEventListener("abort", a, { once: !0 });
123
105
  let s;
124
106
  try {
125
- s = await R(i, {
107
+ s = await R(c, {
126
108
  nonce: t.nonce,
127
109
  onError(l) {
128
110
  n && !o.signal.aborted && t.onStreamError?.(l);
@@ -133,21 +115,21 @@ async function U(e, t = {}) {
133
115
  throw t.signal?.removeEventListener("abort", a), l;
134
116
  }
135
117
  s.allReady.catch(u);
136
- let c;
118
+ let i;
137
119
  try {
138
- c = await T(e, {
120
+ i = await P(e, {
139
121
  ...t,
140
122
  scripts: r.scripts()
141
123
  });
142
124
  } catch (l) {
143
125
  throw t.signal?.removeEventListener("abort", a), a(), await s.cancel().catch(u), l;
144
126
  }
145
- return r.flushHead(), n = !0, new Response(_(s, c, a), {
127
+ return r.flushHead(), n = !0, new Response(j(s, i, a), {
146
128
  headers: { "content-type": "text/html; charset=utf-8" }
147
129
  });
148
130
  }
149
- function _(e, t, r) {
150
- const i = new TextEncoder(), o = e.getReader();
131
+ function j(e, t, r) {
132
+ const c = new TextEncoder(), o = e.getReader();
151
133
  return new ReadableStream({
152
134
  async cancel(n) {
153
135
  r(), await o.cancel(n).catch(u);
@@ -161,13 +143,13 @@ function _(e, t, r) {
161
143
  return;
162
144
  }
163
145
  if (a.done) {
164
- n.enqueue(i.encode(t.suffix)), n.close();
146
+ n.enqueue(c.encode(t.suffix)), n.close();
165
147
  return;
166
148
  }
167
149
  n.enqueue(a.value);
168
150
  },
169
151
  start(n) {
170
- n.enqueue(i.encode(t.prefix));
152
+ n.enqueue(c.encode(t.prefix));
171
153
  }
172
154
  });
173
155
  }
@@ -200,18 +182,18 @@ function V() {
200
182
  }
201
183
  };
202
184
  }
203
- const B = y({
185
+ const B = w({
204
186
  name: "edge",
205
187
  capabilities: {
206
188
  crossOriginIsolationHeaders: !0,
207
189
  nonceInjection: !0,
208
190
  streaming: !0
209
191
  }
210
- }), d = "unavailable", W = {
192
+ }), d = "unavailable", F = {
211
193
  app: "demiurge-edge",
212
194
  environment: "unavailable",
213
195
  schemaVersion: 1
214
- }, z = [
196
+ }, W = [
215
197
  "GET",
216
198
  "POST",
217
199
  "PUT",
@@ -221,27 +203,27 @@ const B = y({
221
203
  "HEAD"
222
204
  ];
223
205
  function ne(e) {
224
- const t = F(e.cacheStore), r = G(e.rateLimitStore);
206
+ const t = z(e.cacheStore), r = G(e.rateLimitStore);
225
207
  e.rateLimitStore === d && e.routeModules && J(e.routeModules);
226
- const i = K(e.assets), o = S({
208
+ const c = K(e.assets), o = b({
227
209
  adapter: B,
228
210
  cacheStore: t,
229
211
  onError: e.onError,
230
212
  rateLimitStore: r,
231
- renderPage: e.renderPage ?? N,
213
+ renderPage: e.renderPage ?? U,
232
214
  routeModules: e.routeModules,
233
215
  routes: e.routes,
234
216
  ssr: e.ssr
235
217
  });
236
218
  return async function(a) {
237
219
  const s = e.clientIp?.(a);
238
- return s && b(a, { clientIp: s }), await i?.(a) ?? await o(a);
220
+ return s && S(a, { clientIp: s }), await c?.(a) ?? await o(a);
239
221
  };
240
222
  }
241
- function F(e) {
223
+ function z(e) {
242
224
  if (e === d)
243
225
  return {
244
- namespace: W,
226
+ namespace: F,
245
227
  store: q()
246
228
  };
247
229
  if (!e || typeof e.store != "object")
@@ -261,7 +243,7 @@ function G(e) {
261
243
  }
262
244
  function J(e) {
263
245
  for (const [t, r] of Object.entries(e))
264
- if (r.policy?.security?.rateLimit ?? z.map((o) => r[o]).find(
246
+ if (r.policy?.security?.rateLimit ?? W.map((o) => r[o]).find(
265
247
  (o) => o && o.kind !== "page" && o.security?.rateLimit
266
248
  ))
267
249
  throw new Error(
@@ -270,17 +252,17 @@ function J(e) {
270
252
  }
271
253
  function K(e) {
272
254
  if (e)
273
- return typeof e == "function" ? e : C(e);
255
+ return typeof e == "function" ? e : O(e);
274
256
  }
275
257
  export {
276
258
  d as EDGE_SHARED_STORE_UNAVAILABLE,
277
259
  g as EdgeSharedStoreError,
278
- C as createEdgeAssetHandler,
260
+ O as createEdgeAssetHandler,
279
261
  ne as createEdgeRequestHandler,
280
262
  q as createUnavailableCacheStore,
281
263
  V as createUnavailableRateLimitStore,
282
264
  B as edgeAdapter,
283
- N as renderEdgePageResponse,
284
- U as renderEdgeStreamingPageResponse
265
+ U as renderEdgePageResponse,
266
+ _ as renderEdgeStreamingPageResponse
285
267
  };
286
268
  //# sourceMappingURL=index.js.map
@@ -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 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\nconst contentTypes: Record<string, string> = {\n \".avif\": \"image/avif\",\n \".css\": \"text/css; charset=utf-8\",\n \".gif\": \"image/gif\",\n \".html\": \"text/html; charset=utf-8\",\n \".ico\": \"image/x-icon\",\n \".jpeg\": \"image/jpeg\",\n \".jpg\": \"image/jpeg\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".mjs\": \"text/javascript; charset=utf-8\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml\",\n \".txt\": \"text/plain; charset=utf-8\",\n \".webmanifest\": \"application/manifest+json\",\n \".webp\": \"image/webp\",\n \".woff\": \"font/woff\",\n \".woff2\": \"font/woff2\",\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).toLowerCase();\n\n return contentTypes[extension] ?? \"application/octet-stream\";\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":["contentTypes","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","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":";;;;;;;AAiCA,MAAMA,IAAuC;AAAA,EAC3C,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,SAAS;AAAA,EACT,UAAU;AACZ,GAKMC,wBAAwB,IAAI;AAAA,EAChC;AAAA,EACA;AACF,CAAC;AAEM,SAASC,EACdC,GACkB;AAClB,QAAMC,IAAcD,EAAQ,aAAaE,GACnCC,IAASC,EAAgBJ,EAAQ,MAAM,GACvCK,wBAAa,IAAA;AAEnB,aAAW,CAACC,GAAUC,CAAK,KAAK,OAAO,QAAQP,EAAQ,MAAM,GAAG;AAC9D,UAAMQ,IAAaC,EAAkBH,CAAQ;AAE7C,QAAIR,EAAkB,IAAIU,CAAU;AAClC;AAGF,UAAME,IAAOC,EAAQJ,EAAM,IAAI;AAC/B,IAAAF,EAAO,IAAIG,GAAY;AAAA,MACrB,MAAAE;AAAA,MACA,cAAeH,EAAM,aAAaN,EAAYW,EAAWJ,CAAU,CAAC,IAChEK,IACAC;AAAA,MACJ,aAAaP,EAAM,eAAeQ,EAAcP,CAAU;AAAA,MAC1D,MAAMQ,EAAWN,CAAI;AAAA,IAAA,CACtB;AAAA,EACH;AAEA,SAAO,eAA+BO,GAAS;AAC7C,QAAIA,EAAQ,WAAW,SAASA,EAAQ,WAAW;AACjD,aAAO;AAGT,UAAMX,IAAWY,EAAgBf,GAAQ,IAAI,IAAIc,EAAQ,GAAG,EAAE,QAAQ,GAChEV,IAAQD,MAAa,OAAO,SAAYD,EAAO,IAAIC,CAAQ;AAEjE,QAAI,CAACC;AACH,aAAO;AAGT,UAAMY,IAAU,IAAI,QAAQ;AAAA,MAC1B,iBAAiBZ,EAAM;AAAA,MACvB,kBAAkB,OAAOA,EAAM,KAAK,UAAU;AAAA,MAC9C,gBAAgBA,EAAM;AAAA,MACtB,gCAAgC;AAAA,MAChC,MAAMA,EAAM;AAAA,MACZ,0BAA0B;AAAA,IAAA,CAC3B;AAED,WAAIa,EAAcH,GAASV,EAAM,IAAI,KACnCY,EAAQ,OAAO,gBAAgB,GAC/BA,EAAQ,OAAO,cAAc,GAEtB,IAAI,SAAS,MAAM,EAAE,SAAAA,GAAS,QAAQ,KAAK,KAGhDF,EAAQ,WAAW,SACd,IAAI,SAAS,MAAM,EAAE,SAAAE,GAAS,IAGhC,IAAI,SAASZ,EAAM,MAAM,EAAE,SAAAY,GAAS;AAAA,EAC7C;AACF;AAKA,SAASH,EAAWN,GAAkB;AACpC,MAAIW,IAAO;AAEX,aAAWC,KAAQZ;AACjB,IAAAW,IAAO,KAAK,KAAKA,IAAOC,GAAM,QAAU,MAAM;AAGhD,SAAO,MAAMZ,EAAK,WAAW,SAAS,EAAE,CAAC,IAAIW,EAAK,SAAS,EAAE,CAAC;AAChE;AAEA,SAASD,EAAcH,GAAkBM,GAAc;AACrD,QAAMC,IAAcP,EAAQ,QAAQ,IAAI,eAAe;AAEvD,SAAIO,MAAgB,OACX,KAGFA,EAAY,WAAW,OAAOA,EAAY,MAAM,GAAG,EAAE;AAAA,IAC1D,CAACC,MAAcC,EAAcD,CAAS,MAAMC,EAAcH,CAAI;AAAA,EAAA;AAElE;AAEA,SAASG,EAAcC,GAAe;AACpC,SAAOA,EAAM,KAAA,EAAO,QAAQ,SAAS,EAAE;AACzC;AAEA,SAAST,EAAgBf,GAAgBG,GAAkB;AACzD,MAAIsB;AAEJ,MAAI;AACF,IAAAA,IAAU,mBAAmBtB,CAAQ;AAAA,EACvC,QAAQ;AACN,WAAO;AAAA,EACT;AAEA,MAAIH,GAAQ;AACV,QAAI,CAACyB,EAAQ,WAAWzB,CAAM;AAC5B,aAAO;AAGT,IAAAyB,IAAUA,EAAQ,MAAMzB,EAAO,SAAS,CAAC;AAAA,EAC3C;AAEA,SAAOM,EAAkBmB,CAAO;AAClC;AAEA,SAASnB,EAAkBH,GAAkB;AAC3C,SAAOA,EAAS,WAAW,GAAG,IAAIA,IAAW,IAAIA,CAAQ;AAC3D;AAEA,SAASF,EAAgBD,GAA4B;AACnD,SAAI,CAACA,KAAUA,MAAW,MACjB,KAGF,IAAIA,EAAO,QAAQ,YAAY,EAAE,CAAC;AAC3C;AAIA,SAASQ,EAAQD,GAAkD;AACjE,MAAI,OAAOA,KAAS;AAClB,WAAO,IAAI,YAAA,EAAc,OAAOA,CAAI;AAGtC,QAAMmB,IAAO,YAAY,OAAOnB,CAAI,IAChC,IAAI,WAAWA,EAAK,QAAQA,EAAK,YAAYA,EAAK,UAAU,IAC5D,IAAI,WAAWA,CAAI,GACjBoB,IAAQ,IAAI,WAAWD,EAAK,UAAU;AAC5C,SAAAC,EAAM,IAAID,CAAI,GAEPC;AACT;AAEA,SAASlB,EAAWN,GAAkB;AACpC,SAAOA,EAAS,MAAMA,EAAS,YAAY,GAAG,IAAI,CAAC;AACrD;AAEA,SAASS,EAAcT,GAAkB;AACvC,QAAMyB,IAAWnB,EAAWN,CAAQ,GAC9B0B,IAAMD,EAAS,YAAY,GAAG,GAC9BE,IAAYD,MAAQ,KAAK,KAAKD,EAAS,MAAMC,CAAG,EAAE,YAAA;AAExD,SAAOnC,EAAaoC,CAAS,KAAK;AACpC;ACrMO,SAASC,EACdC,GACAnC,IAA4B,IAC5B;AACA,SAAOmC,EAAM,OAAO,SAAS,cACzBC,EAAgCD,GAAOnC,CAAO,IAC9CqC,EAAmBF,GAAOnC,CAAO;AACvC;AAKA,eAAsBoC,EACpBD,GACAnC,IAA4B,IACT;AACnB,MAAIA,EAAQ,QAAQ;AAClB,UAAMA,EAAQ,OAAO;AAGvB,QAAMsC,IAAUC,EAAwBJ,GAAOnC,CAAO,GAChDwC,IAAUC,EAAqBN,GAAOG,CAAO,GAC7CI,IAAc,IAAI,gBAAA;AACxB,MAAIC,IAAY;AAChB,QAAMC,IAAc,MAAM;AACxB,IAAAF,EAAY;AAAA,MACV1C,EAAQ,QAAQ,UACd,IAAI,MAAM,4CAA4C;AAAA,IAAA;AAAA,EAE5D;AAEA,EAAAA,EAAQ,QAAQ,iBAAiB,SAAS4C,GAAa,EAAE,MAAM,IAAM;AAErE,MAAIC;AAEJ,MAAI;AACF,IAAAA,IAAS,MAAMC,EAAuBN,GAAS;AAAA,MAC7C,OAAOxC,EAAQ;AAAA,MACf,QAAQ+C,GAAO;AACb,QAAIJ,KAAa,CAACD,EAAY,OAAO,WACnC1C,EAAQ,gBAAgB+C,CAAK;AAAA,MAEjC;AAAA,MACA,QAAQL,EAAY;AAAA,IAAA,CACrB;AAAA,EACH,SAASK,GAAO;AACd,UAAA/C,EAAQ,QAAQ,oBAAoB,SAAS4C,CAAW,GAClDG;AAAA,EACR;AAIA,EAAAF,EAAO,SAAS,MAAMG,CAAe;AAErC,MAAIC;AAEJ,MAAI;AACF,IAAAA,IAAQ,MAAMC,EAAoBf,GAAO;AAAA,MACvC,GAAGnC;AAAA,MACH,SAASsC,EAAQ,QAAA;AAAA,IAAQ,CAC1B;AAAA,EACH,SAASS,GAAO;AACd,UAAA/C,EAAQ,QAAQ,oBAAoB,SAAS4C,CAAW,GACxDA,EAAA,GACA,MAAMC,EAAO,SAAS,MAAMG,CAAe,GACrCD;AAAA,EACR;AAEA,SAAAT,EAAQ,UAAA,GACRK,IAAY,IAEL,IAAI,SAASQ,EAAkBN,GAAQI,GAAOL,CAAW,GAAG;AAAA,IACjE,SAAS,EAAE,gBAAgB,2BAAA;AAAA,EAA2B,CACvD;AACH;AAEO,SAASO,EACdzC,GACAuC,GACAG,GAC4B;AAC5B,QAAMC,IAAU,IAAI,YAAA,GACdC,IAAS5C,EAAK,UAAA;AAEpB,SAAO,IAAI,eAA2B;AAAA,IACpC,MAAM,OAAO6C,GAAQ;AACnB,MAAAH,EAAA,GACA,MAAME,EAAO,OAAOC,CAAM,EAAE,MAAMP,CAAe;AAAA,IACnD;AAAA,IACA,MAAM,KAAKQ,GAAY;AACrB,UAAIC;AAEJ,UAAI;AACF,QAAAA,IAAQ,MAAMH,EAAO,KAAA;AAAA,MACvB,SAASP,GAAO;AACd,QAAAS,EAAW,MAAMT,CAAK;AACtB;AAAA,MACF;AAEA,UAAIU,EAAM,MAAM;AACd,QAAAD,EAAW,QAAQH,EAAQ,OAAOJ,EAAM,MAAM,CAAC,GAC/CO,EAAW,MAAA;AACX;AAAA,MACF;AAEA,MAAAA,EAAW,QAAQC,EAAM,KAAK;AAAA,IAChC;AAAA,IACA,MAAMD,GAAY;AAChB,MAAAA,EAAW,QAAQH,EAAQ,OAAOJ,EAAM,MAAM,CAAC;AAAA,IACjD;AAAA,EAAA,CACD;AACH;AAIA,SAASD,IAAkB;AAAC;ACxHrB,MAAMU,UAA6B,MAAM;AAAA,EAC9C,YAAYC,GAAiB;AAC3B,UAAMA,CAAO,GACb,KAAK,OAAO;AAAA,EACd;AACF;AAEA,MAAMC,IACJ,sOAEIC,IACJ;AAEK,SAASC,IAA0C;AACxD,QAAMC,IAAS,MAAa;AAC1B,UAAM,IAAIL,EAAqBE,CAAiB;AAAA,EAClD;AAEA,SAAO;AAAA,IACL,qBAAqBG;AAAA,IACrB,QAAQA;AAAA,IACR,KAAKA;AAAA,IACL,gBAAgBA;AAAA,IAChB,gBAAgBA;AAAA,IAChB,qBAAqBA;AAAA,IACrB,KAAKA;AAAA,EAAA;AAET;AAEO,SAASC,IAAkD;AAChE,SAAO;AAAA,IACL,YAAY;AACV,YAAM,IAAIN,EAAqBG,CAAqB;AAAA,IACtD;AAAA,EAAA;AAEJ;ACAO,MAAMI,IAAcC,EAAc;AAAA,EACvC,MAAM;AAAA,EACN,cAAc;AAAA,IACZ,6BAA6B;AAAA,IAC7B,gBAAgB;AAAA,IAChB,WAAW;AAAA,EAAA;AAEf,CAAC,GAEYC,IAAgC,eAyBvCC,IAA4B;AAAA,EAChC,KAAK;AAAA,EACL,aAAa;AAAA,EACb,eAAe;AACjB,GAEMC,IAAc;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAASC,GACdtE,GACgB;AAChB,QAAMuE,IAAaC,EAAkBxE,EAAQ,UAAU,GACjDyE,IAAiBC,EAAsB1E,EAAQ,cAAc;AAEnE,EACEA,EAAQ,mBAAmBmE,KAC3BnE,EAAQ,gBAER2E,EAA0B3E,EAAQ,YAAY;AAGhD,QAAM4E,IAAaC,EAAmB7E,EAAQ,MAAM,GAC9C8E,IAAgBC,EAAqB;AAAA,IACzC,SAASd;AAAA,IACT,YAAAM;AAAA,IACA,SAASvE,EAAQ;AAAA,IACjB,gBAAAyE;AAAA,IACA,YAAYzE,EAAQ,cAAckC;AAAA,IAClC,cAAclC,EAAQ;AAAA,IACtB,QAAQA,EAAQ;AAAA,IAChB,KAAKA,EAAQ;AAAA,EAAA,CACd;AAED,SAAO,eAAiCiB,GAAS;AAC/C,UAAM+D,IAAWhF,EAAQ,WAAWiB,CAAO;AAE3C,WAAI+D,KACFC,EAA6BhE,GAAS,EAAE,UAAA+D,GAAU,GAGtC,MAAMJ,IAAa3D,CAAO,KAExB,MAAM6D,EAAc7D,CAAO;AAAA,EAC7C;AACF;AAEA,SAASuD,EACPU,GAC0B;AAC1B,MAAIA,MAAWf;AACb,WAAO;AAAA,MACL,WAAWC;AAAA,MACX,OAAON,EAAA;AAAA,IAA4B;AAIvC,MAAI,CAACoB,KAAU,OAAOA,EAAO,SAAU;AACrC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAOA;AACT;AAEA,SAASR,EACPQ,GACgB;AAChB,MAAIA,MAAWf;AACb,WAAOH,EAAA;AAGT,MAAI,CAACkB,KAAU,OAAOA,EAAO,aAAc;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,SAAOA;AACT;AAKA,SAASP,EACPQ,GACA;AACA,aAAW,CAACC,GAAMC,CAAW,KAAK,OAAO,QAAQF,CAAO;AAQtD,QAPiBE,EAAY,QAAQ,UAAU,aAC7ChB,EACG,IAAI,CAACiB,MAAWD,EAAYC,CAAM,CAAC,EACnC;AAAA,MAAK,CAACC,MACLA,KAAcA,EAAW,SAAS,UAAUA,EAAW,UAAU;AAAA,IAAA;AAIrE,YAAM,IAAI;AAAA,QACR,uBAAuB,KAAK,UAAUH,CAAI,CAAC;AAAA,MAAA;AAInD;AAEA,SAASP,EACPlD,GACA;AACA,MAAKA;AAIL,WAAO,OAAOA,KAAU,aAAaA,IAAQ5B,EAAuB4B,CAAK;AAC3E;"}
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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"}
package/dist/index.d.ts CHANGED
@@ -1,23 +1,25 @@
1
- export { createFileRouter, hydrateFileRouter, Link } from "./browser";
1
+ export { createFileRouter, createMutationAction, Form, hydrateFileRouter, Link, MutationSubmit, RouteFocusBoundary, useRouteFocusBoundary, useNavigation, useFormNavigation, useMutationAction, } from "./browser";
2
+ export type { FormProps, LinkProps, MutationAction, MutationActionOptions, MutationFormAction, MutationNavigationState, MutationResult, MutationSubmitProps, MutationValidation, } from "./browser";
3
+ export { contentTypeForExtension, DEFAULT_CONTENT_TYPE, isContentHashedFileName, } from "./static-files";
2
4
  export { assertAdapterCapabilities, checkAdapterCapabilities, defineAdapter, } from "./adapter";
3
5
  export { cacheNotFound, CacheNotFoundError, createCache, createInvalidation, createMemoryIdempotencyStore, createMemoryCache, createMemoryCacheStore, defineTags, isCacheNotFoundError, parseCacheDuration, query, runIdempotentMutation, serializeCacheKey, serializeCacheNamespace, serializeCacheTag, tag, } from "./data";
4
- export { createFrameworkScriptUrl, defineLinks, defineMetadata, defineOgImage, defineRobots, defineScripts, defineSitemap, FRAMEWORK_TRUSTED_TYPES_POLICY, getScriptWorker, link, meta, modulePreload, preconnect, preload, resolveLinks, resolveMetadata, resolveScripts, renderOgImageResponse, renderOgImageSvg, renderRobots, renderSitemap, script, Script, startDeferredScripts, structuredData, } from "./document";
5
- export { href } from "./routing";
6
+ export { createFrameworkScriptUrl, applyLocalizedMetadata, defineLinks, defineMetadata, defineOgImage, defineRobots, defineScripts, defineSitemap, FRAMEWORK_TRUSTED_TYPES_POLICY, getScriptWorker, link, meta, modulePreload, preconnect, preload, resolveLinks, resolveMetadata, resolveScripts, renderOgImageResponse, renderOgImageSvg, renderRobots, renderSitemap, script, Script, startDeferredScripts, structuredData, } from "./document";
7
+ export { applicationPathname, defineLocales, href, localeDirection, localizeHref, resolveLocale } from "./routing";
6
8
  export { analytics, COLLECTED_WEB_VITAL_NAMES, collectWebVitals, defaultFontPath, defineFonts, defineInstrumentation, defineImages, defineWebVitals, font, fontAssetFileName, fontAssetUrl, fontLinks, fontMediaType, fontPreloadLinks, fontSources, fontStylesheetUrl, Image, isAllowedImageSource, parseImageOptimizerRequest, parseWebVitalsBeacon, planImageTransform, readWebVitalsBeacon, renderFontFaceCss, sendWebVitalsBeacon, WEB_VITAL_NAMES, WEB_VITAL_THRESHOLDS, WebVitals, webVitalRating, webVitalsPolicy, } from "./platform";
7
- export { auditScriptDependencies, createCorsHeaders, createCsrfCookie, createCsrfToken, createMemoryRateLimitStore, createSecureCookie, createSecurityAudit, createSecurityHeaders, createSecurityReportHandler, cspNonce, cspHash, EnvValidationError, applyFetchMetadataVary, checkFetchMetadata, checkWebSocketOrigin, defineRoutePolicy, defineEnvSchema, defineSecurityPolicy, env, enforceCsrfProtection, enforceAllowedMethods, enforceFetchMetadataPolicy, enforceRateLimit, enforceRequestSecurity, enforceWebSocketOrigin, issueCsrfToken, mergeRoutePolicies, mergeRouteSecurityPolicies, mergeSecurityPolicies, parseCookieHeader, parseBodySize, parseRateLimitWindow, readSecureCookie, secureCookieName, security, validateEnv, validateCorsPolicy, validateRateLimitPolicy, validateSecureCookie, validateRouteModules, validateUploads, } from "./security";
8
- export { createRequestHandler, handleRequestWithManifest, renderPageResponse, } from "./server";
9
- export { action, actionInput, defineMiddleware, html, httpError, HttpError, HTTP_ERROR_STATUSES, isHttpError, json, jsonl, notFound, page, redirect, response, serverTiming, sse, stream, text, toResponse, webhook, } from "./route";
9
+ export { auditScriptDependencies, createCorsHeaders, createCsrfCookie, createCsrfToken, createEncryptedCookieSession, createMemoryRateLimitStore, createMemorySessionStore, createSecureCookie, createSignedCookieSession, createSecurityAudit, createSecurityHeaders, createSecurityReportHandler, createSessionManager, cspNonce, cspHash, EnvValidationError, applyFetchMetadataVary, attachExceptionSource, authorizeRoute, checkFetchMetadata, checkWebSocketOrigin, DEFAULT_MAX_BODY_SIZE, defineAuthorization, defineRoutePolicy, defineEnvSchema, defineSecurityPolicy, deserializeEnvSchema, env, enforceCsrfProtection, enforceAllowedMethods, enforceFetchMetadataPolicy, enforceRateLimit, enforceRequestSecurity, enforceWebSocketOrigin, issueCsrfToken, mergeRouteAccess, mergeRoutePolicies, mergeRouteSecurityPolicies, mergeSecurityPolicies, parseCookieHeader, parseBodySize, permitsRequest, getBodySizeException, getCspException, getCsrfException, isSecurityException, resolveCsp, resolveCsrf, resolveMaxBodySize, resolveRouteAccess, parseRateLimitWindow, readEnv, readSecureCookie, secureCookieName, serializeEnvSchema, serializeSessionNamespace, security, SessionStoreConflictError, SessionStoreUnavailableError, unstable_resetEnvironment, unstable_startEnvironment, validateEnv, validateCorsPolicy, validateRateLimitPolicy, validateSecureCookie, validateRouteModules, validateUploads, } from "./security";
10
+ export { createRequestHandler, getRequestClientAddress, handleRequestWithManifest, renderPageResponse, } from "./server";
11
+ export { mutation, mutationInput, MUTATION_REQUEST_HEADER, MUTATION_REQUEST_VALUE, MUTATION_RESPONSE_MEDIA_TYPE, defineMiddleware, MutationValidationError, html, httpError, HttpError, HTTP_ERROR_STATUSES, isHttpError, json, jsonl, notFound, page, redirect, response, RouteSerializationError, serverTiming, sse, stream, text, toResponse, webhook, } from "./route";
10
12
  export type { Adapter, AdapterCapability, AdapterCapabilityCheck, AdapterCapabilityMap, AdapterDefinition, } from "./adapter";
11
- export type { ActionContext, ActionIdempotency, ActionInput, ActionOptions, HttpErrorDetails, HttpErrorInit, HttpErrorStatus, } from "./route";
13
+ export type { MutationContext, MutationCapability, MutationIdempotency, MutationInput, MutationMethod, MutationMethodsOf, MutationOptions, MutationRevalidation, MutationRevalidationDeclaration, MutationValidationIssue, HttpErrorDetails, HttpErrorInit, HttpErrorStatus, } from "./route";
12
14
  export type { RequestCacheStoreOptions } from "./server";
13
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";
14
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";
15
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";
16
18
  export type { InitialRouteData } from "./router";
17
- export type { AppHref, AppPath, LinkTarget, LinkTo, PathValue, PathVarsFor, RouteParamsFor, RouteConcretePaths, RoutePathVars, RouteRequestContexts, } from "./routing";
18
- export type { HydrateFileRouterOptions } from "./browser";
19
+ export type { AppLocale, AppHref, AppPath, LinkTarget, LinkTo, MutationDataFor, MutationFieldsFor, MutationMethodFor, MutationRoute, PathValue, PathVarsFor, RouteParamsFor, RouteConcretePaths, RoutePathVars, RouteRequestContexts, RouteMutationMethods, LocaleConfiguration, LocaleResolution, LocaleResolver, LocaleResolverInput, LocaleSource, RouteLocales, } from "./routing";
20
+ export type { FileRouterOptions, HydrateFileRouterOptions, NavigationAccessibility, NavigationCommit, NavigationScrollContext, NavigationScrollOption, RouteFocusBoundaryElement, RouteFocusBoundaryProps, } from "./browser";
19
21
  export type { SsrOptions, SsrRenderOptions } from "./server";
20
22
  export type { HtmlCapability, HttpMethod, HttpRouteContext, JsonCapability, JsonLinesCapability, JsonLinesSource, LayoutProps, MaybePromise, NotFoundCapability, NotFoundProps, PageDataContext, PageDataFunction, PageCapability, PageOptions, PageRenderMode, PageRenderOptions, PathVars, RawResponseCapability, RedirectCapability, ResponseOptions, ResponseCapability, RouteCapability, RouteContext, RouteErrorProps, RouteImporter, RouteDefaultComponent, RouteMiddleware, RouteMiddlewareNext, MiddlewareContextContribution, MiddlewareContextOf, RouteRequestContextFor, RequestContext, RouteModule, RouteProps, RouteValue, ServerSentEvent, ServerSentEventSource, ServerSentEventsCapability, ServerTimingInput, ServerTimingMetric, StaticPath, StaticPathsContext, StaticPathsFunction, StreamCapability, StreamChunk, StreamSource, TextCapability, WebhookHmacAlgorithm, WebhookHmacContext, WebhookHmacEncoding, WebhookHmacOptions, } from "./route";
21
- export type { ContentSecurityPolicy, CookieIssue, CookieIssueCode, CookieSameSite, CookieScope, CorsPolicy, CorsRequestContext, CorsResponseOptions, CsrfCookieOptions, CsrfPolicy, CspHashAlgorithm, CspDirectiveValue, CspDirectiveReplacement, CspSource, CspSourceDirective, EnvSchema, EnvSource, EnvValidationIssue, EnvVariable, FetchMetadataCheck, FetchMetadataDestination, FetchMetadataEnforcement, FetchMetadataPolicy, FetchMetadataPolicyOptions, FetchMetadataReason, InferEnvSchema, IssuedCsrfToken, MemoryRateLimitStoreOptions, RateLimitKey, RateLimitPolicy, RateLimitResult, RateLimitStore, ReferrerPolicy, ReportingEndpointUrl, ReportingEndpoints, SecurityAudit, SecurityAuditFinding, SecurityAuditOptions, ScriptDependencyAuditOptions, SecurityReportContext, SecurityReportHandlerOptions, SecurityReportPayload, RequestSecurityPolicy, RoutePolicy, RouteModuleVerificationOptions, RouteSecurityNeeds, RouteSecurityPolicy, SecureCookieDeclaration, SecureCookieDefinition, SecurityHeadersOptions, SecurityHeaderPolicy, SecurityPolicy, SecurityPreset, StrictTransportSecurityPolicy, TrustedTypesPolicy, UploadFilePolicy, UploadPolicy, UploadValidationIssue, UploadValidationResult, WebSocketOriginCheck, WebSocketOriginPolicy, } from "./security";
23
+ export type { ContentSecurityPolicy, CookieSession, CookieSessionCreateOptions, CookieSessionManager, CookieSessionOptions, CookieIssue, CookieIssueCode, CookieSameSite, CookieScope, BodySizeException, BodySizeValue, CorsPolicy, CspException, CorsRequestContext, CorsResponseOptions, CsrfCookieOptions, CsrfPolicy, CsrfPolicyOptions, CsrfException, CspHashAlgorithm, CspDirectiveValue, CspDirectiveReplacement, CspSource, CspSourceDirective, EnvSchema, EnvSchemaDescriptor, EnvSource, EnvStartupOptions, EnvStartupResult, EnvValidationIssue, EnvVariable, EnvVariableDescriptor, EnvVariableKind, FetchMetadataCheck, FetchMetadataDestination, FetchMetadataEnforcement, FetchMetadataPolicy, FetchMetadataPolicyOptions, FetchMetadataReason, InferEnvSchema, IssuedCsrfToken, MemoryRateLimitStoreOptions, MemorySessionStoreOptions, RateLimitKey, RateLimitPolicy, RateLimitResult, RateLimitStore, ReferrerPolicy, ReportingEndpointUrl, ReportingEndpoints, SecurityAudit, SecurityAuditFinding, SecurityAuditOptions, ScriptDependencyAuditOptions, SecurityReportContext, SecurityReportHandlerOptions, SecurityReportPayload, AuthorizationDecision, AuthorizationDenial, AuthorizationDenialStatus, MergedRoutePolicy, RequestSecurityPolicy, ResolvedRouteAccess, RouteAccessException, RouteAccessPolicy, RouteAccessSource, RouteAuthorizationEntry, RouteAuthorizationHook, RoutePolicy, RouteModuleVerificationOptions, RouteSecurityNeeds, RouteSecurityPolicy, SecureCookieDeclaration, SecureCookieDefinition, SessionData, SessionCookieDefinition, SessionCookieKey, ServerSession, SessionManager, SessionManagerOptions, SessionNamespace, SessionPrimitive, SessionRecord, SessionStore, SessionStoreCandidate, SessionStoreWriteResult, SecurityException, SecurityExceptionOrigin, SecurityFindingCode, SecurityHeadersOptions, SecurityHeaderPolicy, SecurityPolicy, SecurityPreset, StaticPolicyFindingCode, StrictTransportSecurityPolicy, TrustedTypesPolicy, UploadFilePolicy, UploadPolicy, UploadValidationIssue, UploadValidationResult, WebSocketOriginCheck, WebSocketOriginPolicy, } from "./security";
22
24
  export type { PageRenderer, RequestHandler, RequestHandlerOptions, } from "./server";
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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"}