react-router 7.18.0 → 8.0.0-pre.1

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 (285) hide show
  1. package/dist/development/dom-export.d.ts +6 -172
  2. package/dist/development/dom-export.js +12 -1009
  3. package/dist/development/index-react-server-client.d.ts +7 -4
  4. package/dist/development/index-react-server-client.js +8 -52
  5. package/dist/development/index-react-server.d.ts +1650 -1641
  6. package/dist/development/index-react-server.js +2882 -3664
  7. package/dist/development/index.d.ts +42 -1476
  8. package/dist/development/index.js +36 -2553
  9. package/dist/development/lib/actions.js +50 -0
  10. package/dist/development/lib/components.d.ts +1030 -0
  11. package/dist/development/lib/components.js +841 -0
  12. package/dist/development/lib/context.d.ts +83 -0
  13. package/dist/development/lib/context.js +41 -0
  14. package/dist/development/lib/dom/dom.d.ts +119 -0
  15. package/dist/development/lib/dom/dom.js +143 -0
  16. package/dist/development/lib/dom/lib.d.ts +2053 -0
  17. package/dist/development/lib/dom/lib.js +1271 -0
  18. package/dist/development/lib/dom/server.d.ts +138 -0
  19. package/dist/development/lib/dom/server.js +301 -0
  20. package/dist/development/lib/dom/ssr/components.d.ts +198 -0
  21. package/dist/development/lib/dom/ssr/components.js +589 -0
  22. package/dist/development/lib/dom/ssr/data.js +29 -0
  23. package/dist/development/lib/dom/ssr/entry.d.ts +60 -0
  24. package/dist/development/lib/dom/ssr/errorBoundaries.d.ts +27 -0
  25. package/dist/development/lib/dom/ssr/errorBoundaries.js +87 -0
  26. package/dist/development/lib/dom/ssr/fallback.js +33 -0
  27. package/dist/development/lib/dom/ssr/fog-of-war.d.ts +12 -0
  28. package/dist/development/lib/dom/ssr/fog-of-war.js +180 -0
  29. package/dist/development/lib/dom/ssr/hydration.d.ts +32 -0
  30. package/dist/development/lib/dom/ssr/hydration.js +29 -0
  31. package/dist/development/lib/dom/ssr/invariant.js +16 -0
  32. package/dist/development/lib/dom/ssr/links.js +170 -0
  33. package/dist/development/lib/dom/ssr/markup.js +24 -0
  34. package/dist/development/lib/dom/ssr/routeModules.d.ts +206 -0
  35. package/dist/development/lib/dom/ssr/routeModules.js +31 -0
  36. package/dist/development/lib/dom/ssr/routes-test-stub.d.ts +62 -0
  37. package/dist/development/lib/dom/ssr/routes-test-stub.js +108 -0
  38. package/dist/development/lib/dom/ssr/routes.d.ts +33 -0
  39. package/dist/development/lib/dom/ssr/routes.js +303 -0
  40. package/dist/development/lib/dom/ssr/server.d.ts +48 -0
  41. package/dist/development/lib/dom/ssr/server.js +69 -0
  42. package/dist/development/lib/dom/ssr/single-fetch.d.ts +14 -0
  43. package/dist/development/lib/dom/ssr/single-fetch.js +345 -0
  44. package/dist/development/lib/dom-export/dom-router-provider.d.ts +9 -0
  45. package/dist/development/lib/dom-export/dom-router-provider.js +22 -0
  46. package/dist/development/lib/dom-export/hydrated-router.d.ts +125 -0
  47. package/dist/development/lib/dom-export/hydrated-router.js +150 -0
  48. package/dist/development/lib/errors.js +29 -0
  49. package/dist/development/lib/hooks.d.ts +947 -0
  50. package/dist/development/lib/hooks.js +1388 -0
  51. package/dist/development/lib/href.d.ts +20 -0
  52. package/dist/development/lib/href.js +50 -0
  53. package/dist/development/lib/router/history.d.ts +258 -0
  54. package/dist/development/lib/router/history.js +372 -0
  55. package/dist/development/lib/router/instrumentation.d.ts +86 -0
  56. package/dist/development/lib/router/instrumentation.js +213 -0
  57. package/dist/development/lib/router/links.d.ts +114 -0
  58. package/dist/development/lib/router/router.d.ts +663 -0
  59. package/dist/development/lib/router/router.js +2988 -0
  60. package/dist/development/lib/router/url.js +18 -0
  61. package/dist/development/lib/router/utils.d.ts +948 -0
  62. package/dist/development/lib/router/utils.js +810 -0
  63. package/dist/development/lib/rsc/browser.d.ts +137 -0
  64. package/dist/development/lib/rsc/browser.js +603 -0
  65. package/dist/development/lib/rsc/errorBoundaries.d.ts +11 -0
  66. package/dist/development/lib/rsc/errorBoundaries.js +90 -0
  67. package/dist/development/lib/rsc/html-stream/browser.d.ts +48 -0
  68. package/dist/development/lib/rsc/html-stream/browser.js +74 -0
  69. package/dist/development/lib/rsc/html-stream/server.js +78 -0
  70. package/dist/development/lib/rsc/route-modules.js +27 -0
  71. package/dist/development/lib/rsc/server.rsc.d.ts +219 -0
  72. package/dist/development/lib/rsc/server.ssr.d.ts +129 -0
  73. package/dist/development/lib/rsc/server.ssr.js +404 -0
  74. package/dist/development/lib/server-runtime/build.d.ts +66 -0
  75. package/dist/development/lib/server-runtime/cookies.d.ts +66 -0
  76. package/dist/development/lib/server-runtime/cookies.js +139 -0
  77. package/dist/development/lib/server-runtime/crypto.js +43 -0
  78. package/dist/development/lib/server-runtime/data.d.ts +13 -0
  79. package/dist/development/lib/server-runtime/data.js +25 -0
  80. package/dist/development/lib/server-runtime/dev.d.ts +9 -0
  81. package/dist/development/lib/server-runtime/dev.js +26 -0
  82. package/dist/development/lib/server-runtime/entry.js +20 -0
  83. package/dist/development/lib/server-runtime/errors.js +75 -0
  84. package/dist/development/lib/server-runtime/headers.js +73 -0
  85. package/dist/development/lib/server-runtime/invariant.js +19 -0
  86. package/dist/development/lib/server-runtime/mode.d.ts +12 -0
  87. package/dist/development/lib/server-runtime/mode.js +25 -0
  88. package/dist/development/lib/server-runtime/routeMatching.js +28 -0
  89. package/dist/development/lib/server-runtime/routes.d.ts +13 -0
  90. package/dist/development/lib/server-runtime/routes.js +74 -0
  91. package/dist/development/lib/server-runtime/server.d.ts +10 -0
  92. package/dist/development/lib/server-runtime/server.js +345 -0
  93. package/dist/development/lib/server-runtime/serverHandoff.js +17 -0
  94. package/dist/development/lib/server-runtime/sessions/cookieStorage.d.ts +25 -0
  95. package/dist/development/lib/server-runtime/sessions/cookieStorage.js +45 -0
  96. package/dist/development/lib/server-runtime/sessions/memoryStorage.d.ts +23 -0
  97. package/dist/development/lib/server-runtime/sessions/memoryStorage.js +52 -0
  98. package/dist/development/lib/server-runtime/sessions.d.ts +145 -0
  99. package/dist/development/lib/server-runtime/sessions.js +98 -0
  100. package/dist/development/lib/server-runtime/single-fetch.d.ts +7 -0
  101. package/dist/development/lib/server-runtime/single-fetch.js +215 -0
  102. package/dist/development/lib/server-runtime/urls.js +28 -0
  103. package/dist/development/lib/server-runtime/warnings.js +20 -0
  104. package/dist/development/lib/types/future.d.ts +9 -0
  105. package/dist/development/lib/types/internal.d.ts +26 -177
  106. package/dist/development/lib/types/internal.js +3 -2
  107. package/dist/development/{register-roq_0qYo.d.ts → lib/types/register.d.ts} +9 -15
  108. package/dist/development/lib/types/route-data.d.ts +113 -0
  109. package/dist/development/lib/types/route-module-annotations.d.ts +149 -0
  110. package/dist/development/lib/types/route-module.d.ts +19 -0
  111. package/dist/development/lib/types/serializes-to.d.ts +13 -0
  112. package/dist/development/lib/types/utils.d.ts +11 -0
  113. package/dist/development/vendor/turbo-stream-v2/flatten.js +159 -0
  114. package/dist/development/vendor/turbo-stream-v2/turbo-stream.js +179 -0
  115. package/dist/development/vendor/turbo-stream-v2/unflatten.js +199 -0
  116. package/dist/development/vendor/turbo-stream-v2/utils.js +39 -0
  117. package/dist/production/dom-export.d.ts +6 -172
  118. package/dist/production/dom-export.js +12 -1009
  119. package/dist/production/index-react-server-client.d.ts +7 -4
  120. package/dist/production/index-react-server-client.js +8 -52
  121. package/dist/production/index-react-server.d.ts +1650 -1641
  122. package/dist/production/index-react-server.js +2873 -3664
  123. package/dist/production/index.d.ts +42 -1476
  124. package/dist/production/index.js +36 -2553
  125. package/dist/production/lib/actions.js +50 -0
  126. package/dist/production/lib/components.d.ts +1030 -0
  127. package/dist/production/lib/components.js +841 -0
  128. package/dist/production/lib/context.d.ts +83 -0
  129. package/dist/production/lib/context.js +41 -0
  130. package/dist/production/lib/dom/dom.d.ts +119 -0
  131. package/dist/production/lib/dom/dom.js +143 -0
  132. package/dist/production/lib/dom/lib.d.ts +2053 -0
  133. package/dist/production/lib/dom/lib.js +1271 -0
  134. package/dist/production/lib/dom/server.d.ts +138 -0
  135. package/dist/production/lib/dom/server.js +301 -0
  136. package/dist/production/lib/dom/ssr/components.d.ts +198 -0
  137. package/dist/production/lib/dom/ssr/components.js +589 -0
  138. package/dist/production/lib/dom/ssr/data.js +29 -0
  139. package/dist/production/lib/dom/ssr/entry.d.ts +60 -0
  140. package/dist/production/lib/dom/ssr/errorBoundaries.d.ts +27 -0
  141. package/dist/production/lib/dom/ssr/errorBoundaries.js +87 -0
  142. package/dist/production/lib/dom/ssr/fallback.js +23 -0
  143. package/dist/production/lib/dom/ssr/fog-of-war.d.ts +12 -0
  144. package/dist/production/lib/dom/ssr/fog-of-war.js +180 -0
  145. package/dist/production/lib/dom/ssr/hydration.d.ts +32 -0
  146. package/dist/production/lib/dom/ssr/hydration.js +29 -0
  147. package/dist/production/lib/dom/ssr/invariant.js +16 -0
  148. package/dist/production/lib/dom/ssr/links.js +170 -0
  149. package/dist/production/lib/dom/ssr/markup.js +24 -0
  150. package/dist/production/lib/dom/ssr/routeModules.d.ts +206 -0
  151. package/dist/production/lib/dom/ssr/routeModules.js +31 -0
  152. package/dist/production/lib/dom/ssr/routes-test-stub.d.ts +62 -0
  153. package/dist/production/lib/dom/ssr/routes-test-stub.js +108 -0
  154. package/dist/production/lib/dom/ssr/routes.d.ts +33 -0
  155. package/dist/production/lib/dom/ssr/routes.js +303 -0
  156. package/dist/production/lib/dom/ssr/server.d.ts +48 -0
  157. package/dist/production/lib/dom/ssr/server.js +69 -0
  158. package/dist/production/lib/dom/ssr/single-fetch.d.ts +14 -0
  159. package/dist/production/lib/dom/ssr/single-fetch.js +345 -0
  160. package/dist/production/lib/dom-export/dom-router-provider.d.ts +9 -0
  161. package/dist/production/lib/dom-export/dom-router-provider.js +22 -0
  162. package/dist/production/lib/dom-export/hydrated-router.d.ts +125 -0
  163. package/dist/production/lib/dom-export/hydrated-router.js +150 -0
  164. package/dist/production/lib/errors.js +29 -0
  165. package/dist/production/lib/hooks.d.ts +947 -0
  166. package/dist/production/lib/hooks.js +1373 -0
  167. package/dist/production/lib/href.d.ts +20 -0
  168. package/dist/production/lib/href.js +50 -0
  169. package/dist/production/lib/router/history.d.ts +258 -0
  170. package/dist/production/lib/router/history.js +372 -0
  171. package/dist/production/lib/router/instrumentation.d.ts +86 -0
  172. package/dist/production/lib/router/instrumentation.js +213 -0
  173. package/dist/production/lib/router/links.d.ts +114 -0
  174. package/dist/production/lib/router/router.d.ts +663 -0
  175. package/dist/production/lib/router/router.js +2988 -0
  176. package/dist/production/lib/router/url.js +18 -0
  177. package/dist/production/lib/router/utils.d.ts +948 -0
  178. package/dist/production/lib/router/utils.js +801 -0
  179. package/dist/production/lib/rsc/browser.d.ts +137 -0
  180. package/dist/production/lib/rsc/browser.js +603 -0
  181. package/dist/production/lib/rsc/errorBoundaries.d.ts +11 -0
  182. package/dist/production/lib/rsc/errorBoundaries.js +90 -0
  183. package/dist/production/lib/rsc/html-stream/browser.d.ts +48 -0
  184. package/dist/production/lib/rsc/html-stream/browser.js +74 -0
  185. package/dist/production/lib/rsc/html-stream/server.js +78 -0
  186. package/dist/production/lib/rsc/route-modules.js +27 -0
  187. package/dist/production/lib/rsc/server.rsc.d.ts +219 -0
  188. package/dist/production/lib/rsc/server.ssr.d.ts +129 -0
  189. package/dist/production/lib/rsc/server.ssr.js +404 -0
  190. package/dist/production/lib/server-runtime/build.d.ts +66 -0
  191. package/dist/production/lib/server-runtime/cookies.d.ts +66 -0
  192. package/dist/production/lib/server-runtime/cookies.js +139 -0
  193. package/dist/production/lib/server-runtime/crypto.js +43 -0
  194. package/dist/production/lib/server-runtime/data.d.ts +13 -0
  195. package/dist/production/lib/server-runtime/data.js +25 -0
  196. package/dist/production/lib/server-runtime/dev.d.ts +9 -0
  197. package/dist/production/lib/server-runtime/dev.js +26 -0
  198. package/dist/production/lib/server-runtime/entry.js +20 -0
  199. package/dist/production/lib/server-runtime/errors.js +75 -0
  200. package/dist/production/lib/server-runtime/headers.js +73 -0
  201. package/dist/production/lib/server-runtime/invariant.js +19 -0
  202. package/dist/production/lib/server-runtime/mode.d.ts +12 -0
  203. package/dist/production/lib/server-runtime/mode.js +25 -0
  204. package/dist/production/lib/server-runtime/routeMatching.js +28 -0
  205. package/dist/production/lib/server-runtime/routes.d.ts +13 -0
  206. package/dist/production/lib/server-runtime/routes.js +74 -0
  207. package/dist/production/lib/server-runtime/server.d.ts +10 -0
  208. package/dist/production/lib/server-runtime/server.js +345 -0
  209. package/dist/production/lib/server-runtime/serverHandoff.js +17 -0
  210. package/dist/production/lib/server-runtime/sessions/cookieStorage.d.ts +25 -0
  211. package/dist/production/lib/server-runtime/sessions/cookieStorage.js +45 -0
  212. package/dist/production/lib/server-runtime/sessions/memoryStorage.d.ts +23 -0
  213. package/dist/production/lib/server-runtime/sessions/memoryStorage.js +52 -0
  214. package/dist/production/lib/server-runtime/sessions.d.ts +145 -0
  215. package/dist/production/lib/server-runtime/sessions.js +98 -0
  216. package/dist/production/lib/server-runtime/single-fetch.d.ts +7 -0
  217. package/dist/production/lib/server-runtime/single-fetch.js +215 -0
  218. package/dist/production/lib/server-runtime/urls.js +28 -0
  219. package/dist/production/lib/server-runtime/warnings.js +20 -0
  220. package/dist/production/lib/types/future.d.ts +9 -0
  221. package/dist/production/lib/types/internal.d.ts +26 -177
  222. package/dist/production/lib/types/internal.js +3 -2
  223. package/dist/production/{register-roq_0qYo.d.ts → lib/types/register.d.ts} +9 -15
  224. package/dist/production/lib/types/route-data.d.ts +113 -0
  225. package/dist/production/lib/types/route-module-annotations.d.ts +149 -0
  226. package/dist/production/lib/types/route-module.d.ts +19 -0
  227. package/dist/production/lib/types/serializes-to.d.ts +13 -0
  228. package/dist/production/lib/types/utils.d.ts +11 -0
  229. package/dist/production/vendor/turbo-stream-v2/flatten.js +159 -0
  230. package/dist/production/vendor/turbo-stream-v2/turbo-stream.js +179 -0
  231. package/dist/production/vendor/turbo-stream-v2/unflatten.js +199 -0
  232. package/dist/production/vendor/turbo-stream-v2/utils.js +39 -0
  233. package/docs/explanation/code-splitting.md +16 -0
  234. package/docs/how-to/middleware.md +6 -41
  235. package/docs/how-to/react-server-components.md +1 -1
  236. package/docs/upgrading/future.md +0 -249
  237. package/package.json +43 -87
  238. package/dist/development/browser-B2PdsXXH.d.ts +0 -318
  239. package/dist/development/browser-DBmQ1yAR.d.mts +0 -318
  240. package/dist/development/chunk-4ZMWKKQ3.mjs +0 -11606
  241. package/dist/development/chunk-E4MTK73K.mjs +0 -2517
  242. package/dist/development/chunk-U7ORXROY.js +0 -10307
  243. package/dist/development/chunk-WW7PN6QI.js +0 -188
  244. package/dist/development/chunk-YL5M26XI.js +0 -1366
  245. package/dist/development/context-CeD5LmaF.d.mts +0 -1779
  246. package/dist/development/data-CjO11-hU.d.ts +0 -1740
  247. package/dist/development/data-DEjBmEfD.d.mts +0 -1740
  248. package/dist/development/dom-export.d.mts +0 -172
  249. package/dist/development/dom-export.mjs +0 -1010
  250. package/dist/development/index-react-server-client-3ykjivgQ.d.ts +0 -3677
  251. package/dist/development/index-react-server-client-CACgcj2J.d.mts +0 -2614
  252. package/dist/development/index-react-server-client.d.mts +0 -4
  253. package/dist/development/index-react-server-client.mjs +0 -59
  254. package/dist/development/index-react-server.d.mts +0 -2711
  255. package/dist/development/index-react-server.mjs +0 -3803
  256. package/dist/development/index.d.mts +0 -1479
  257. package/dist/development/index.mjs +0 -275
  258. package/dist/development/instrumentation-Dkmpzd13.d.ts +0 -715
  259. package/dist/development/lib/types/internal.d.mts +0 -184
  260. package/dist/development/lib/types/internal.mjs +0 -10
  261. package/dist/development/register-CmkRspdl.d.mts +0 -30
  262. package/dist/production/browser-B2PdsXXH.d.ts +0 -318
  263. package/dist/production/browser-DBmQ1yAR.d.mts +0 -318
  264. package/dist/production/chunk-3Z6WS2WZ.js +0 -188
  265. package/dist/production/chunk-BIP66BKV.js +0 -1366
  266. package/dist/production/chunk-EGOTSXNH.mjs +0 -2517
  267. package/dist/production/chunk-IUPBOWYO.js +0 -10307
  268. package/dist/production/chunk-M7NGGUU6.mjs +0 -11606
  269. package/dist/production/context-CeD5LmaF.d.mts +0 -1779
  270. package/dist/production/data-CjO11-hU.d.ts +0 -1740
  271. package/dist/production/data-DEjBmEfD.d.mts +0 -1740
  272. package/dist/production/dom-export.d.mts +0 -172
  273. package/dist/production/dom-export.mjs +0 -1010
  274. package/dist/production/index-react-server-client-3ykjivgQ.d.ts +0 -3677
  275. package/dist/production/index-react-server-client-CACgcj2J.d.mts +0 -2614
  276. package/dist/production/index-react-server-client.d.mts +0 -4
  277. package/dist/production/index-react-server-client.mjs +0 -59
  278. package/dist/production/index-react-server.d.mts +0 -2711
  279. package/dist/production/index-react-server.mjs +0 -3803
  280. package/dist/production/index.d.mts +0 -1479
  281. package/dist/production/index.mjs +0 -275
  282. package/dist/production/instrumentation-Dkmpzd13.d.ts +0 -715
  283. package/dist/production/lib/types/internal.d.mts +0 -184
  284. package/dist/production/lib/types/internal.mjs +0 -10
  285. package/dist/production/register-CmkRspdl.d.mts +0 -30
