UNPKG

77.1 kBJavaScriptView Raw
1"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/**
2 * react-router v7.10.0
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"use client";
12
13
14
15
16
17var _chunk26EFLBGXjs = require('./chunk-26EFLBGX.js');
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43var _chunkAWUYHSQUjs = require('./chunk-AWUYHSQU.js');
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148var _chunk54KWOGSJjs = require('./chunk-54KWOGSJ.js');
149
150// lib/dom/ssr/server.tsx
151var _react = require('react'); var React = _interopRequireWildcard(_react); var React2 = _interopRequireWildcard(_react); var React3 = _interopRequireWildcard(_react);
152function ServerRouter({
153 context,
154 url,
155 nonce
156}) {
157 if (typeof url === "string") {
158 url = new URL(url);
159 }
160 let { manifest, routeModules, criticalCss, serverHandoffString } = context;
161 let routes = _chunk54KWOGSJjs.createServerRoutes.call(void 0,
162 manifest.routes,
163 routeModules,
164 context.future,
165 context.isSpaMode
166 );
167 context.staticHandlerContext.loaderData = {
168 ...context.staticHandlerContext.loaderData
169 };
170 for (let match of context.staticHandlerContext.matches) {
171 let routeId = match.route.id;
172 let route = routeModules[routeId];
173 let manifestRoute = context.manifest.routes[routeId];
174 if (route && manifestRoute && _chunk54KWOGSJjs.shouldHydrateRouteLoader.call(void 0,
175 routeId,
176 route.clientLoader,
177 manifestRoute.hasLoader,
178 context.isSpaMode
179 ) && (route.HydrateFallback || !manifestRoute.hasLoader)) {
180 delete context.staticHandlerContext.loaderData[routeId];
181 }
182 }
183 let router = _chunkAWUYHSQUjs.createStaticRouter.call(void 0, routes, context.staticHandlerContext);
184 return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
185 _chunk54KWOGSJjs.FrameworkContext.Provider,
186 {
187 value: {
188 manifest,
189 routeModules,
190 criticalCss,
191 serverHandoffString,
192 future: context.future,
193 ssr: context.ssr,
194 isSpaMode: context.isSpaMode,
195 routeDiscovery: context.routeDiscovery,
196 serializeError: context.serializeError,
197 renderMeta: context.renderMeta
198 }
199 },
200 /* @__PURE__ */ React.createElement(_chunk54KWOGSJjs.RemixErrorBoundary, { location: router.state.location }, /* @__PURE__ */ React.createElement(
201 _chunkAWUYHSQUjs.StaticRouterProvider,
202 {
203 router,
204 context: context.staticHandlerContext,
205 hydrate: false
206 }
207 ))
208 ), context.serverHandoffStream ? /* @__PURE__ */ React.createElement(React.Suspense, null, /* @__PURE__ */ React.createElement(
209 _chunk54KWOGSJjs.StreamTransfer,
210 {
211 context,
212 identifier: 0,
213 reader: context.serverHandoffStream.getReader(),
214 textDecoder: new TextDecoder(),
215 nonce
216 }
217 )) : null);
218}
219
220// lib/dom/ssr/routes-test-stub.tsx
221
222function createRoutesStub(routes, _context) {
223 return function RoutesTestStub({
224 initialEntries,
225 initialIndex,
226 hydrationData,
227 future
228 }) {
229 let routerRef = React2.useRef();
230 let frameworkContextRef = React2.useRef();
231 if (routerRef.current == null) {
232 frameworkContextRef.current = {
233 future: {
234 unstable_subResourceIntegrity: _optionalChain([future, 'optionalAccess', _2 => _2.unstable_subResourceIntegrity]) === true,
235 v8_middleware: _optionalChain([future, 'optionalAccess', _3 => _3.v8_middleware]) === true
236 },
237 manifest: {
238 routes: {},
239 entry: { imports: [], module: "" },
240 url: "",
241 version: ""
242 },
243 routeModules: {},
244 ssr: false,
245 isSpaMode: false,
246 routeDiscovery: { mode: "lazy", manifestPath: "/__manifest" }
247 };
248 let patched = processRoutes(
249 // @ts-expect-error `StubRouteObject` is stricter about `loader`/`action`
250 // types compared to `AgnosticRouteObject`
251 _chunk54KWOGSJjs.convertRoutesToDataRoutes.call(void 0, routes, (r) => r),
252 _context !== void 0 ? _context : _optionalChain([future, 'optionalAccess', _4 => _4.v8_middleware]) ? new (0, _chunk54KWOGSJjs.RouterContextProvider)() : {},
253 frameworkContextRef.current.manifest,
254 frameworkContextRef.current.routeModules
255 );
256 routerRef.current = _chunk54KWOGSJjs.createMemoryRouter.call(void 0, patched, {
257 initialEntries,
258 initialIndex,
259 hydrationData
260 });
261 }
262 return /* @__PURE__ */ React2.createElement(_chunk54KWOGSJjs.FrameworkContext.Provider, { value: frameworkContextRef.current }, /* @__PURE__ */ React2.createElement(_chunk54KWOGSJjs.RouterProvider, { router: routerRef.current }));
263 };
264}
265function processRoutes(routes, context, manifest, routeModules, parentId) {
266 return routes.map((route) => {
267 if (!route.id) {
268 throw new Error(
269 "Expected a route.id in react-router processRoutes() function"
270 );
271 }
272 let newRoute = {
273 id: route.id,
274 path: route.path,
275 index: route.index,
276 Component: route.Component ? _chunk54KWOGSJjs.withComponentProps.call(void 0, route.Component) : void 0,
277 HydrateFallback: route.HydrateFallback ? _chunk54KWOGSJjs.withHydrateFallbackProps.call(void 0, route.HydrateFallback) : void 0,
278 ErrorBoundary: route.ErrorBoundary ? _chunk54KWOGSJjs.withErrorBoundaryProps.call(void 0, route.ErrorBoundary) : void 0,
279 action: route.action ? (args) => route.action({ ...args, context }) : void 0,
280 loader: route.loader ? (args) => route.loader({ ...args, context }) : void 0,
281 middleware: route.middleware ? route.middleware.map(
282 (mw) => (...args) => mw(
283 { ...args[0], context },
284 args[1]
285 )
286 ) : void 0,
287 handle: route.handle,
288 shouldRevalidate: route.shouldRevalidate
289 };
290 let entryRoute = {
291 id: route.id,
292 path: route.path,
293 index: route.index,
294 parentId,
295 hasAction: route.action != null,
296 hasLoader: route.loader != null,
297 // When testing routes, you should be stubbing loader/action/middleware,
298 // not trying to re-implement the full loader/clientLoader/SSR/hydration
299 // flow. That is better tested via E2E tests.
300 hasClientAction: false,
301 hasClientLoader: false,
302 hasClientMiddleware: false,
303 hasErrorBoundary: route.ErrorBoundary != null,
304 // any need for these?
305 module: "build/stub-path-to-module.js",
306 clientActionModule: void 0,
307 clientLoaderModule: void 0,
308 clientMiddlewareModule: void 0,
309 hydrateFallbackModule: void 0
310 };
311 manifest.routes[newRoute.id] = entryRoute;
312 routeModules[route.id] = {
313 default: newRoute.Component || _chunk54KWOGSJjs.Outlet,
314 ErrorBoundary: newRoute.ErrorBoundary || void 0,
315 handle: route.handle,
316 links: route.links,
317 meta: route.meta,
318 shouldRevalidate: route.shouldRevalidate
319 };
320 if (route.children) {
321 newRoute.children = processRoutes(
322 route.children,
323 context,
324 manifest,
325 routeModules,
326 newRoute.id
327 );
328 }
329 return newRoute;
330 });
331}
332
333// lib/server-runtime/cookies.ts
334var _cookie = require('cookie');
335
336// lib/server-runtime/crypto.ts
337var encoder = /* @__PURE__ */ new TextEncoder();
338var sign = async (value, secret) => {
339 let data2 = encoder.encode(value);
340 let key = await createKey(secret, ["sign"]);
341 let signature = await crypto.subtle.sign("HMAC", key, data2);
342 let hash = btoa(String.fromCharCode(...new Uint8Array(signature))).replace(
343 /=+$/,
344 ""
345 );
346 return value + "." + hash;
347};
348var unsign = async (cookie, secret) => {
349 let index = cookie.lastIndexOf(".");
350 let value = cookie.slice(0, index);
351 let hash = cookie.slice(index + 1);
352 let data2 = encoder.encode(value);
353 let key = await createKey(secret, ["verify"]);
354 try {
355 let signature = byteStringToUint8Array(atob(hash));
356 let valid = await crypto.subtle.verify("HMAC", key, signature, data2);
357 return valid ? value : false;
358 } catch (error) {
359 return false;
360 }
361};
362var createKey = async (secret, usages) => crypto.subtle.importKey(
363 "raw",
364 encoder.encode(secret),
365 { name: "HMAC", hash: "SHA-256" },
366 false,
367 usages
368);
369function byteStringToUint8Array(byteString) {
370 let array = new Uint8Array(byteString.length);
371 for (let i = 0; i < byteString.length; i++) {
372 array[i] = byteString.charCodeAt(i);
373 }
374 return array;
375}
376
377// lib/server-runtime/cookies.ts
378var createCookie = (name, cookieOptions = {}) => {
379 let { secrets = [], ...options } = {
380 path: "/",
381 sameSite: "lax",
382 ...cookieOptions
383 };
384 warnOnceAboutExpiresCookie(name, options.expires);
385 return {
386 get name() {
387 return name;
388 },
389 get isSigned() {
390 return secrets.length > 0;
391 },
392 get expires() {
393 return typeof options.maxAge !== "undefined" ? new Date(Date.now() + options.maxAge * 1e3) : options.expires;
394 },
395 async parse(cookieHeader, parseOptions) {
396 if (!cookieHeader) return null;
397 let cookies = _cookie.parse.call(void 0, cookieHeader, { ...options, ...parseOptions });
398 if (name in cookies) {
399 let value = cookies[name];
400 if (typeof value === "string" && value !== "") {
401 let decoded = await decodeCookieValue(value, secrets);
402 return decoded;
403 } else {
404 return "";
405 }
406 } else {
407 return null;
408 }
409 },
410 async serialize(value, serializeOptions) {
411 return _cookie.serialize.call(void 0,
412 name,
413 value === "" ? "" : await encodeCookieValue(value, secrets),
414 {
415 ...options,
416 ...serializeOptions
417 }
418 );
419 }
420 };
421};
422var isCookie = (object) => {
423 return object != null && typeof object.name === "string" && typeof object.isSigned === "boolean" && typeof object.parse === "function" && typeof object.serialize === "function";
424};
425async function encodeCookieValue(value, secrets) {
426 let encoded = encodeData(value);
427 if (secrets.length > 0) {
428 encoded = await sign(encoded, secrets[0]);
429 }
430 return encoded;
431}
432async function decodeCookieValue(value, secrets) {
433 if (secrets.length > 0) {
434 for (let secret of secrets) {
435 let unsignedValue = await unsign(value, secret);
436 if (unsignedValue !== false) {
437 return decodeData(unsignedValue);
438 }
439 }
440 return null;
441 }
442 return decodeData(value);
443}
444function encodeData(value) {
445 return btoa(myUnescape(encodeURIComponent(JSON.stringify(value))));
446}
447function decodeData(value) {
448 try {
449 return JSON.parse(decodeURIComponent(myEscape(atob(value))));
450 } catch (error) {
451 return {};
452 }
453}
454function myEscape(value) {
455 let str = value.toString();
456 let result = "";
457 let index = 0;
458 let chr, code;
459 while (index < str.length) {
460 chr = str.charAt(index++);
461 if (/[\w*+\-./@]/.exec(chr)) {
462 result += chr;
463 } else {
464 code = chr.charCodeAt(0);
465 if (code < 256) {
466 result += "%" + hex(code, 2);
467 } else {
468 result += "%u" + hex(code, 4).toUpperCase();
469 }
470 }
471 }
472 return result;
473}
474function hex(code, length) {
475 let result = code.toString(16);
476 while (result.length < length) result = "0" + result;
477 return result;
478}
479function myUnescape(value) {
480 let str = value.toString();
481 let result = "";
482 let index = 0;
483 let chr, part;
484 while (index < str.length) {
485 chr = str.charAt(index++);
486 if (chr === "%") {
487 if (str.charAt(index) === "u") {
488 part = str.slice(index + 1, index + 5);
489 if (/^[\da-f]{4}$/i.exec(part)) {
490 result += String.fromCharCode(parseInt(part, 16));
491 index += 5;
492 continue;
493 }
494 } else {
495 part = str.slice(index, index + 2);
496 if (/^[\da-f]{2}$/i.exec(part)) {
497 result += String.fromCharCode(parseInt(part, 16));
498 index += 2;
499 continue;
500 }
501 }
502 }
503 result += chr;
504 }
505 return result;
506}
507function warnOnceAboutExpiresCookie(name, expires) {
508 _chunk54KWOGSJjs.warnOnce.call(void 0,
509 !expires,
510 `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.`
511 );
512}
513
514// lib/server-runtime/entry.ts
515function createEntryRouteModules(manifest) {
516 return Object.keys(manifest).reduce((memo, routeId) => {
517 let route = manifest[routeId];
518 if (route) {
519 memo[routeId] = route.module;
520 }
521 return memo;
522 }, {});
523}
524
525// lib/server-runtime/mode.ts
526var ServerMode = /* @__PURE__ */ ((ServerMode2) => {
527 ServerMode2["Development"] = "development";
528 ServerMode2["Production"] = "production";
529 ServerMode2["Test"] = "test";
530 return ServerMode2;
531})(ServerMode || {});
532function isServerMode(value) {
533 return value === "development" /* Development */ || value === "production" /* Production */ || value === "test" /* Test */;
534}
535
536// lib/server-runtime/errors.ts
537function sanitizeError(error, serverMode) {
538 if (error instanceof Error && serverMode !== "development" /* Development */) {
539 let sanitized = new Error("Unexpected Server Error");
540 sanitized.stack = void 0;
541 return sanitized;
542 }
543 return error;
544}
545function sanitizeErrors(errors, serverMode) {
546 return Object.entries(errors).reduce((acc, [routeId, error]) => {
547 return Object.assign(acc, { [routeId]: sanitizeError(error, serverMode) });
548 }, {});
549}
550function serializeError(error, serverMode) {
551 let sanitized = sanitizeError(error, serverMode);
552 return {
553 message: sanitized.message,
554 stack: sanitized.stack
555 };
556}
557function serializeErrors(errors, serverMode) {
558 if (!errors) return null;
559 let entries = Object.entries(errors);
560 let serialized = {};
561 for (let [key, val] of entries) {
562 if (_chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, val)) {
563 serialized[key] = { ...val, __type: "RouteErrorResponse" };
564 } else if (val instanceof Error) {
565 let sanitized = sanitizeError(val, serverMode);
566 serialized[key] = {
567 message: sanitized.message,
568 stack: sanitized.stack,
569 __type: "Error",
570 // If this is a subclass (i.e., ReferenceError), send up the type so we
571 // can re-create the same type during hydration. This will only apply
572 // in dev mode since all production errors are sanitized to normal
573 // Error instances
574 ...sanitized.name !== "Error" ? {
575 __subType: sanitized.name
576 } : {}
577 };
578 } else {
579 serialized[key] = val;
580 }
581 }
582 return serialized;
583}
584
585// lib/server-runtime/routeMatching.ts
586function matchServerRoutes(routes, pathname, basename) {
587 let matches = _chunk54KWOGSJjs.matchRoutes.call(void 0,
588 routes,
589 pathname,
590 basename
591 );
592 if (!matches) return null;
593 return matches.map((match) => ({
594 params: match.params,
595 pathname: match.pathname,
596 route: match.route
597 }));
598}
599
600// lib/server-runtime/data.ts
601async function callRouteHandler(handler, args) {
602 let result = await handler({
603 request: stripRoutesParam(stripIndexParam(args.request)),
604 params: args.params,
605 context: args.context,
606 unstable_pattern: args.unstable_pattern
607 });
608 if (_chunk54KWOGSJjs.isDataWithResponseInit.call(void 0, result) && result.init && result.init.status && _chunk54KWOGSJjs.isRedirectStatusCode.call(void 0, result.init.status)) {
609 throw new Response(null, result.init);
610 }
611 return result;
612}
613function stripIndexParam(request) {
614 let url = new URL(request.url);
615 let indexValues = url.searchParams.getAll("index");
616 url.searchParams.delete("index");
617 let indexValuesToKeep = [];
618 for (let indexValue of indexValues) {
619 if (indexValue) {
620 indexValuesToKeep.push(indexValue);
621 }
622 }
623 for (let toKeep of indexValuesToKeep) {
624 url.searchParams.append("index", toKeep);
625 }
626 let init = {
627 method: request.method,
628 body: request.body,
629 headers: request.headers,
630 signal: request.signal
631 };
632 if (init.body) {
633 init.duplex = "half";
634 }
635 return new Request(url.href, init);
636}
637function stripRoutesParam(request) {
638 let url = new URL(request.url);
639 url.searchParams.delete("_routes");
640 let init = {
641 method: request.method,
642 body: request.body,
643 headers: request.headers,
644 signal: request.signal
645 };
646 if (init.body) {
647 init.duplex = "half";
648 }
649 return new Request(url.href, init);
650}
651
652// lib/server-runtime/invariant.ts
653function invariant2(value, message) {
654 if (value === false || value === null || typeof value === "undefined") {
655 console.error(
656 "The following error is a bug in React Router; please open an issue! https://github.com/remix-run/react-router/issues/new/choose"
657 );
658 throw new Error(message);
659 }
660}
661
662// lib/server-runtime/dev.ts
663var globalDevServerHooksKey = "__reactRouterDevServerHooks";
664function setDevServerHooks(devServerHooks) {
665 globalThis[globalDevServerHooksKey] = devServerHooks;
666}
667function getDevServerHooks() {
668 return globalThis[globalDevServerHooksKey];
669}
670function getBuildTimeHeader(request, headerName) {
671 if (typeof process !== "undefined") {
672 try {
673 if (_optionalChain([process, 'access', _5 => _5.env, 'optionalAccess', _6 => _6.IS_RR_BUILD_REQUEST]) === "yes") {
674 return request.headers.get(headerName);
675 }
676 } catch (e) {
677 }
678 }
679 return null;
680}
681
682// lib/server-runtime/routes.ts
683function groupRoutesByParentId(manifest) {
684 let routes = {};
685 Object.values(manifest).forEach((route) => {
686 if (route) {
687 let parentId = route.parentId || "";
688 if (!routes[parentId]) {
689 routes[parentId] = [];
690 }
691 routes[parentId].push(route);
692 }
693 });
694 return routes;
695}
696function createRoutes(manifest, parentId = "", routesByParentId = groupRoutesByParentId(manifest)) {
697 return (routesByParentId[parentId] || []).map((route) => ({
698 ...route,
699 children: createRoutes(manifest, route.id, routesByParentId)
700 }));
701}
702function createStaticHandlerDataRoutes(manifest, future, parentId = "", routesByParentId = groupRoutesByParentId(manifest)) {
703 return (routesByParentId[parentId] || []).map((route) => {
704 let commonRoute = {
705 // Always include root due to default boundaries
706 hasErrorBoundary: route.id === "root" || route.module.ErrorBoundary != null,
707 id: route.id,
708 path: route.path,
709 middleware: route.module.middleware,
710 // Need to use RR's version in the param typed here to permit the optional
711 // context even though we know it'll always be provided in remix
712 loader: route.module.loader ? async (args) => {
713 let preRenderedData = getBuildTimeHeader(
714 args.request,
715 "X-React-Router-Prerender-Data"
716 );
717 if (preRenderedData != null) {
718 let encoded = preRenderedData ? decodeURI(preRenderedData) : preRenderedData;
719 invariant2(encoded, "Missing prerendered data for route");
720 let uint8array = new TextEncoder().encode(encoded);
721 let stream = new ReadableStream({
722 start(controller) {
723 controller.enqueue(uint8array);
724 controller.close();
725 }
726 });
727 let decoded = await _chunk54KWOGSJjs.decodeViaTurboStream.call(void 0, stream, global);
728 let data2 = decoded.value;
729 if (data2 && _chunk54KWOGSJjs.SingleFetchRedirectSymbol in data2) {
730 let result = data2[_chunk54KWOGSJjs.SingleFetchRedirectSymbol];
731 let init = { status: result.status };
732 if (result.reload) {
733 throw _chunk54KWOGSJjs.redirectDocument.call(void 0, result.redirect, init);
734 } else if (result.replace) {
735 throw _chunk54KWOGSJjs.replace.call(void 0, result.redirect, init);
736 } else {
737 throw _chunk54KWOGSJjs.redirect.call(void 0, result.redirect, init);
738 }
739 } else {
740 invariant2(
741 data2 && route.id in data2,
742 "Unable to decode prerendered data"
743 );
744 let result = data2[route.id];
745 invariant2(
746 "data" in result,
747 "Unable to process prerendered data"
748 );
749 return result.data;
750 }
751 }
752 let val = await callRouteHandler(route.module.loader, args);
753 return val;
754 } : void 0,
755 action: route.module.action ? (args) => callRouteHandler(route.module.action, args) : void 0,
756 handle: route.module.handle
757 };
758 return route.index ? {
759 index: true,
760 ...commonRoute
761 } : {
762 caseSensitive: route.caseSensitive,
763 children: createStaticHandlerDataRoutes(
764 manifest,
765 future,
766 route.id,
767 routesByParentId
768 ),
769 ...commonRoute
770 };
771 });
772}
773
774// lib/server-runtime/serverHandoff.ts
775function createServerHandoffString(serverHandoff) {
776 return _chunk54KWOGSJjs.escapeHtml.call(void 0, JSON.stringify(serverHandoff));
777}
778
779// lib/server-runtime/headers.ts
780var _setcookieparser = require('set-cookie-parser');
781function getDocumentHeaders(context, build) {
782 return getDocumentHeadersImpl(context, (m) => {
783 let route = build.routes[m.route.id];
784 invariant2(route, `Route with id "${m.route.id}" not found in build`);
785 return route.module.headers;
786 });
787}
788function getDocumentHeadersImpl(context, getRouteHeadersFn, _defaultHeaders) {
789 let boundaryIdx = context.errors ? context.matches.findIndex((m) => context.errors[m.route.id]) : -1;
790 let matches = boundaryIdx >= 0 ? context.matches.slice(0, boundaryIdx + 1) : context.matches;
791 let errorHeaders;
792 if (boundaryIdx >= 0) {
793 let { actionHeaders, actionData, loaderHeaders, loaderData } = context;
794 context.matches.slice(boundaryIdx).some((match) => {
795 let id = match.route.id;
796 if (actionHeaders[id] && (!actionData || !actionData.hasOwnProperty(id))) {
797 errorHeaders = actionHeaders[id];
798 } else if (loaderHeaders[id] && !loaderData.hasOwnProperty(id)) {
799 errorHeaders = loaderHeaders[id];
800 }
801 return errorHeaders != null;
802 });
803 }
804 const defaultHeaders = new Headers(_defaultHeaders);
805 return matches.reduce((parentHeaders, match, idx) => {
806 let { id } = match.route;
807 let loaderHeaders = context.loaderHeaders[id] || new Headers();
808 let actionHeaders = context.actionHeaders[id] || new Headers();
809 let includeErrorHeaders = errorHeaders != null && idx === matches.length - 1;
810 let includeErrorCookies = includeErrorHeaders && errorHeaders !== loaderHeaders && errorHeaders !== actionHeaders;
811 let headersFn = getRouteHeadersFn(match);
812 if (headersFn == null) {
813 let headers2 = new Headers(parentHeaders);
814 if (includeErrorCookies) {
815 prependCookies(errorHeaders, headers2);
816 }
817 prependCookies(actionHeaders, headers2);
818 prependCookies(loaderHeaders, headers2);
819 return headers2;
820 }
821 let headers = new Headers(
822 typeof headersFn === "function" ? headersFn({
823 loaderHeaders,
824 parentHeaders,
825 actionHeaders,
826 errorHeaders: includeErrorHeaders ? errorHeaders : void 0
827 }) : headersFn
828 );
829 if (includeErrorCookies) {
830 prependCookies(errorHeaders, headers);
831 }
832 prependCookies(actionHeaders, headers);
833 prependCookies(loaderHeaders, headers);
834 prependCookies(parentHeaders, headers);
835 return headers;
836 }, new Headers(defaultHeaders));
837}
838function prependCookies(parentHeaders, childHeaders) {
839 let parentSetCookieString = parentHeaders.get("Set-Cookie");
840 if (parentSetCookieString) {
841 let cookies = _setcookieparser.splitCookiesString.call(void 0, parentSetCookieString);
842 let childCookies = new Set(childHeaders.getSetCookie());
843 cookies.forEach((cookie) => {
844 if (!childCookies.has(cookie)) {
845 childHeaders.append("Set-Cookie", cookie);
846 }
847 });
848 }
849}
850
851// lib/server-runtime/single-fetch.ts
852var SERVER_NO_BODY_STATUS_CODES = /* @__PURE__ */ new Set([
853 ..._chunk54KWOGSJjs.NO_BODY_STATUS_CODES,
854 304
855]);
856async function singleFetchAction(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
857 try {
858 let handlerRequest = new Request(handlerUrl, {
859 method: request.method,
860 body: request.body,
861 headers: request.headers,
862 signal: request.signal,
863 ...request.body ? { duplex: "half" } : void 0
864 });
865 let result = await staticHandler.query(handlerRequest, {
866 requestContext: loadContext,
867 skipLoaderErrorBubbling: true,
868 skipRevalidation: true,
869 generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {
870 try {
871 let innerResult = await query(handlerRequest);
872 return handleQueryResult(innerResult);
873 } catch (error) {
874 return handleQueryError(error);
875 }
876 } : void 0
877 });
878 return handleQueryResult(result);
879 } catch (error) {
880 return handleQueryError(error);
881 }
882 function handleQueryResult(result) {
883 return _chunk54KWOGSJjs.isResponse.call(void 0, result) ? result : staticContextToResponse(result);
884 }
885 function handleQueryError(error) {
886 handleError(error);
887 return generateSingleFetchResponse(request, build, serverMode, {
888 result: { error },
889 headers: new Headers(),
890 status: 500
891 });
892 }
893 function staticContextToResponse(context) {
894 let headers = getDocumentHeaders(context, build);
895 if (_chunk54KWOGSJjs.isRedirectStatusCode.call(void 0, context.statusCode) && headers.has("Location")) {
896 return new Response(null, { status: context.statusCode, headers });
897 }
898 if (context.errors) {
899 Object.values(context.errors).forEach((err) => {
900 if (!_chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, err) || err.error) {
901 handleError(err);
902 }
903 });
904 context.errors = sanitizeErrors(context.errors, serverMode);
905 }
906 let singleFetchResult;
907 if (context.errors) {
908 singleFetchResult = { error: Object.values(context.errors)[0] };
909 } else {
910 singleFetchResult = {
911 data: Object.values(context.actionData || {})[0]
912 };
913 }
914 return generateSingleFetchResponse(request, build, serverMode, {
915 result: singleFetchResult,
916 headers,
917 status: context.statusCode
918 });
919 }
920}
921async function singleFetchLoaders(build, serverMode, staticHandler, request, handlerUrl, loadContext, handleError) {
922 let routesParam = new URL(request.url).searchParams.get("_routes");
923 let loadRouteIds = routesParam ? new Set(routesParam.split(",")) : null;
924 try {
925 let handlerRequest = new Request(handlerUrl, {
926 headers: request.headers,
927 signal: request.signal
928 });
929 let result = await staticHandler.query(handlerRequest, {
930 requestContext: loadContext,
931 filterMatchesToLoad: (m) => !loadRouteIds || loadRouteIds.has(m.route.id),
932 skipLoaderErrorBubbling: true,
933 generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {
934 try {
935 let innerResult = await query(handlerRequest);
936 return handleQueryResult(innerResult);
937 } catch (error) {
938 return handleQueryError(error);
939 }
940 } : void 0
941 });
942 return handleQueryResult(result);
943 } catch (error) {
944 return handleQueryError(error);
945 }
946 function handleQueryResult(result) {
947 return _chunk54KWOGSJjs.isResponse.call(void 0, result) ? result : staticContextToResponse(result);
948 }
949 function handleQueryError(error) {
950 handleError(error);
951 return generateSingleFetchResponse(request, build, serverMode, {
952 result: { error },
953 headers: new Headers(),
954 status: 500
955 });
956 }
957 function staticContextToResponse(context) {
958 let headers = getDocumentHeaders(context, build);
959 if (_chunk54KWOGSJjs.isRedirectStatusCode.call(void 0, context.statusCode) && headers.has("Location")) {
960 return new Response(null, { status: context.statusCode, headers });
961 }
962 if (context.errors) {
963 Object.values(context.errors).forEach((err) => {
964 if (!_chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, err) || err.error) {
965 handleError(err);
966 }
967 });
968 context.errors = sanitizeErrors(context.errors, serverMode);
969 }
970 let results = {};
971 let loadedMatches = new Set(
972 context.matches.filter(
973 (m) => loadRouteIds ? loadRouteIds.has(m.route.id) : m.route.loader != null
974 ).map((m) => m.route.id)
975 );
976 if (context.errors) {
977 for (let [id, error] of Object.entries(context.errors)) {
978 results[id] = { error };
979 }
980 }
981 for (let [id, data2] of Object.entries(context.loaderData)) {
982 if (!(id in results) && loadedMatches.has(id)) {
983 results[id] = { data: data2 };
984 }
985 }
986 return generateSingleFetchResponse(request, build, serverMode, {
987 result: results,
988 headers,
989 status: context.statusCode
990 });
991 }
992}
993function generateSingleFetchResponse(request, build, serverMode, {
994 result,
995 headers,
996 status
997}) {
998 let resultHeaders = new Headers(headers);
999 resultHeaders.set("X-Remix-Response", "yes");
1000 if (SERVER_NO_BODY_STATUS_CODES.has(status)) {
1001 return new Response(null, { status, headers: resultHeaders });
1002 }
1003 resultHeaders.set("Content-Type", "text/x-script");
1004 resultHeaders.delete("Content-Length");
1005 return new Response(
1006 encodeViaTurboStream(
1007 result,
1008 request.signal,
1009 build.entry.module.streamTimeout,
1010 serverMode
1011 ),
1012 {
1013 status: status || 200,
1014 headers: resultHeaders
1015 }
1016 );
1017}
1018function generateSingleFetchRedirectResponse(redirectResponse, request, build, serverMode) {
1019 let redirect2 = getSingleFetchRedirect(
1020 redirectResponse.status,
1021 redirectResponse.headers,
1022 build.basename
1023 );
1024 let headers = new Headers(redirectResponse.headers);
1025 headers.delete("Location");
1026 headers.set("Content-Type", "text/x-script");
1027 return generateSingleFetchResponse(request, build, serverMode, {
1028 result: request.method === "GET" ? { [_chunk54KWOGSJjs.SingleFetchRedirectSymbol]: redirect2 } : redirect2,
1029 headers,
1030 status: _chunk54KWOGSJjs.SINGLE_FETCH_REDIRECT_STATUS
1031 });
1032}
1033function getSingleFetchRedirect(status, headers, basename) {
1034 let redirect2 = headers.get("Location");
1035 if (basename) {
1036 redirect2 = _chunk54KWOGSJjs.stripBasename.call(void 0, redirect2, basename) || redirect2;
1037 }
1038 return {
1039 redirect: redirect2,
1040 status,
1041 revalidate: (
1042 // Technically X-Remix-Revalidate isn't needed here - that was an implementation
1043 // detail of ?_data requests as our way to tell the front end to revalidate when
1044 // we didn't have a response body to include that information in.
1045 // With single fetch, we tell the front end via this revalidate boolean field.
1046 // However, we're respecting it for now because it may be something folks have
1047 // used in their own responses
1048 // TODO(v3): Consider removing or making this official public API
1049 headers.has("X-Remix-Revalidate") || headers.has("Set-Cookie")
1050 ),
1051 reload: headers.has("X-Remix-Reload-Document"),
1052 replace: headers.has("X-Remix-Replace")
1053 };
1054}
1055function encodeViaTurboStream(data2, requestSignal, streamTimeout, serverMode) {
1056 let controller = new AbortController();
1057 let timeoutId = setTimeout(
1058 () => controller.abort(new Error("Server Timeout")),
1059 typeof streamTimeout === "number" ? streamTimeout : 4950
1060 );
1061 requestSignal.addEventListener("abort", () => clearTimeout(timeoutId));
1062 return _chunk54KWOGSJjs.encode.call(void 0, data2, {
1063 signal: controller.signal,
1064 plugins: [
1065 (value) => {
1066 if (value instanceof Error) {
1067 let { name, message, stack } = serverMode === "production" /* Production */ ? sanitizeError(value, serverMode) : value;
1068 return ["SanitizedError", name, message, stack];
1069 }
1070 if (value instanceof _chunk54KWOGSJjs.ErrorResponseImpl) {
1071 let { data: data3, status, statusText } = value;
1072 return ["ErrorResponse", data3, status, statusText];
1073 }
1074 if (value && typeof value === "object" && _chunk54KWOGSJjs.SingleFetchRedirectSymbol in value) {
1075 return ["SingleFetchRedirect", value[_chunk54KWOGSJjs.SingleFetchRedirectSymbol]];
1076 }
1077 }
1078 ],
1079 postPlugins: [
1080 (value) => {
1081 if (!value) return;
1082 if (typeof value !== "object") return;
1083 return [
1084 "SingleFetchClassInstance",
1085 Object.fromEntries(Object.entries(value))
1086 ];
1087 },
1088 () => ["SingleFetchFallback"]
1089 ]
1090 });
1091}
1092
1093// lib/server-runtime/server.ts
1094function derive(build, mode) {
1095 let routes = createRoutes(build.routes);
1096 let dataRoutes = createStaticHandlerDataRoutes(build.routes, build.future);
1097 let serverMode = isServerMode(mode) ? mode : "production" /* Production */;
1098 let staticHandler = _chunk54KWOGSJjs.createStaticHandler.call(void 0, dataRoutes, {
1099 basename: build.basename,
1100 unstable_instrumentations: build.entry.module.unstable_instrumentations
1101 });
1102 let errorHandler = build.entry.module.handleError || ((error, { request }) => {
1103 if (serverMode !== "test" /* Test */ && !request.signal.aborted) {
1104 console.error(
1105 // @ts-expect-error This is "private" from users but intended for internal use
1106 _chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, error) && error.error ? error.error : error
1107 );
1108 }
1109 });
1110 let requestHandler = async (request, initialContext) => {
1111 let params = {};
1112 let loadContext;
1113 let handleError = (error) => {
1114 if (mode === "development" /* Development */) {
1115 _optionalChain([getDevServerHooks, 'call', _7 => _7(), 'optionalAccess', _8 => _8.processRequestError, 'optionalCall', _9 => _9(error)]);
1116 }
1117 errorHandler(error, {
1118 context: loadContext,
1119 params,
1120 request
1121 });
1122 };
1123 if (build.future.v8_middleware) {
1124 if (initialContext && !(initialContext instanceof _chunk54KWOGSJjs.RouterContextProvider)) {
1125 let error = new Error(
1126 "Invalid `context` value provided to `handleRequest`. When middleware is enabled you must return an instance of `RouterContextProvider` from your `getLoadContext` function."
1127 );
1128 handleError(error);
1129 return returnLastResortErrorResponse(error, serverMode);
1130 }
1131 loadContext = initialContext || new (0, _chunk54KWOGSJjs.RouterContextProvider)();
1132 } else {
1133 loadContext = initialContext || {};
1134 }
1135 let url = new URL(request.url);
1136 let normalizedBasename = build.basename || "/";
1137 let normalizedPath = url.pathname;
1138 if (_chunk54KWOGSJjs.stripBasename.call(void 0, normalizedPath, normalizedBasename) === "/_root.data") {
1139 normalizedPath = normalizedBasename;
1140 } else if (normalizedPath.endsWith(".data")) {
1141 normalizedPath = normalizedPath.replace(/\.data$/, "");
1142 }
1143 if (_chunk54KWOGSJjs.stripBasename.call(void 0, normalizedPath, normalizedBasename) !== "/" && normalizedPath.endsWith("/")) {
1144 normalizedPath = normalizedPath.slice(0, -1);
1145 }
1146 let isSpaMode = getBuildTimeHeader(request, "X-React-Router-SPA-Mode") === "yes";
1147 if (!build.ssr) {
1148 let decodedPath = decodeURI(normalizedPath);
1149 if (normalizedBasename !== "/") {
1150 let strippedPath = _chunk54KWOGSJjs.stripBasename.call(void 0, decodedPath, normalizedBasename);
1151 if (strippedPath == null) {
1152 errorHandler(
1153 new (0, _chunk54KWOGSJjs.ErrorResponseImpl)(
1154 404,
1155 "Not Found",
1156 `Refusing to prerender the \`${decodedPath}\` path because it does not start with the basename \`${normalizedBasename}\``
1157 ),
1158 {
1159 context: loadContext,
1160 params,
1161 request
1162 }
1163 );
1164 return new Response("Not Found", {
1165 status: 404,
1166 statusText: "Not Found"
1167 });
1168 }
1169 decodedPath = strippedPath;
1170 }
1171 if (build.prerender.length === 0) {
1172 isSpaMode = true;
1173 } else if (!build.prerender.includes(decodedPath) && !build.prerender.includes(decodedPath + "/")) {
1174 if (url.pathname.endsWith(".data")) {
1175 errorHandler(
1176 new (0, _chunk54KWOGSJjs.ErrorResponseImpl)(
1177 404,
1178 "Not Found",
1179 `Refusing to SSR the path \`${decodedPath}\` because \`ssr:false\` is set and the path is not included in the \`prerender\` config, so in production the path will be a 404.`
1180 ),
1181 {
1182 context: loadContext,
1183 params,
1184 request
1185 }
1186 );
1187 return new Response("Not Found", {
1188 status: 404,
1189 statusText: "Not Found"
1190 });
1191 } else {
1192 isSpaMode = true;
1193 }
1194 }
1195 }
1196 let manifestUrl = _chunk54KWOGSJjs.getManifestPath.call(void 0,
1197 build.routeDiscovery.manifestPath,
1198 normalizedBasename
1199 );
1200 if (url.pathname === manifestUrl) {
1201 try {
1202 let res = await handleManifestRequest(build, routes, url);
1203 return res;
1204 } catch (e) {
1205 handleError(e);
1206 return new Response("Unknown Server Error", { status: 500 });
1207 }
1208 }
1209 let matches = matchServerRoutes(routes, normalizedPath, build.basename);
1210 if (matches && matches.length > 0) {
1211 Object.assign(params, matches[0].params);
1212 }
1213 let response;
1214 if (url.pathname.endsWith(".data")) {
1215 let handlerUrl = new URL(request.url);
1216 handlerUrl.pathname = normalizedPath;
1217 let singleFetchMatches = matchServerRoutes(
1218 routes,
1219 handlerUrl.pathname,
1220 build.basename
1221 );
1222 response = await handleSingleFetchRequest(
1223 serverMode,
1224 build,
1225 staticHandler,
1226 request,
1227 handlerUrl,
1228 loadContext,
1229 handleError
1230 );
1231 if (_chunk54KWOGSJjs.isRedirectResponse.call(void 0, response)) {
1232 response = generateSingleFetchRedirectResponse(
1233 response,
1234 request,
1235 build,
1236 serverMode
1237 );
1238 }
1239 if (build.entry.module.handleDataRequest) {
1240 response = await build.entry.module.handleDataRequest(response, {
1241 context: loadContext,
1242 params: singleFetchMatches ? singleFetchMatches[0].params : {},
1243 request
1244 });
1245 if (_chunk54KWOGSJjs.isRedirectResponse.call(void 0, response)) {
1246 response = generateSingleFetchRedirectResponse(
1247 response,
1248 request,
1249 build,
1250 serverMode
1251 );
1252 }
1253 }
1254 } else if (!isSpaMode && matches && matches[matches.length - 1].route.module.default == null && matches[matches.length - 1].route.module.ErrorBoundary == null) {
1255 response = await handleResourceRequest(
1256 serverMode,
1257 build,
1258 staticHandler,
1259 matches.slice(-1)[0].route.id,
1260 request,
1261 loadContext,
1262 handleError
1263 );
1264 } else {
1265 let { pathname } = url;
1266 let criticalCss = void 0;
1267 if (build.unstable_getCriticalCss) {
1268 criticalCss = await build.unstable_getCriticalCss({ pathname });
1269 } else if (mode === "development" /* Development */ && _optionalChain([getDevServerHooks, 'call', _10 => _10(), 'optionalAccess', _11 => _11.getCriticalCss])) {
1270 criticalCss = await _optionalChain([getDevServerHooks, 'call', _12 => _12(), 'optionalAccess', _13 => _13.getCriticalCss, 'optionalCall', _14 => _14(pathname)]);
1271 }
1272 response = await handleDocumentRequest(
1273 serverMode,
1274 build,
1275 staticHandler,
1276 request,
1277 loadContext,
1278 handleError,
1279 isSpaMode,
1280 criticalCss
1281 );
1282 }
1283 if (request.method === "HEAD") {
1284 return new Response(null, {
1285 headers: response.headers,
1286 status: response.status,
1287 statusText: response.statusText
1288 });
1289 }
1290 return response;
1291 };
1292 if (build.entry.module.unstable_instrumentations) {
1293 requestHandler = _chunk54KWOGSJjs.instrumentHandler.call(void 0,
1294 requestHandler,
1295 build.entry.module.unstable_instrumentations.map((i) => i.handler).filter(Boolean)
1296 );
1297 }
1298 return {
1299 routes,
1300 dataRoutes,
1301 serverMode,
1302 staticHandler,
1303 errorHandler,
1304 requestHandler
1305 };
1306}
1307var createRequestHandler = (build, mode) => {
1308 let _build;
1309 let routes;
1310 let serverMode;
1311 let staticHandler;
1312 let errorHandler;
1313 let _requestHandler;
1314 return async function requestHandler(request, initialContext) {
1315 _build = typeof build === "function" ? await build() : build;
1316 if (typeof build === "function") {
1317 let derived = derive(_build, mode);
1318 routes = derived.routes;
1319 serverMode = derived.serverMode;
1320 staticHandler = derived.staticHandler;
1321 errorHandler = derived.errorHandler;
1322 _requestHandler = derived.requestHandler;
1323 } else if (!routes || !serverMode || !staticHandler || !errorHandler || !_requestHandler) {
1324 let derived = derive(_build, mode);
1325 routes = derived.routes;
1326 serverMode = derived.serverMode;
1327 staticHandler = derived.staticHandler;
1328 errorHandler = derived.errorHandler;
1329 _requestHandler = derived.requestHandler;
1330 }
1331 return _requestHandler(request, initialContext);
1332 };
1333};
1334async function handleManifestRequest(build, routes, url) {
1335 if (build.assets.version !== url.searchParams.get("version")) {
1336 return new Response(null, {
1337 status: 204,
1338 headers: {
1339 "X-Remix-Reload-Document": "true"
1340 }
1341 });
1342 }
1343 let patches = {};
1344 if (url.searchParams.has("paths")) {
1345 let paths = /* @__PURE__ */ new Set();
1346 let pathParam = url.searchParams.get("paths") || "";
1347 let requestedPaths = pathParam.split(",").filter(Boolean);
1348 requestedPaths.forEach((path) => {
1349 if (!path.startsWith("/")) {
1350 path = `/${path}`;
1351 }
1352 let segments = path.split("/").slice(1);
1353 segments.forEach((_, i) => {
1354 let partialPath = segments.slice(0, i + 1).join("/");
1355 paths.add(`/${partialPath}`);
1356 });
1357 });
1358 for (let path of paths) {
1359 let matches = matchServerRoutes(routes, path, build.basename);
1360 if (matches) {
1361 for (let match of matches) {
1362 let routeId = match.route.id;
1363 let route = build.assets.routes[routeId];
1364 if (route) {
1365 patches[routeId] = route;
1366 }
1367 }
1368 }
1369 }
1370 return Response.json(patches, {
1371 headers: {
1372 "Cache-Control": "public, max-age=31536000, immutable"
1373 }
1374 });
1375 }
1376 return new Response("Invalid Request", { status: 400 });
1377}
1378async function handleSingleFetchRequest(serverMode, build, staticHandler, request, handlerUrl, loadContext, handleError) {
1379 let response = request.method !== "GET" ? await singleFetchAction(
1380 build,
1381 serverMode,
1382 staticHandler,
1383 request,
1384 handlerUrl,
1385 loadContext,
1386 handleError
1387 ) : await singleFetchLoaders(
1388 build,
1389 serverMode,
1390 staticHandler,
1391 request,
1392 handlerUrl,
1393 loadContext,
1394 handleError
1395 );
1396 return response;
1397}
1398async function handleDocumentRequest(serverMode, build, staticHandler, request, loadContext, handleError, isSpaMode, criticalCss) {
1399 try {
1400 let result = await staticHandler.query(request, {
1401 requestContext: loadContext,
1402 generateMiddlewareResponse: build.future.v8_middleware ? async (query) => {
1403 try {
1404 let innerResult = await query(request);
1405 if (!_chunk54KWOGSJjs.isResponse.call(void 0, innerResult)) {
1406 innerResult = await renderHtml(innerResult, isSpaMode);
1407 }
1408 return innerResult;
1409 } catch (error) {
1410 handleError(error);
1411 return new Response(null, { status: 500 });
1412 }
1413 } : void 0
1414 });
1415 if (!_chunk54KWOGSJjs.isResponse.call(void 0, result)) {
1416 result = await renderHtml(result, isSpaMode);
1417 }
1418 return result;
1419 } catch (error) {
1420 handleError(error);
1421 return new Response(null, { status: 500 });
1422 }
1423 async function renderHtml(context, isSpaMode2) {
1424 let headers = getDocumentHeaders(context, build);
1425 if (SERVER_NO_BODY_STATUS_CODES.has(context.statusCode)) {
1426 return new Response(null, { status: context.statusCode, headers });
1427 }
1428 if (context.errors) {
1429 Object.values(context.errors).forEach((err) => {
1430 if (!_chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, err) || err.error) {
1431 handleError(err);
1432 }
1433 });
1434 context.errors = sanitizeErrors(context.errors, serverMode);
1435 }
1436 let state = {
1437 loaderData: context.loaderData,
1438 actionData: context.actionData,
1439 errors: serializeErrors(context.errors, serverMode)
1440 };
1441 let baseServerHandoff = {
1442 basename: build.basename,
1443 future: build.future,
1444 routeDiscovery: build.routeDiscovery,
1445 ssr: build.ssr,
1446 isSpaMode: isSpaMode2
1447 };
1448 let entryContext = {
1449 manifest: build.assets,
1450 routeModules: createEntryRouteModules(build.routes),
1451 staticHandlerContext: context,
1452 criticalCss,
1453 serverHandoffString: createServerHandoffString({
1454 ...baseServerHandoff,
1455 criticalCss
1456 }),
1457 serverHandoffStream: encodeViaTurboStream(
1458 state,
1459 request.signal,
1460 build.entry.module.streamTimeout,
1461 serverMode
1462 ),
1463 renderMeta: {},
1464 future: build.future,
1465 ssr: build.ssr,
1466 routeDiscovery: build.routeDiscovery,
1467 isSpaMode: isSpaMode2,
1468 serializeError: (err) => serializeError(err, serverMode)
1469 };
1470 let handleDocumentRequestFunction = build.entry.module.default;
1471 try {
1472 return await handleDocumentRequestFunction(
1473 request,
1474 context.statusCode,
1475 headers,
1476 entryContext,
1477 loadContext
1478 );
1479 } catch (error) {
1480 handleError(error);
1481 let errorForSecondRender = error;
1482 if (_chunk54KWOGSJjs.isResponse.call(void 0, error)) {
1483 try {
1484 let data2 = await unwrapResponse(error);
1485 errorForSecondRender = new (0, _chunk54KWOGSJjs.ErrorResponseImpl)(
1486 error.status,
1487 error.statusText,
1488 data2
1489 );
1490 } catch (e) {
1491 }
1492 }
1493 context = _chunk54KWOGSJjs.getStaticContextFromError.call(void 0,
1494 staticHandler.dataRoutes,
1495 context,
1496 errorForSecondRender
1497 );
1498 if (context.errors) {
1499 context.errors = sanitizeErrors(context.errors, serverMode);
1500 }
1501 let state2 = {
1502 loaderData: context.loaderData,
1503 actionData: context.actionData,
1504 errors: serializeErrors(context.errors, serverMode)
1505 };
1506 entryContext = {
1507 ...entryContext,
1508 staticHandlerContext: context,
1509 serverHandoffString: createServerHandoffString(baseServerHandoff),
1510 serverHandoffStream: encodeViaTurboStream(
1511 state2,
1512 request.signal,
1513 build.entry.module.streamTimeout,
1514 serverMode
1515 ),
1516 renderMeta: {}
1517 };
1518 try {
1519 return await handleDocumentRequestFunction(
1520 request,
1521 context.statusCode,
1522 headers,
1523 entryContext,
1524 loadContext
1525 );
1526 } catch (error2) {
1527 handleError(error2);
1528 return returnLastResortErrorResponse(error2, serverMode);
1529 }
1530 }
1531 }
1532}
1533async function handleResourceRequest(serverMode, build, staticHandler, routeId, request, loadContext, handleError) {
1534 try {
1535 let result = await staticHandler.queryRoute(request, {
1536 routeId,
1537 requestContext: loadContext,
1538 generateMiddlewareResponse: build.future.v8_middleware ? async (queryRoute) => {
1539 try {
1540 let innerResult = await queryRoute(request);
1541 return handleQueryRouteResult(innerResult);
1542 } catch (error) {
1543 return handleQueryRouteError(error);
1544 }
1545 } : void 0
1546 });
1547 return handleQueryRouteResult(result);
1548 } catch (error) {
1549 return handleQueryRouteError(error);
1550 }
1551 function handleQueryRouteResult(result) {
1552 if (_chunk54KWOGSJjs.isResponse.call(void 0, result)) {
1553 return result;
1554 }
1555 if (typeof result === "string") {
1556 return new Response(result);
1557 }
1558 return Response.json(result);
1559 }
1560 function handleQueryRouteError(error) {
1561 if (_chunk54KWOGSJjs.isResponse.call(void 0, error)) {
1562 return error;
1563 }
1564 if (_chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, error)) {
1565 handleError(error);
1566 return errorResponseToJson(error, serverMode);
1567 }
1568 if (error instanceof Error && error.message === "Expected a response from queryRoute") {
1569 let newError = new Error(
1570 "Expected a Response to be returned from resource route handler"
1571 );
1572 handleError(newError);
1573 return returnLastResortErrorResponse(newError, serverMode);
1574 }
1575 handleError(error);
1576 return returnLastResortErrorResponse(error, serverMode);
1577 }
1578}
1579function errorResponseToJson(errorResponse, serverMode) {
1580 return Response.json(
1581 serializeError(
1582 // @ts-expect-error This is "private" from users but intended for internal use
1583 errorResponse.error || new Error("Unexpected Server Error"),
1584 serverMode
1585 ),
1586 {
1587 status: errorResponse.status,
1588 statusText: errorResponse.statusText
1589 }
1590 );
1591}
1592function returnLastResortErrorResponse(error, serverMode) {
1593 let message = "Unexpected Server Error";
1594 if (serverMode !== "production" /* Production */) {
1595 message += `
1596
1597${String(error)}`;
1598 }
1599 return new Response(message, {
1600 status: 500,
1601 headers: {
1602 "Content-Type": "text/plain"
1603 }
1604 });
1605}
1606function unwrapResponse(response) {
1607 let contentType = response.headers.get("Content-Type");
1608 return contentType && /\bapplication\/json\b/.test(contentType) ? response.body == null ? null : response.json() : response.text();
1609}
1610
1611// lib/server-runtime/sessions.ts
1612function flash(name) {
1613 return `__flash_${name}__`;
1614}
1615var createSession = (initialData = {}, id = "") => {
1616 let map = new Map(Object.entries(initialData));
1617 return {
1618 get id() {
1619 return id;
1620 },
1621 get data() {
1622 return Object.fromEntries(map);
1623 },
1624 has(name) {
1625 return map.has(name) || map.has(flash(name));
1626 },
1627 get(name) {
1628 if (map.has(name)) return map.get(name);
1629 let flashName = flash(name);
1630 if (map.has(flashName)) {
1631 let value = map.get(flashName);
1632 map.delete(flashName);
1633 return value;
1634 }
1635 return void 0;
1636 },
1637 set(name, value) {
1638 map.set(name, value);
1639 },
1640 flash(name, value) {
1641 map.set(flash(name), value);
1642 },
1643 unset(name) {
1644 map.delete(name);
1645 }
1646 };
1647};
1648var isSession = (object) => {
1649 return object != null && typeof object.id === "string" && typeof object.data !== "undefined" && typeof object.has === "function" && typeof object.get === "function" && typeof object.set === "function" && typeof object.flash === "function" && typeof object.unset === "function";
1650};
1651function createSessionStorage({
1652 cookie: cookieArg,
1653 createData,
1654 readData,
1655 updateData,
1656 deleteData
1657}) {
1658 let cookie = isCookie(cookieArg) ? cookieArg : createCookie(_optionalChain([cookieArg, 'optionalAccess', _15 => _15.name]) || "__session", cookieArg);
1659 warnOnceAboutSigningSessionCookie(cookie);
1660 return {
1661 async getSession(cookieHeader, options) {
1662 let id = cookieHeader && await cookie.parse(cookieHeader, options);
1663 let data2 = id && await readData(id);
1664 return createSession(data2 || {}, id || "");
1665 },
1666 async commitSession(session, options) {
1667 let { id, data: data2 } = session;
1668 let expires = _optionalChain([options, 'optionalAccess', _16 => _16.maxAge]) != null ? new Date(Date.now() + options.maxAge * 1e3) : _optionalChain([options, 'optionalAccess', _17 => _17.expires]) != null ? options.expires : cookie.expires;
1669 if (id) {
1670 await updateData(id, data2, expires);
1671 } else {
1672 id = await createData(data2, expires);
1673 }
1674 return cookie.serialize(id, options);
1675 },
1676 async destroySession(session, options) {
1677 await deleteData(session.id);
1678 return cookie.serialize("", {
1679 ...options,
1680 maxAge: void 0,
1681 expires: /* @__PURE__ */ new Date(0)
1682 });
1683 }
1684 };
1685}
1686function warnOnceAboutSigningSessionCookie(cookie) {
1687 _chunk54KWOGSJjs.warnOnce.call(void 0,
1688 cookie.isSigned,
1689 `The "${cookie.name}" cookie is not signed, but session cookies should be signed to prevent tampering on the client before they are sent back to the server. See https://reactrouter.com/explanation/sessions-and-cookies#signing-cookies for more information.`
1690 );
1691}
1692
1693// lib/server-runtime/sessions/cookieStorage.ts
1694function createCookieSessionStorage({ cookie: cookieArg } = {}) {
1695 let cookie = isCookie(cookieArg) ? cookieArg : createCookie(_optionalChain([cookieArg, 'optionalAccess', _18 => _18.name]) || "__session", cookieArg);
1696 warnOnceAboutSigningSessionCookie(cookie);
1697 return {
1698 async getSession(cookieHeader, options) {
1699 return createSession(
1700 cookieHeader && await cookie.parse(cookieHeader, options) || {}
1701 );
1702 },
1703 async commitSession(session, options) {
1704 let serializedCookie = await cookie.serialize(session.data, options);
1705 if (serializedCookie.length > 4096) {
1706 throw new Error(
1707 "Cookie length will exceed browser maximum. Length: " + serializedCookie.length
1708 );
1709 }
1710 return serializedCookie;
1711 },
1712 async destroySession(_session, options) {
1713 return cookie.serialize("", {
1714 ...options,
1715 maxAge: void 0,
1716 expires: /* @__PURE__ */ new Date(0)
1717 });
1718 }
1719 };
1720}
1721
1722// lib/server-runtime/sessions/memoryStorage.ts
1723function createMemorySessionStorage({ cookie } = {}) {
1724 let map = /* @__PURE__ */ new Map();
1725 return createSessionStorage({
1726 cookie,
1727 async createData(data2, expires) {
1728 let id = Math.random().toString(36).substring(2, 10);
1729 map.set(id, { data: data2, expires });
1730 return id;
1731 },
1732 async readData(id) {
1733 if (map.has(id)) {
1734 let { data: data2, expires } = map.get(id);
1735 if (!expires || expires > /* @__PURE__ */ new Date()) {
1736 return data2;
1737 }
1738 if (expires) map.delete(id);
1739 }
1740 return null;
1741 },
1742 async updateData(id, data2, expires) {
1743 map.set(id, { data: data2, expires });
1744 },
1745 async deleteData(id) {
1746 map.delete(id);
1747 }
1748 });
1749}
1750
1751// lib/href.ts
1752function href(path, ...args) {
1753 let params = args[0];
1754 let result = trimTrailingSplat(path).replace(
1755 /\/:([\w-]+)(\?)?/g,
1756 // same regex as in .\router\utils.ts: compilePath().
1757 (_, param, questionMark) => {
1758 const isRequired = questionMark === void 0;
1759 const value = _optionalChain([params, 'optionalAccess', _19 => _19[param]]);
1760 if (isRequired && value === void 0) {
1761 throw new Error(
1762 `Path '${path}' requires param '${param}' but it was not provided`
1763 );
1764 }
1765 return value === void 0 ? "" : "/" + value;
1766 }
1767 );
1768 if (path.endsWith("*")) {
1769 const value = _optionalChain([params, 'optionalAccess', _20 => _20["*"]]);
1770 if (value !== void 0) {
1771 result += "/" + value;
1772 }
1773 }
1774 return result || "/";
1775}
1776function trimTrailingSplat(path) {
1777 let i = path.length - 1;
1778 let char = path[i];
1779 if (char !== "*" && char !== "/") return path;
1780 i--;
1781 for (; i >= 0; i--) {
1782 if (path[i] !== "/") break;
1783 }
1784 return path.slice(0, i + 1);
1785}
1786
1787// lib/rsc/server.ssr.tsx
1788
1789
1790// lib/rsc/html-stream/server.ts
1791var encoder2 = new TextEncoder();
1792var trailer = "</body></html>";
1793function injectRSCPayload(rscStream) {
1794 let decoder = new TextDecoder();
1795 let resolveFlightDataPromise;
1796 let flightDataPromise = new Promise(
1797 (resolve) => resolveFlightDataPromise = resolve
1798 );
1799 let startedRSC = false;
1800 let buffered = [];
1801 let timeout = null;
1802 function flushBufferedChunks(controller) {
1803 for (let chunk of buffered) {
1804 let buf = decoder.decode(chunk, { stream: true });
1805 if (buf.endsWith(trailer)) {
1806 buf = buf.slice(0, -trailer.length);
1807 }
1808 controller.enqueue(encoder2.encode(buf));
1809 }
1810 buffered.length = 0;
1811 timeout = null;
1812 }
1813 return new TransformStream({
1814 transform(chunk, controller) {
1815 buffered.push(chunk);
1816 if (timeout) {
1817 return;
1818 }
1819 timeout = setTimeout(async () => {
1820 flushBufferedChunks(controller);
1821 if (!startedRSC) {
1822 startedRSC = true;
1823 writeRSCStream(rscStream, controller).catch((err) => controller.error(err)).then(resolveFlightDataPromise);
1824 }
1825 }, 0);
1826 },
1827 async flush(controller) {
1828 await flightDataPromise;
1829 if (timeout) {
1830 clearTimeout(timeout);
1831 flushBufferedChunks(controller);
1832 }
1833 controller.enqueue(encoder2.encode("</body></html>"));
1834 }
1835 });
1836}
1837async function writeRSCStream(rscStream, controller) {
1838 let decoder = new TextDecoder("utf-8", { fatal: true });
1839 const reader = rscStream.getReader();
1840 try {
1841 let read;
1842 while ((read = await reader.read()) && !read.done) {
1843 const chunk = read.value;
1844 try {
1845 writeChunk(
1846 JSON.stringify(decoder.decode(chunk, { stream: true })),
1847 controller
1848 );
1849 } catch (err) {
1850 let base64 = JSON.stringify(btoa(String.fromCodePoint(...chunk)));
1851 writeChunk(
1852 `Uint8Array.from(atob(${base64}), m => m.codePointAt(0))`,
1853 controller
1854 );
1855 }
1856 }
1857 } finally {
1858 reader.releaseLock();
1859 }
1860 let remaining = decoder.decode();
1861 if (remaining.length) {
1862 writeChunk(JSON.stringify(remaining), controller);
1863 }
1864}
1865function writeChunk(chunk, controller) {
1866 controller.enqueue(
1867 encoder2.encode(
1868 `<script>${escapeScript(
1869 `(self.__FLIGHT_DATA||=[]).push(${chunk})`
1870 )}</script>`
1871 )
1872 );
1873}
1874function escapeScript(script) {
1875 return script.replace(/<!--/g, "<\\!--").replace(/<\/(script)/gi, "</\\$1");
1876}
1877
1878// lib/rsc/server.ssr.tsx
1879var REACT_USE = "use";
1880var useImpl = React3[REACT_USE];
1881function useSafe(promise) {
1882 if (useImpl) {
1883 return useImpl(promise);
1884 }
1885 throw new Error("React Router v7 requires React 19+ for RSC features.");
1886}
1887async function routeRSCServerRequest({
1888 request,
1889 fetchServer,
1890 createFromReadableStream,
1891 renderHTML,
1892 hydrate = true
1893}) {
1894 const url = new URL(request.url);
1895 const isDataRequest = isReactServerRequest(url);
1896 const respondWithRSCPayload = isDataRequest || isManifestRequest(url) || request.headers.has("rsc-action-id");
1897 const serverResponse = await fetchServer(request);
1898 if (respondWithRSCPayload || serverResponse.headers.get("React-Router-Resource") === "true") {
1899 return serverResponse;
1900 }
1901 if (!serverResponse.body) {
1902 throw new Error("Missing body in server response");
1903 }
1904 const detectRedirectResponse = serverResponse.clone();
1905 let serverResponseB = null;
1906 if (hydrate) {
1907 serverResponseB = serverResponse.clone();
1908 }
1909 const body = serverResponse.body;
1910 let buffer;
1911 let streamControllers = [];
1912 const createStream = () => {
1913 if (!buffer) {
1914 buffer = [];
1915 return body.pipeThrough(
1916 new TransformStream({
1917 transform(chunk, controller) {
1918 buffer.push(chunk);
1919 controller.enqueue(chunk);
1920 streamControllers.forEach((c) => c.enqueue(chunk));
1921 },
1922 flush() {
1923 streamControllers.forEach((c) => c.close());
1924 streamControllers = [];
1925 }
1926 })
1927 );
1928 }
1929 return new ReadableStream({
1930 start(controller) {
1931 buffer.forEach((chunk) => controller.enqueue(chunk));
1932 streamControllers.push(controller);
1933 }
1934 });
1935 };
1936 let deepestRenderedBoundaryId = null;
1937 const getPayload = () => {
1938 const payloadPromise = Promise.resolve(
1939 createFromReadableStream(createStream())
1940 );
1941 return Object.defineProperties(payloadPromise, {
1942 _deepestRenderedBoundaryId: {
1943 get() {
1944 return deepestRenderedBoundaryId;
1945 },
1946 set(boundaryId) {
1947 deepestRenderedBoundaryId = boundaryId;
1948 }
1949 },
1950 formState: {
1951 get() {
1952 return payloadPromise.then(
1953 (payload) => payload.type === "render" ? payload.formState : void 0
1954 );
1955 }
1956 }
1957 });
1958 };
1959 try {
1960 if (!detectRedirectResponse.body) {
1961 throw new Error("Failed to clone server response");
1962 }
1963 const payload = await createFromReadableStream(
1964 detectRedirectResponse.body
1965 );
1966 if (serverResponse.status === _chunk54KWOGSJjs.SINGLE_FETCH_REDIRECT_STATUS && payload.type === "redirect") {
1967 const headers2 = new Headers(serverResponse.headers);
1968 headers2.delete("Content-Encoding");
1969 headers2.delete("Content-Length");
1970 headers2.delete("Content-Type");
1971 headers2.delete("X-Remix-Response");
1972 headers2.set("Location", payload.location);
1973 return new Response(_optionalChain([serverResponseB, 'optionalAccess', _21 => _21.body]) || "", {
1974 headers: headers2,
1975 status: payload.status,
1976 statusText: serverResponse.statusText
1977 });
1978 }
1979 const html = await renderHTML(getPayload);
1980 const headers = new Headers(serverResponse.headers);
1981 headers.set("Content-Type", "text/html; charset=utf-8");
1982 if (!hydrate) {
1983 return new Response(html, {
1984 status: serverResponse.status,
1985 headers
1986 });
1987 }
1988 if (!_optionalChain([serverResponseB, 'optionalAccess', _22 => _22.body])) {
1989 throw new Error("Failed to clone server response");
1990 }
1991 const body2 = html.pipeThrough(injectRSCPayload(serverResponseB.body));
1992 return new Response(body2, {
1993 status: serverResponse.status,
1994 headers
1995 });
1996 } catch (reason) {
1997 if (reason instanceof Response) {
1998 return reason;
1999 }
2000 try {
2001 const status = _chunk54KWOGSJjs.isRouteErrorResponse.call(void 0, reason) ? reason.status : 500;
2002 const html = await renderHTML(() => {
2003 const decoded = Promise.resolve(
2004 createFromReadableStream(createStream())
2005 );
2006 const payloadPromise = decoded.then(
2007 (payload) => Object.assign(payload, {
2008 status,
2009 errors: deepestRenderedBoundaryId ? {
2010 [deepestRenderedBoundaryId]: reason
2011 } : {}
2012 })
2013 );
2014 return Object.defineProperties(payloadPromise, {
2015 _deepestRenderedBoundaryId: {
2016 get() {
2017 return deepestRenderedBoundaryId;
2018 },
2019 set(boundaryId) {
2020 deepestRenderedBoundaryId = boundaryId;
2021 }
2022 },
2023 formState: {
2024 get() {
2025 return payloadPromise.then(
2026 (payload) => payload.type === "render" ? payload.formState : void 0
2027 );
2028 }
2029 }
2030 });
2031 });
2032 const headers = new Headers(serverResponse.headers);
2033 headers.set("Content-Type", "text/html");
2034 if (!hydrate) {
2035 return new Response(html, {
2036 status,
2037 headers
2038 });
2039 }
2040 if (!_optionalChain([serverResponseB, 'optionalAccess', _23 => _23.body])) {
2041 throw new Error("Failed to clone server response");
2042 }
2043 const body2 = html.pipeThrough(injectRSCPayload(serverResponseB.body));
2044 return new Response(body2, {
2045 status,
2046 headers
2047 });
2048 } catch (e2) {
2049 }
2050 throw reason;
2051 }
2052}
2053function RSCStaticRouter({ getPayload }) {
2054 const decoded = getPayload();
2055 const payload = useSafe(decoded);
2056 if (payload.type === "redirect") {
2057 throw new Response(null, {
2058 status: payload.status,
2059 headers: {
2060 Location: payload.location
2061 }
2062 });
2063 }
2064 if (payload.type !== "render") return null;
2065 let patchedLoaderData = { ...payload.loaderData };
2066 for (const match of payload.matches) {
2067 if (_chunk54KWOGSJjs.shouldHydrateRouteLoader.call(void 0,
2068 match.id,
2069 match.clientLoader,
2070 match.hasLoader,
2071 false
2072 ) && (match.hydrateFallbackElement || !match.hasLoader)) {
2073 delete patchedLoaderData[match.id];
2074 }
2075 }
2076 const context = {
2077 get _deepestRenderedBoundaryId() {
2078 return _nullishCoalesce(decoded._deepestRenderedBoundaryId, () => ( null));
2079 },
2080 set _deepestRenderedBoundaryId(boundaryId) {
2081 decoded._deepestRenderedBoundaryId = boundaryId;
2082 },
2083 actionData: payload.actionData,
2084 actionHeaders: {},
2085 basename: payload.basename,
2086 errors: payload.errors,
2087 loaderData: patchedLoaderData,
2088 loaderHeaders: {},
2089 location: payload.location,
2090 statusCode: 200,
2091 matches: payload.matches.map((match) => ({
2092 params: match.params,
2093 pathname: match.pathname,
2094 pathnameBase: match.pathnameBase,
2095 route: {
2096 id: match.id,
2097 action: match.hasAction || !!match.clientAction,
2098 handle: match.handle,
2099 hasErrorBoundary: match.hasErrorBoundary,
2100 loader: match.hasLoader || !!match.clientLoader,
2101 index: match.index,
2102 path: match.path,
2103 shouldRevalidate: match.shouldRevalidate
2104 }
2105 }))
2106 };
2107 const router = _chunkAWUYHSQUjs.createStaticRouter.call(void 0,
2108 payload.matches.reduceRight((previous, match) => {
2109 const route = {
2110 id: match.id,
2111 action: match.hasAction || !!match.clientAction,
2112 element: match.element,
2113 errorElement: match.errorElement,
2114 handle: match.handle,
2115 hasErrorBoundary: !!match.errorElement,
2116 hydrateFallbackElement: match.hydrateFallbackElement,
2117 index: match.index,
2118 loader: match.hasLoader || !!match.clientLoader,
2119 path: match.path,
2120 shouldRevalidate: match.shouldRevalidate
2121 };
2122 if (previous.length > 0) {
2123 route.children = previous;
2124 }
2125 return [route];
2126 }, []),
2127 context
2128 );
2129 const frameworkContext = {
2130 future: {
2131 // These flags have no runtime impact so can always be false. If we add
2132 // flags that drive runtime behavior they'll need to be proxied through.
2133 v8_middleware: false,
2134 unstable_subResourceIntegrity: false
2135 },
2136 isSpaMode: false,
2137 ssr: true,
2138 criticalCss: "",
2139 manifest: {
2140 routes: {},
2141 version: "1",
2142 url: "",
2143 entry: {
2144 module: "",
2145 imports: []
2146 }
2147 },
2148 routeDiscovery: { mode: "lazy", manifestPath: "/__manifest" },
2149 routeModules: _chunk26EFLBGXjs.createRSCRouteModules.call(void 0, payload)
2150 };
2151 return /* @__PURE__ */ React3.createElement(_chunk54KWOGSJjs.RSCRouterContext.Provider, { value: true }, /* @__PURE__ */ React3.createElement(_chunk26EFLBGXjs.RSCRouterGlobalErrorBoundary, { location: payload.location }, /* @__PURE__ */ React3.createElement(_chunk54KWOGSJjs.FrameworkContext.Provider, { value: frameworkContext }, /* @__PURE__ */ React3.createElement(
2152 _chunkAWUYHSQUjs.StaticRouterProvider,
2153 {
2154 context,
2155 router,
2156 hydrate: false,
2157 nonce: payload.nonce
2158 }
2159 ))));
2160}
2161function isReactServerRequest(url) {
2162 return url.pathname.endsWith(".rsc");
2163}
2164function isManifestRequest(url) {
2165 return url.pathname.endsWith(".manifest");
2166}
2167
2168// lib/dom/ssr/errors.ts
2169function deserializeErrors(errors) {
2170 if (!errors) return null;
2171 let entries = Object.entries(errors);
2172 let serialized = {};
2173 for (let [key, val] of entries) {
2174 if (val && val.__type === "RouteErrorResponse") {
2175 serialized[key] = new (0, _chunk54KWOGSJjs.ErrorResponseImpl)(
2176 val.status,
2177 val.statusText,
2178 val.data,
2179 val.internal === true
2180 );
2181 } else if (val && val.__type === "Error") {
2182 if (val.__subType) {
2183 let ErrorConstructor = window[val.__subType];
2184 if (typeof ErrorConstructor === "function") {
2185 try {
2186 let error = new ErrorConstructor(val.message);
2187 error.stack = val.stack;
2188 serialized[key] = error;
2189 } catch (e) {
2190 }
2191 }
2192 }
2193 if (serialized[key] == null) {
2194 let error = new Error(val.message);
2195 error.stack = val.stack;
2196 serialized[key] = error;
2197 }
2198 } else {
2199 serialized[key] = val;
2200 }
2201 }
2202 return serialized;
2203}
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332exports.Await = _chunk54KWOGSJjs.Await; exports.BrowserRouter = _chunkAWUYHSQUjs.BrowserRouter; exports.Form = _chunkAWUYHSQUjs.Form; exports.HashRouter = _chunkAWUYHSQUjs.HashRouter; exports.IDLE_BLOCKER = _chunk54KWOGSJjs.IDLE_BLOCKER; exports.IDLE_FETCHER = _chunk54KWOGSJjs.IDLE_FETCHER; exports.IDLE_NAVIGATION = _chunk54KWOGSJjs.IDLE_NAVIGATION; exports.Link = _chunkAWUYHSQUjs.Link; exports.Links = _chunk54KWOGSJjs.Links; exports.MemoryRouter = _chunk54KWOGSJjs.MemoryRouter; exports.Meta = _chunk54KWOGSJjs.Meta; exports.NavLink = _chunkAWUYHSQUjs.NavLink; exports.Navigate = _chunk54KWOGSJjs.Navigate; exports.NavigationType = _chunk54KWOGSJjs.Action; exports.Outlet = _chunk54KWOGSJjs.Outlet; exports.PrefetchPageLinks = _chunk54KWOGSJjs.PrefetchPageLinks; exports.Route = _chunk54KWOGSJjs.Route; exports.Router = _chunk54KWOGSJjs.Router; exports.RouterContextProvider = _chunk54KWOGSJjs.RouterContextProvider; exports.RouterProvider = _chunk54KWOGSJjs.RouterProvider; exports.Routes = _chunk54KWOGSJjs.Routes; exports.Scripts = _chunk54KWOGSJjs.Scripts; exports.ScrollRestoration = _chunkAWUYHSQUjs.ScrollRestoration; exports.ServerRouter = ServerRouter; exports.StaticRouter = _chunkAWUYHSQUjs.StaticRouter; exports.StaticRouterProvider = _chunkAWUYHSQUjs.StaticRouterProvider; exports.UNSAFE_AwaitContextProvider = _chunk54KWOGSJjs.AwaitContextProvider; exports.UNSAFE_DataRouterContext = _chunk54KWOGSJjs.DataRouterContext; exports.UNSAFE_DataRouterStateContext = _chunk54KWOGSJjs.DataRouterStateContext; exports.UNSAFE_ErrorResponseImpl = _chunk54KWOGSJjs.ErrorResponseImpl; exports.UNSAFE_FetchersContext = _chunk54KWOGSJjs.FetchersContext; exports.UNSAFE_FrameworkContext = _chunk54KWOGSJjs.FrameworkContext; exports.UNSAFE_LocationContext = _chunk54KWOGSJjs.LocationContext; exports.UNSAFE_NavigationContext = _chunk54KWOGSJjs.NavigationContext; exports.UNSAFE_RSCDefaultRootErrorBoundary = _chunk26EFLBGXjs.RSCDefaultRootErrorBoundary; exports.UNSAFE_RemixErrorBoundary = _chunk54KWOGSJjs.RemixErrorBoundary; exports.UNSAFE_RouteContext = _chunk54KWOGSJjs.RouteContext; exports.UNSAFE_ServerMode = ServerMode; exports.UNSAFE_SingleFetchRedirectSymbol = _chunk54KWOGSJjs.SingleFetchRedirectSymbol; exports.UNSAFE_ViewTransitionContext = _chunk54KWOGSJjs.ViewTransitionContext; exports.UNSAFE_WithComponentProps = _chunk54KWOGSJjs.WithComponentProps; exports.UNSAFE_WithErrorBoundaryProps = _chunk54KWOGSJjs.WithErrorBoundaryProps; exports.UNSAFE_WithHydrateFallbackProps = _chunk54KWOGSJjs.WithHydrateFallbackProps; exports.UNSAFE_createBrowserHistory = _chunk54KWOGSJjs.createBrowserHistory; exports.UNSAFE_createClientRoutes = _chunk54KWOGSJjs.createClientRoutes; exports.UNSAFE_createClientRoutesWithHMRRevalidationOptOut = _chunk54KWOGSJjs.createClientRoutesWithHMRRevalidationOptOut; exports.UNSAFE_createRouter = _chunk54KWOGSJjs.createRouter; exports.UNSAFE_decodeViaTurboStream = _chunk54KWOGSJjs.decodeViaTurboStream; exports.UNSAFE_deserializeErrors = deserializeErrors; exports.UNSAFE_getHydrationData = _chunk26EFLBGXjs.getHydrationData; exports.UNSAFE_getPatchRoutesOnNavigationFunction = _chunk54KWOGSJjs.getPatchRoutesOnNavigationFunction; exports.UNSAFE_getTurboStreamSingleFetchDataStrategy = _chunk54KWOGSJjs.getTurboStreamSingleFetchDataStrategy; exports.UNSAFE_hydrationRouteProperties = _chunk54KWOGSJjs.hydrationRouteProperties; exports.UNSAFE_invariant = _chunk54KWOGSJjs.invariant; exports.UNSAFE_mapRouteProperties = _chunk54KWOGSJjs.mapRouteProperties; exports.UNSAFE_shouldHydrateRouteLoader = _chunk54KWOGSJjs.shouldHydrateRouteLoader; exports.UNSAFE_useFogOFWarDiscovery = _chunk54KWOGSJjs.useFogOFWarDiscovery; exports.UNSAFE_useScrollRestoration = _chunkAWUYHSQUjs.useScrollRestoration; exports.UNSAFE_withComponentProps = _chunk54KWOGSJjs.withComponentProps; exports.UNSAFE_withErrorBoundaryProps = _chunk54KWOGSJjs.withErrorBoundaryProps; exports.UNSAFE_withHydrateFallbackProps = _chunk54KWOGSJjs.withHydrateFallbackProps; exports.createBrowserRouter = _chunkAWUYHSQUjs.createBrowserRouter; exports.createContext = _chunk54KWOGSJjs.createContext; exports.createCookie = createCookie; exports.createCookieSessionStorage = createCookieSessionStorage; exports.createHashRouter = _chunkAWUYHSQUjs.createHashRouter; exports.createMemoryRouter = _chunk54KWOGSJjs.createMemoryRouter; exports.createMemorySessionStorage = createMemorySessionStorage; exports.createPath = _chunk54KWOGSJjs.createPath; exports.createRequestHandler = createRequestHandler; exports.createRoutesFromChildren = _chunk54KWOGSJjs.createRoutesFromChildren; exports.createRoutesFromElements = _chunk54KWOGSJjs.createRoutesFromElements; exports.createRoutesStub = createRoutesStub; exports.createSearchParams = _chunkAWUYHSQUjs.createSearchParams; exports.createSession = createSession; exports.createSessionStorage = createSessionStorage; exports.createStaticHandler = _chunkAWUYHSQUjs.createStaticHandler; exports.createStaticRouter = _chunkAWUYHSQUjs.createStaticRouter; exports.data = _chunk54KWOGSJjs.data; exports.generatePath = _chunk54KWOGSJjs.generatePath; exports.href = href; exports.isCookie = isCookie; exports.isRouteErrorResponse = _chunk54KWOGSJjs.isRouteErrorResponse; exports.isSession = isSession; exports.matchPath = _chunk54KWOGSJjs.matchPath; exports.matchRoutes = _chunk54KWOGSJjs.matchRoutes; exports.parsePath = _chunk54KWOGSJjs.parsePath; exports.redirect = _chunk54KWOGSJjs.redirect; exports.redirectDocument = _chunk54KWOGSJjs.redirectDocument; exports.renderMatches = _chunk54KWOGSJjs.renderMatches; exports.replace = _chunk54KWOGSJjs.replace; exports.resolvePath = _chunk54KWOGSJjs.resolvePath; exports.unstable_HistoryRouter = _chunkAWUYHSQUjs.HistoryRouter; exports.unstable_RSCStaticRouter = RSCStaticRouter; exports.unstable_routeRSCServerRequest = routeRSCServerRequest; exports.unstable_setDevServerHooks = setDevServerHooks; exports.unstable_usePrompt = _chunkAWUYHSQUjs.usePrompt; exports.unstable_useRoute = _chunk54KWOGSJjs.useRoute; exports.useActionData = _chunk54KWOGSJjs.useActionData; exports.useAsyncError = _chunk54KWOGSJjs.useAsyncError; exports.useAsyncValue = _chunk54KWOGSJjs.useAsyncValue; exports.useBeforeUnload = _chunkAWUYHSQUjs.useBeforeUnload; exports.useBlocker = _chunk54KWOGSJjs.useBlocker; exports.useFetcher = _chunkAWUYHSQUjs.useFetcher; exports.useFetchers = _chunkAWUYHSQUjs.useFetchers; exports.useFormAction = _chunkAWUYHSQUjs.useFormAction; exports.useHref = _chunk54KWOGSJjs.useHref; exports.useInRouterContext = _chunk54KWOGSJjs.useInRouterContext; exports.useLinkClickHandler = _chunkAWUYHSQUjs.useLinkClickHandler; exports.useLoaderData = _chunk54KWOGSJjs.useLoaderData; exports.useLocation = _chunk54KWOGSJjs.useLocation; exports.useMatch = _chunk54KWOGSJjs.useMatch; exports.useMatches = _chunk54KWOGSJjs.useMatches; exports.useNavigate = _chunk54KWOGSJjs.useNavigate; exports.useNavigation = _chunk54KWOGSJjs.useNavigation; exports.useNavigationType = _chunk54KWOGSJjs.useNavigationType; exports.useOutlet = _chunk54KWOGSJjs.useOutlet; exports.useOutletContext = _chunk54KWOGSJjs.useOutletContext; exports.useParams = _chunk54KWOGSJjs.useParams; exports.useResolvedPath = _chunk54KWOGSJjs.useResolvedPath; exports.useRevalidator = _chunk54KWOGSJjs.useRevalidator; exports.useRouteError = _chunk54KWOGSJjs.useRouteError; exports.useRouteLoaderData = _chunk54KWOGSJjs.useRouteLoaderData; exports.useRoutes = _chunk54KWOGSJjs.useRoutes; exports.useSearchParams = _chunkAWUYHSQUjs.useSearchParams; exports.useSubmit = _chunkAWUYHSQUjs.useSubmit; exports.useViewTransitionState = _chunkAWUYHSQUjs.useViewTransitionState;