@@ -0,0 +1,404 @@
1
+ /**
2
+ * react-router v8.0.0-pre.1
3
+ *
4
+ * Copyright (c) Remix Software Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ import { isRouteErrorResponse } from "../router/utils.js";
12
+ import { hasInvalidProtocol } from "../router/router.js";
13
+ import { RSCRouterContext } from "../context.js";
14
+ import { decodeRedirectErrorDigest, decodeRouteErrorResponseDigest } from "../errors.js";
15
+ import { escapeHtml } from "../dom/ssr/markup.js";
16
+ import { shouldHydrateRouteLoader } from "../dom/ssr/routes.js";
17
+ import { FrameworkContext } from "../dom/ssr/components.js";
18
+ import { StaticRouterProvider, createStaticRouter } from "../dom/server.js";
19
+ import { injectRSCPayload } from "./html-stream/server.js";
20
+ import { RSCRouterGlobalErrorBoundary } from "./errorBoundaries.js";
21
+ import { createRSCRouteModules } from "./route-modules.js";
22
+ import * as React$1 from "react";
23
+ //#region lib/rsc/server.ssr.tsx
24
+ const defaultManifestPath = "/__manifest";
25
+ /**
26
+ * Routes the incoming [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
27
+ * to the [RSC](https://react.dev/reference/rsc/server-components) server and
28
+ * appropriately proxies the server response for data / resource requests, or
29
+ * renders to HTML for a document request.
30
+ *
31
+ * @example
32
+ * import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
33
+ * import * as ReactDomServer from "react-dom/server.edge";
34
+ * import {
35
+ * unstable_RSCStaticRouter as RSCStaticRouter,
36
+ * unstable_routeRSCServerRequest as routeRSCServerRequest,
37
+ * } from "react-router";
38
+ *
39
+ * routeRSCServerRequest({
40
+ * request,
41
+ * serverResponse,
42
+ * createFromReadableStream,
43
+ * async renderHTML(getPayload) {
44
+ * const payload = getPayload();
45
+ *
46
+ * return await renderHTMLToReadableStream(
47
+ * <RSCStaticRouter getPayload={getPayload} />,
48
+ * {
49
+ * bootstrapScriptContent,
50
+ * formState: await payload.formState,
51
+ * }
52
+ * );
53
+ * },
54
+ * });
55
+ *
56
+ * @name unstable_routeRSCServerRequest
57
+ * @public
58
+ * @category RSC
59
+ * @mode data
60
+ * @param opts Options
61
+ * @param opts.createFromReadableStream Your `react-server-dom-xyz/client`'s
62
+ * `createFromReadableStream` function, used to decode payloads from the server.
63
+ * @param opts.serverResponse A Response or partial response generated by the [RSC](https://react.dev/reference/rsc/server-components) handler containing a serialized {@link unstable_RSCPayload}.
64
+ * @param opts.hydrate Whether to hydrate the server response with the RSC payload.
65
+ * Defaults to `true`.
66
+ * @param opts.renderHTML A function that renders the {@link unstable_RSCPayload} to
67
+ * HTML, usually using a {@link unstable_RSCStaticRouter | `<RSCStaticRouter>`}.
68
+ * @param opts.request The request to route.
69
+ * @returns A [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)
70
+ * that either contains the [RSC](https://react.dev/reference/rsc/server-components)
71
+ * payload for data requests, or renders the HTML for document requests.
72
+ */
73
+ async function routeRSCServerRequest({ request, serverResponse, createFromReadableStream, renderHTML, hydrate = true }) {
74
+ const url = new URL(request.url);
75
+ if (isReactServerRequest(url) || isManifestRequest(url) || request.headers.has("rsc-action-id") || serverResponse.headers.get("React-Router-Resource") === "true") return serverResponse;
76
+ if (!serverResponse.body) throw new Error("Missing body in server response");
77
+ const detectRedirectResponse = serverResponse.clone();
78
+ let serverResponseB = null;
79
+ if (hydrate) serverResponseB = serverResponse.clone();
80
+ const body = serverResponse.body;
81
+ let buffer;
82
+ let streamControllers = [];
83
+ const createStream = () => {
84
+ if (!buffer) {
85
+ buffer = [];
86
+ return body.pipeThrough(new TransformStream({
87
+ transform(chunk, controller) {
88
+ buffer.push(chunk);
89
+ controller.enqueue(chunk);
90
+ streamControllers.forEach((c) => c.enqueue(chunk));
91
+ },
92
+ flush() {
93
+ streamControllers.forEach((c) => c.close());
94
+ streamControllers = [];
95
+ }
96
+ }));
97
+ }
98
+ return new ReadableStream({ start(controller) {
99
+ buffer.forEach((chunk) => controller.enqueue(chunk));
100
+ streamControllers.push(controller);
101
+ } });
102
+ };
103
+ let deepestRenderedBoundaryId = null;
104
+ const getPayload = () => {
105
+ const payloadPromise = Promise.resolve(createFromReadableStream(createStream()));
106
+ return Object.defineProperties(payloadPromise, {
107
+ _deepestRenderedBoundaryId: {
108
+ get() {
109
+ return deepestRenderedBoundaryId;
110
+ },
111
+ set(boundaryId) {
112
+ deepestRenderedBoundaryId = boundaryId;
113
+ }
114
+ },
115
+ formState: { get() {
116
+ return payloadPromise.then((payload) => payload.type === "render" ? payload.formState : void 0);
117
+ } }
118
+ });
119
+ };
120
+ let renderRedirect;
121
+ let renderError;
122
+ try {
123
+ if (!detectRedirectResponse.body) throw new Error("Failed to clone server response");
124
+ const payload = await createFromReadableStream(detectRedirectResponse.body);
125
+ if (serverResponse.status === 202 && payload.type === "redirect") {
126
+ if (hasInvalidProtocol(payload.location)) throw new Error("Invalid redirect location");
127
+ const headers = new Headers(serverResponse.headers);
128
+ headers.delete("Content-Encoding");
129
+ headers.delete("Content-Length");
130
+ headers.delete("Content-Type");
131
+ headers.delete("X-Remix-Response");
132
+ headers.set("Location", payload.location);
133
+ return new Response(serverResponseB?.body || "", {
134
+ headers,
135
+ status: payload.status,
136
+ statusText: serverResponse.statusText
137
+ });
138
+ }
139
+ let reactHeaders = new Headers();
140
+ let status = serverResponse.status;
141
+ let statusText = serverResponse.statusText;
142
+ let html = await renderHTML(getPayload, {
143
+ onError(error) {
144
+ if (typeof error === "object" && error && "digest" in error && typeof error.digest === "string") {
145
+ renderRedirect = decodeRedirectErrorDigest(error.digest);
146
+ if (renderRedirect) return error.digest;
147
+ let routeErrorResponse = decodeRouteErrorResponseDigest(error.digest);
148
+ if (routeErrorResponse) {
149
+ renderError = routeErrorResponse;
150
+ status = routeErrorResponse.status;
151
+ statusText = routeErrorResponse.statusText;
152
+ return error.digest;
153
+ }
154
+ }
155
+ },
156
+ onHeaders(headers) {
157
+ for (const [key, value] of headers) reactHeaders.append(key, value);
158
+ }
159
+ });
160
+ const headers = new Headers(reactHeaders);
161
+ for (const [key, value] of serverResponse.headers) headers.append(key, value);
162
+ headers.set("Content-Type", "text/html; charset=utf-8");
163
+ if (renderRedirect) {
164
+ if (hasInvalidProtocol(renderRedirect.location)) throw new Error("Invalid redirect location");
165
+ headers.set("Location", renderRedirect.location);
166
+ return new Response(html, {
167
+ status: renderRedirect.status,
168
+ headers
169
+ });
170
+ }
171
+ const redirectTransform = new TransformStream({ flush(controller) {
172
+ if (renderRedirect) {
173
+ if (hasInvalidProtocol(renderRedirect.location)) return;
174
+ controller.enqueue(new TextEncoder().encode(`<meta http-equiv="refresh" content="0;url=${escapeHtml(renderRedirect.location)}"/>`));
175
+ }
176
+ } });
177
+ if (!hydrate) return new Response(html.pipeThrough(redirectTransform), {
178
+ status,
179
+ statusText,
180
+ headers
181
+ });
182
+ if (!serverResponseB?.body) throw new Error("Failed to clone server response");
183
+ const body = html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(redirectTransform);
184
+ return new Response(body, {
185
+ status,
186
+ statusText,
187
+ headers
188
+ });
189
+ } catch (error) {
190
+ if (error instanceof Response) return error;
191
+ if (renderRedirect) {
192
+ if (hasInvalidProtocol(renderRedirect.location)) throw new Error("Invalid redirect location");
193
+ return new Response(`Redirect: ${renderRedirect.location}`, {
194
+ status: renderRedirect.status,
195
+ headers: { Location: renderRedirect.location }
196
+ });
197
+ }
198
+ try {
199
+ let normalizedError = renderError ?? error;
200
+ let [status, statusText] = isRouteErrorResponse(normalizedError) ? [normalizedError.status, normalizedError.statusText] : [500, ""];
201
+ let retryRedirect;
202
+ let reactHeaders = new Headers();
203
+ const html = await renderHTML(() => {
204
+ const payloadPromise = Promise.resolve(createFromReadableStream(createStream())).then((payload) => Object.assign(payload, {
205
+ status,
206
+ errors: deepestRenderedBoundaryId ? { [deepestRenderedBoundaryId]: normalizedError } : {}
207
+ }));
208
+ return Object.defineProperties(payloadPromise, {
209
+ _deepestRenderedBoundaryId: {
210
+ get() {
211
+ return deepestRenderedBoundaryId;
212
+ },
213
+ set(boundaryId) {
214
+ deepestRenderedBoundaryId = boundaryId;
215
+ }
216
+ },
217
+ formState: { get() {
218
+ return payloadPromise.then((payload) => payload.type === "render" ? payload.formState : void 0);
219
+ } }
220
+ });
221
+ }, {
222
+ onError(error) {
223
+ if (typeof error === "object" && error && "digest" in error && typeof error.digest === "string") {
224
+ retryRedirect = decodeRedirectErrorDigest(error.digest);
225
+ if (retryRedirect) return error.digest;
226
+ let routeErrorResponse = decodeRouteErrorResponseDigest(error.digest);
227
+ if (routeErrorResponse) {
228
+ status = routeErrorResponse.status;
229
+ statusText = routeErrorResponse.statusText;
230
+ return error.digest;
231
+ }
232
+ }
233
+ },
234
+ onHeaders(headers) {
235
+ for (const [key, value] of headers) reactHeaders.append(key, value);
236
+ }
237
+ });
238
+ const headers = new Headers(reactHeaders);
239
+ for (const [key, value] of serverResponse.headers) headers.append(key, value);
240
+ headers.set("Content-Type", "text/html; charset=utf-8");
241
+ if (retryRedirect) {
242
+ if (hasInvalidProtocol(retryRedirect.location)) throw new Error("Invalid redirect location");
243
+ headers.set("Location", retryRedirect.location);
244
+ return new Response(html, {
245
+ status: retryRedirect.status,
246
+ headers
247
+ });
248
+ }
249
+ const retryRedirectTransform = new TransformStream({ flush(controller) {
250
+ if (retryRedirect) {
251
+ if (hasInvalidProtocol(retryRedirect.location)) return;
252
+ controller.enqueue(new TextEncoder().encode(`<meta http-equiv="refresh" content="0;url=${escapeHtml(retryRedirect.location)}"/>`));
253
+ }
254
+ } });
255
+ if (!hydrate) return new Response(html.pipeThrough(retryRedirectTransform), {
256
+ status,
257
+ statusText,
258
+ headers
259
+ });
260
+ if (!serverResponseB?.body) throw new Error("Failed to clone server response");
261
+ const body = html.pipeThrough(injectRSCPayload(serverResponseB.body)).pipeThrough(retryRedirectTransform);
262
+ return new Response(body, {
263
+ status,
264
+ statusText,
265
+ headers
266
+ });
267
+ } catch (error2) {}
268
+ throw error;
269
+ }
270
+ }
271
+ /**
272
+ * Pre-renders an {@link unstable_RSCPayload} to HTML. Usually used in
273
+ * {@link unstable_routeRSCServerRequest}'s `renderHTML` callback.
274
+ *
275
+ * @example
276
+ * import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
277
+ * import * as ReactDomServer from "react-dom/server.edge";
278
+ * import {
279
+ * unstable_RSCStaticRouter as RSCStaticRouter,
280
+ * unstable_routeRSCServerRequest as routeRSCServerRequest,
281
+ * } from "react-router";
282
+ *
283
+ * routeRSCServerRequest({
284
+ * request,
285
+ * serverResponse,
286
+ * createFromReadableStream,
287
+ * async renderHTML(getPayload) {
288
+ * const payload = getPayload();
289
+ *
290
+ * return await renderHTMLToReadableStream(
291
+ * <RSCStaticRouter getPayload={getPayload} />,
292
+ * {
293
+ * bootstrapScriptContent,
294
+ * formState: await payload.formState,
295
+ * }
296
+ * );
297
+ * },
298
+ * });
299
+ *
300
+ * @name unstable_RSCStaticRouter
301
+ * @public
302
+ * @category RSC
303
+ * @mode data
304
+ * @param props Props
305
+ * @param {unstable_RSCStaticRouterProps.getPayload} props.getPayload n/a
306
+ * @returns A React component that renders the {@link unstable_RSCPayload} as HTML.
307
+ */
308
+ function RSCStaticRouter({ getPayload }) {
309
+ const decoded = getPayload();
310
+ const payload = React$1.use(decoded);
311
+ if (payload.type === "redirect") {
312
+ if (hasInvalidProtocol(payload.location)) throw new Error("Invalid redirect location");
313
+ throw new Response(null, {
314
+ status: payload.status,
315
+ headers: { Location: payload.location }
316
+ });
317
+ }
318
+ if (payload.type !== "render") return null;
319
+ let patchedLoaderData = { ...payload.loaderData };
320
+ for (const match of payload.matches) if (shouldHydrateRouteLoader(match.id, match.clientLoader, match.hasLoader, false) && (match.hydrateFallbackElement || !match.hasLoader)) delete patchedLoaderData[match.id];
321
+ const context = {
322
+ get _deepestRenderedBoundaryId() {
323
+ return decoded._deepestRenderedBoundaryId ?? null;
324
+ },
325
+ set _deepestRenderedBoundaryId(boundaryId) {
326
+ decoded._deepestRenderedBoundaryId = boundaryId;
327
+ },
328
+ actionData: payload.actionData,
329
+ actionHeaders: {},
330
+ basename: payload.basename,
331
+ errors: payload.errors,
332
+ loaderData: patchedLoaderData,
333
+ loaderHeaders: {},
334
+ location: payload.location,
335
+ statusCode: 200,
336
+ matches: payload.matches.map((match) => ({
337
+ params: match.params,
338
+ pathname: match.pathname,
339
+ pathnameBase: match.pathnameBase,
340
+ route: {
341
+ id: match.id,
342
+ action: match.hasAction || !!match.clientAction,
343
+ handle: match.handle,
344
+ loader: match.hasLoader || !!match.clientLoader,
345
+ index: match.index,
346
+ path: match.path,
347
+ shouldRevalidate: match.shouldRevalidate
348
+ }
349
+ }))
350
+ };
351
+ const router = createStaticRouter(payload.matches.reduceRight((previous, match) => {
352
+ const route = {
353
+ id: match.id,
354
+ action: match.hasAction || !!match.clientAction,
355
+ element: match.element,
356
+ errorElement: match.errorElement,
357
+ handle: match.handle,
358
+ hydrateFallbackElement: match.hydrateFallbackElement,
359
+ index: match.index,
360
+ loader: match.hasLoader || !!match.clientLoader,
361
+ path: match.path,
362
+ shouldRevalidate: match.shouldRevalidate
363
+ };
364
+ if (previous.length > 0) route.children = previous;
365
+ return [route];
366
+ }, []), context);
367
+ const frameworkContext = {
368
+ future: {},
369
+ isSpaMode: false,
370
+ ssr: true,
371
+ criticalCss: "",
372
+ manifest: {
373
+ routes: {},
374
+ version: "1",
375
+ url: "",
376
+ entry: {
377
+ module: "",
378
+ imports: []
379
+ }
380
+ },
381
+ routeDiscovery: payload.routeDiscovery.mode === "initial" ? {
382
+ mode: "initial",
383
+ manifestPath: defaultManifestPath
384
+ } : {
385
+ mode: "lazy",
386
+ manifestPath: payload.routeDiscovery.manifestPath || defaultManifestPath
387
+ },
388
+ routeModules: createRSCRouteModules(payload)
389
+ };
390
+ return /* @__PURE__ */ React$1.createElement(RSCRouterContext.Provider, { value: true }, /* @__PURE__ */ React$1.createElement(RSCRouterGlobalErrorBoundary, { location: payload.location }, /* @__PURE__ */ React$1.createElement(FrameworkContext.Provider, { value: frameworkContext }, /* @__PURE__ */ React$1.createElement(StaticRouterProvider, {
391
+ context,
392
+ router,
393
+ hydrate: false,
394
+ nonce: payload.nonce
395
+ }))));
396
+ }
397
+ function isReactServerRequest(url) {
398
+ return url.pathname.endsWith(".rsc");
399
+ }
400
+ function isManifestRequest(url) {
401
+ return url.pathname.endsWith(".manifest");
402
+ }
403
+ //#endregion
404
+ export { RSCStaticRouter, routeRSCServerRequest };
@@ -0,0 +1,66 @@
1
+
2
+ import { ActionFunctionArgs, LoaderFunctionArgs, RouterContextProvider } from "../router/utils.js";
3
+ import { AssetsManifest, CriticalCss, EntryContext, FutureConfig } from "../dom/ssr/entry.js";
4
+ import { ServerRouteManifest } from "./routes.js";
5
+ import { ServerInstrumentation } from "../router/instrumentation.js";
6
+
7
+ //#region lib/server-runtime/build.d.ts
8
+ type OptionalCriticalCss = CriticalCss | undefined;
9
+ /**
10
+ * The output of the compiler for the server build.
11
+ */
12
+ interface ServerBuild {
13
+ entry: {
14
+ module: ServerEntryModule;
15
+ };
16
+ routes: ServerRouteManifest;
17
+ assets: AssetsManifest;
18
+ basename?: string;
19
+ publicPath: string;
20
+ assetsBuildDirectory: string;
21
+ future: FutureConfig;
22
+ ssr: boolean;
23
+ unstable_getCriticalCss?: (args: {
24
+ pathname: string;
25
+ }) => OptionalCriticalCss | Promise<OptionalCriticalCss>;
26
+ /**
27
+ * @deprecated This is now done via a custom header during prerendering
28
+ */
29
+ isSpaMode: boolean;
30
+ prerender: string[];
31
+ routeDiscovery: {
32
+ mode: "lazy" | "initial";
33
+ manifestPath: string;
34
+ };
35
+ allowedActionOrigins?: string[] | false;
36
+ }
37
+ interface HandleDocumentRequestFunction {
38
+ (request: Request, responseStatusCode: number, responseHeaders: Headers, context: EntryContext, loadContext: RouterContextProvider): Promise<Response> | Response;
39
+ }
40
+ interface HandleDataRequestFunction {
41
+ (response: Response, args: {
42
+ request: LoaderFunctionArgs["request"] | ActionFunctionArgs["request"];
43
+ context: LoaderFunctionArgs["context"] | ActionFunctionArgs["context"];
44
+ params: LoaderFunctionArgs["params"] | ActionFunctionArgs["params"];
45
+ }): Promise<Response> | Response;
46
+ }
47
+ interface HandleErrorFunction {
48
+ (error: unknown, args: {
49
+ request: LoaderFunctionArgs["request"] | ActionFunctionArgs["request"];
50
+ context: LoaderFunctionArgs["context"] | ActionFunctionArgs["context"];
51
+ params: LoaderFunctionArgs["params"] | ActionFunctionArgs["params"];
52
+ }): void;
53
+ }
54
+ /**
55
+ * A module that serves as the entry point for a Remix app during server
56
+ * rendering.
57
+ */
58
+ interface ServerEntryModule {
59
+ default: HandleDocumentRequestFunction;
60
+ handleDataRequest?: HandleDataRequestFunction;
61
+ handleError?: HandleErrorFunction;
62
+ instrumentations?: ServerInstrumentation[];
63
+ streamTimeout?: number;
64
+ }
65
+ //#endregion
66
+ export { HandleDataRequestFunction, HandleDocumentRequestFunction, HandleErrorFunction, ServerBuild, ServerEntryModule };
@@ -0,0 +1,66 @@
1
+
2
+ import { CookieParseOptions as CookieParseOptions$1, CookieSerializeOptions as CookieSerializeOptions$1 } from "cookie-es";
3
+
4
+ //#region lib/server-runtime/cookies.d.ts
5
+ interface CookieSignatureOptions {
6
+ /**
7
+ * An array of secrets that may be used to sign/unsign the value of a cookie.
8
+ *
9
+ * The array makes it easy to rotate secrets. New secrets should be added to
10
+ * the beginning of the array. `cookie.serialize()` will always use the first
11
+ * value in the array, but `cookie.parse()` may use any of them so that
12
+ * cookies that were signed with older secrets still work.
13
+ */
14
+ secrets?: string[];
15
+ }
16
+ type CookieOptions = CookieParseOptions$1 & CookieSerializeOptions$1 & CookieSignatureOptions;
17
+ /**
18
+ * A HTTP cookie.
19
+ *
20
+ * A Cookie is a logical container for metadata about a HTTP cookie; its name
21
+ * and options. But it doesn't contain a value. Instead, it has `parse()` and
22
+ * `serialize()` methods that allow a single instance to be reused for
23
+ * parsing/encoding multiple different values.
24
+ *
25
+ * @see https://remix.run/utils/cookies#cookie-api
26
+ */
27
+ interface Cookie {
28
+ /**
29
+ * The name of the cookie, used in the `Cookie` and `Set-Cookie` headers.
30
+ */
31
+ readonly name: string;
32
+ /**
33
+ * True if this cookie uses one or more secrets for verification.
34
+ */
35
+ readonly isSigned: boolean;
36
+ /**
37
+ * The Date this cookie expires.
38
+ *
39
+ * Note: This is calculated at access time using `maxAge` when no `expires`
40
+ * option is provided to `createCookie()`.
41
+ */
42
+ readonly expires?: Date;
43
+ /**
44
+ * Parses a raw `Cookie` header and returns the value of this cookie or
45
+ * `null` if it's not present.
46
+ */
47
+ parse(cookieHeader: string | null, options?: CookieParseOptions$1): Promise<any>;
48
+ /**
49
+ * Serializes the given value to a string and returns the `Set-Cookie`
50
+ * header.
51
+ */
52
+ serialize(value: any, options?: CookieSerializeOptions$1): Promise<string>;
53
+ }
54
+ /**
55
+ * Creates a logical container for managing a browser cookie from the server.
56
+ */
57
+ declare const createCookie: (name: string, cookieOptions?: CookieOptions) => Cookie;
58
+ type IsCookieFunction = (object: any) => object is Cookie;
59
+ /**
60
+ * Returns true if an object is a Remix cookie container.
61
+ *
62
+ * @see https://remix.run/utils/cookies#iscookie
63
+ */
64
+ declare const isCookie: IsCookieFunction;
65
+ //#endregion
66
+ export { Cookie, CookieOptions, type CookieParseOptions$1 as CookieParseOptions, type CookieSerializeOptions$1 as CookieSerializeOptions, CookieSignatureOptions, IsCookieFunction, createCookie, isCookie };
@@ -0,0 +1,139 @@
1
+ /**
2
+ * react-router v8.0.0-pre.1
3
+ *
4
+ * Copyright (c) Remix Software Inc.
5
+ *
6
+ * This source code is licensed under the MIT license found in the
7
+ * LICENSE.md file in the root directory of this source tree.
8
+ *
9
+ * @license MIT
10
+ */
11
+ import { warnOnce } from "./warnings.js";
12
+ import { sign, unsign } from "./crypto.js";
13
+ import { parse, serialize } from "cookie-es";
14
+ //#region lib/server-runtime/cookies.ts
15
+ /**
16
+ * Creates a logical container for managing a browser cookie from the server.
17
+ */
18
+ const createCookie = (name, cookieOptions = {}) => {
19
+ let { secrets = [], ...options } = {
20
+ path: "/",
21
+ sameSite: "lax",
22
+ ...cookieOptions
23
+ };
24
+ warnOnceAboutExpiresCookie(name, options.expires);
25
+ return {
26
+ get name() {
27
+ return name;
28
+ },
29
+ get isSigned() {
30
+ return secrets.length > 0;
31
+ },
32
+ get expires() {
33
+ return typeof options.maxAge !== "undefined" ? new Date(Date.now() + options.maxAge * 1e3) : options.expires;
34
+ },
35
+ async parse(cookieHeader, parseOptions) {
36
+ if (!cookieHeader) return null;
37
+ let cookies = parse(cookieHeader, {
38
+ ...options,
39
+ ...parseOptions
40
+ });
41
+ if (name in cookies) {
42
+ let value = cookies[name];
43
+ if (typeof value === "string" && value !== "") return await decodeCookieValue(value, secrets);
44
+ else return "";
45
+ } else return null;
46
+ },
47
+ async serialize(value, serializeOptions) {
48
+ return serialize(name, value === "" ? "" : await encodeCookieValue(value, secrets), {
49
+ ...options,
50
+ ...serializeOptions
51
+ });
52
+ }
53
+ };
54
+ };
55
+ /**
56
+ * Returns true if an object is a Remix cookie container.
57
+ *
58
+ * @see https://remix.run/utils/cookies#iscookie
59
+ */
60
+ const isCookie = (object) => {
61
+ return object != null && typeof object.name === "string" && typeof object.isSigned === "boolean" && typeof object.parse === "function" && typeof object.serialize === "function";
62
+ };
63
+ async function encodeCookieValue(value, secrets) {
64
+ let encoded = encodeData(value);
65
+ if (secrets.length > 0) encoded = await sign(encoded, secrets[0]);
66
+ return encoded;
67
+ }
68
+ async function decodeCookieValue(value, secrets) {
69
+ if (secrets.length > 0) {
70
+ for (let secret of secrets) {
71
+ let unsignedValue = await unsign(value, secret);
72
+ if (unsignedValue !== false) return decodeData(unsignedValue);
73
+ }
74
+ return null;
75
+ }
76
+ return decodeData(value);
77
+ }
78
+ function encodeData(value) {
79
+ return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))));
80
+ }
81
+ function decodeData(value) {
82
+ try {
83
+ return JSON.parse(decodeURIComponent(myEscape(atob(value))));
84
+ } catch (e) {
85
+ return {};
86
+ }
87
+ }
88
+ function myEscape(value) {
89
+ let str = value.toString();
90
+ let result = "";
91
+ let index = 0;
92
+ let chr, code;
93
+ while (index < str.length) {
94
+ chr = str.charAt(index++);
95
+ if (/[\w*+\-./@]/.exec(chr)) result += chr;
96
+ else {
97
+ code = chr.charCodeAt(0);
98
+ if (code < 256) result += "%" + hex(code, 2);
99
+ else result += "%u" + hex(code, 4).toUpperCase();
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ function hex(code, length) {
105
+ let result = code.toString(16);
106
+ while (result.length < length) result = "0" + result;
107
+ return result;
108
+ }
109
+ function myUnescape(value) {
110
+ let str = value.toString();
111
+ let result = "";
112
+ let index = 0;
113
+ let chr, part;
114
+ while (index < str.length) {
115
+ chr = str.charAt(index++);
116
+ if (chr === "%") if (str.charAt(index) === "u") {
117
+ part = str.slice(index + 1, index + 5);
118
+ if (/^[\da-f]{4}$/i.exec(part)) {
119
+ result += String.fromCharCode(parseInt(part, 16));
120
+ index += 5;
121
+ continue;
122
+ }
123
+ } else {
124
+ part = str.slice(index, index + 2);
125
+ if (/^[\da-f]{2}$/i.exec(part)) {
126
+ result += String.fromCharCode(parseInt(part, 16));
127
+ index += 2;
128
+ continue;
129
+ }
130
+ }
131
+ result += chr;
132
+ }
133
+ return result;
134
+ }
135
+ function warnOnceAboutExpiresCookie(name, expires) {
136
+ warnOnce(!expires, `The "${name}" cookie has an "expires" property set. This will cause the expires value to not be updated when the session is committed. Instead, you should set the expires value when serializing the cookie. You can use \`commitSession(session, { expires })\` if using a session storage object, or \`cookie.serialize("value", { expires })\` if you're using the cookie directly.`);
137
+ }
138
+ //#endregion
139
+ export { createCookie, isCookie };