@reckona/mreact-router 0.0.179 → 0.0.181
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.
- package/dist/actions.d.ts +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +48 -7
- package/dist/actions.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +59 -18
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +65 -12
- package/dist/build.js.map +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +55 -1
- package/dist/cache.js.map +1 -1
- package/dist/cookies.d.ts.map +1 -1
- package/dist/cookies.js +14 -0
- package/dist/cookies.js.map +1 -1
- package/package.json +11 -11
- package/src/actions.ts +60 -10
- package/src/adapters/cloudflare.ts +105 -41
- package/src/build.ts +93 -30
- package/src/cache.ts +62 -1
- package/src/cookies.ts +14 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { clientManifestAssetPaths } from "../client-manifest-assets.js";
|
|
2
2
|
import { __MREACT_QUERY_STATE_SCRIPT_ID, createQueryClient, dehydrate, installQueryAsyncStorage, isQueryClientScopeUnavailableError, runWithQueryClient, } from "@reckona/mreact-query";
|
|
3
3
|
import { emitRouterLog, logDurationMs, logError, logNow, requestLogFields, } from "../logger.js";
|
|
4
|
+
import { middlewareMatches } from "../middleware.js";
|
|
4
5
|
import { normalizeRoutePath } from "../route-path.js";
|
|
5
6
|
import { contentSecurityPolicy } from "../csp.js";
|
|
6
|
-
import { isNotFoundError } from "../navigation.js";
|
|
7
|
+
import { isNotFoundError, rewriteLocation } from "../navigation.js";
|
|
7
8
|
import { validateRouteMetadata } from "../metadata.js";
|
|
8
9
|
import { routeSecurityHeaders } from "../security-headers.js";
|
|
9
10
|
import { emitRouterDevtoolsEvent } from "./devtools.js";
|
|
10
11
|
import { escapeHtmlAttribute, escapeHtmlText } from "@reckona/mreact-shared/html-escape";
|
|
11
12
|
const clientPrefix = "/_mreact/client/";
|
|
13
|
+
const cloudflareMiddlewareRouteModuleKey = "__middleware__";
|
|
12
14
|
const defaultPrerenderCacheOrigin = "https://mreact.local";
|
|
13
15
|
const defaultPrerenderCachePrefix = "/_mreact/prerender";
|
|
14
16
|
/**
|
|
@@ -75,6 +77,11 @@ export function createCloudflareBuiltRequestHandler(options) {
|
|
|
75
77
|
*/
|
|
76
78
|
export function createCloudflareRouteModuleRenderer(options) {
|
|
77
79
|
return async (request, context) => {
|
|
80
|
+
const middlewareResult = await resolveCloudflareRouteModuleMiddleware(options.modules, request);
|
|
81
|
+
if (middlewareResult.type === "response") {
|
|
82
|
+
return middlewareResult.response;
|
|
83
|
+
}
|
|
84
|
+
request = middlewareResult.request;
|
|
78
85
|
if (context.route.kind !== "server" && isCloudflareNavigationRequest(request)) {
|
|
79
86
|
return cloudflareDocumentReloadNavigationResponse();
|
|
80
87
|
}
|
|
@@ -171,6 +178,28 @@ export function createCloudflareRouteModuleRenderer(options) {
|
|
|
171
178
|
}), request, metadata);
|
|
172
179
|
};
|
|
173
180
|
}
|
|
181
|
+
async function resolveCloudflareRouteModuleMiddleware(modules, request) {
|
|
182
|
+
const module = (await loadCloudflareRouteModule(modules, cloudflareMiddlewareRouteModuleKey));
|
|
183
|
+
if (module === undefined || !middlewareMatches(module.config, new URL(request.url).pathname)) {
|
|
184
|
+
return { request, type: "continue" };
|
|
185
|
+
}
|
|
186
|
+
const middleware = module.middleware ?? module.default;
|
|
187
|
+
if (typeof middleware !== "function") {
|
|
188
|
+
return { request, type: "continue" };
|
|
189
|
+
}
|
|
190
|
+
const response = await middleware(request);
|
|
191
|
+
if (!(response instanceof Response)) {
|
|
192
|
+
return { request, type: "continue" };
|
|
193
|
+
}
|
|
194
|
+
const location = rewriteLocation(response);
|
|
195
|
+
if (location !== undefined) {
|
|
196
|
+
return {
|
|
197
|
+
request: new Request(new URL(location, request.url), request),
|
|
198
|
+
type: "continue",
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
return { response, type: "response" };
|
|
202
|
+
}
|
|
174
203
|
async function injectCloudflareQueryState(document, state) {
|
|
175
204
|
if (state.queries.length === 0) {
|
|
176
205
|
return document;
|
|
@@ -197,12 +226,17 @@ function injectCloudflareQueryStateScript(html, state) {
|
|
|
197
226
|
: `${html}${script}`;
|
|
198
227
|
}
|
|
199
228
|
async function runWithCloudflareQueryClient(queryClient, fn) {
|
|
229
|
+
if (cloudflareQueryClientFallbackInstalled) {
|
|
230
|
+
installQueryAsyncStorage(cloudflareQueryClientStorage);
|
|
231
|
+
return await runWithSerializedCloudflareQueryClient(queryClient, fn);
|
|
232
|
+
}
|
|
200
233
|
try {
|
|
201
234
|
return await runWithQueryClient(queryClient, fn);
|
|
202
235
|
}
|
|
203
236
|
catch (error) {
|
|
204
237
|
if (isQueryClientScopeUnavailableError(error)) {
|
|
205
238
|
installQueryAsyncStorage(cloudflareQueryClientStorage);
|
|
239
|
+
cloudflareQueryClientFallbackInstalled = true;
|
|
206
240
|
return await runWithSerializedCloudflareQueryClient(queryClient, fn);
|
|
207
241
|
}
|
|
208
242
|
throw error;
|
|
@@ -210,6 +244,7 @@ async function runWithCloudflareQueryClient(queryClient, fn) {
|
|
|
210
244
|
}
|
|
211
245
|
const cloudflareQueryClientStorage = createCloudflareQueryClientStorage();
|
|
212
246
|
let cloudflareQueryClientFallbackQueue = Promise.resolve();
|
|
247
|
+
let cloudflareQueryClientFallbackInstalled = false;
|
|
213
248
|
async function runWithSerializedCloudflareQueryClient(queryClient, fn) {
|
|
214
249
|
const previous = cloudflareQueryClientFallbackQueue;
|
|
215
250
|
let releaseCurrent;
|
|
@@ -264,7 +299,9 @@ function isPromiseLike(value) {
|
|
|
264
299
|
typeof value.then === "function");
|
|
265
300
|
}
|
|
266
301
|
async function dispatchCloudflareServerRoute(module, request, context) {
|
|
267
|
-
const handler = module[request.method] ??
|
|
302
|
+
const handler = module[request.method] ??
|
|
303
|
+
module.ALL ??
|
|
304
|
+
module.default;
|
|
268
305
|
if (typeof handler !== "function") {
|
|
269
306
|
return new Response("Method Not Allowed", { status: 405 });
|
|
270
307
|
}
|
|
@@ -319,8 +356,7 @@ function selectCloudflarePageComponent(module) {
|
|
|
319
356
|
}
|
|
320
357
|
for (const name of Object.keys(module)) {
|
|
321
358
|
const value = readCloudflareModuleExport(module, name);
|
|
322
|
-
if (!cloudflareReservedPageModuleExportNames.has(name) &&
|
|
323
|
-
typeof value === "function") {
|
|
359
|
+
if (!cloudflareReservedPageModuleExportNames.has(name) && typeof value === "function") {
|
|
324
360
|
return value;
|
|
325
361
|
}
|
|
326
362
|
}
|
|
@@ -336,7 +372,12 @@ function readCloudflareModuleExport(module, name) {
|
|
|
336
372
|
}
|
|
337
373
|
return descriptor.get?.call(module);
|
|
338
374
|
}
|
|
339
|
-
const cloudflareDiagnosticPageModuleExportNames = [
|
|
375
|
+
const cloudflareDiagnosticPageModuleExportNames = [
|
|
376
|
+
"default",
|
|
377
|
+
"App",
|
|
378
|
+
"CloudflareRouteComponent",
|
|
379
|
+
"slots",
|
|
380
|
+
];
|
|
340
381
|
// Fixed names + typeof only (never values) so the 500 response is useful without
|
|
341
382
|
// listing app-specific export names. Accessors are not invoked.
|
|
342
383
|
function describeCloudflareModuleExports(module) {
|
|
@@ -647,9 +688,7 @@ function cacheControlHasDirective(cacheControl, directive) {
|
|
|
647
688
|
return false;
|
|
648
689
|
}
|
|
649
690
|
const normalizedDirective = directive.toLowerCase();
|
|
650
|
-
return cacheControl
|
|
651
|
-
.split(",")
|
|
652
|
-
.some((part) => part.trim().toLowerCase() === normalizedDirective);
|
|
691
|
+
return cacheControl.split(",").some((part) => part.trim().toLowerCase() === normalizedDirective);
|
|
653
692
|
}
|
|
654
693
|
function prerenderedResponse(prerenderedRoutes, path, method, isNavigation) {
|
|
655
694
|
if (method !== "GET" && method !== "HEAD") {
|
|
@@ -677,14 +716,10 @@ function cloudflareRouteRequiresModule(route, manifest) {
|
|
|
677
716
|
function cloudflareRouteGlobKeyMatchesRoute(key, routeFile) {
|
|
678
717
|
const normalizedKey = normalizeCloudflareRouteModulePath(key);
|
|
679
718
|
const normalizedRoute = normalizeCloudflareRouteModulePath(routeFile);
|
|
680
|
-
return
|
|
681
|
-
normalizedKey.endsWith(`/${normalizedRoute}`));
|
|
719
|
+
return normalizedKey === normalizedRoute || normalizedKey.endsWith(`/${normalizedRoute}`);
|
|
682
720
|
}
|
|
683
721
|
function normalizeCloudflareRouteModulePath(path) {
|
|
684
|
-
const withoutPrefix = path
|
|
685
|
-
.replace(/\\/g, "/")
|
|
686
|
-
.replace(/^\.\//, "")
|
|
687
|
-
.replace(/^\/+/, "");
|
|
722
|
+
const withoutPrefix = path.replace(/\\/g, "/").replace(/^\.\//, "").replace(/^\/+/, "");
|
|
688
723
|
return withoutPrefix.replace(/\.(?:mjs|js|ts|tsx)$/, "");
|
|
689
724
|
}
|
|
690
725
|
function matchCloudflareRoute(routes, pathname) {
|
|
@@ -697,8 +732,7 @@ function matchCloudflareRoute(routes, pathname) {
|
|
|
697
732
|
continue;
|
|
698
733
|
}
|
|
699
734
|
if (catchAllIndex !== -1 &&
|
|
700
|
-
pathSegments.length <
|
|
701
|
-
catchAllIndex + 1 + route.segments.length - catchAllIndex - 1) {
|
|
735
|
+
pathSegments.length < catchAllIndex + 1 + route.segments.length - catchAllIndex - 1) {
|
|
702
736
|
continue;
|
|
703
737
|
}
|
|
704
738
|
let matched = true;
|
|
@@ -776,7 +810,9 @@ function matchCloudflareRoute(routes, pathname) {
|
|
|
776
810
|
}
|
|
777
811
|
function compareCloudflareRoutes(a, b) {
|
|
778
812
|
const scoreDelta = routeSpecificityScore(b) - routeSpecificityScore(a);
|
|
779
|
-
return scoreDelta === 0
|
|
813
|
+
return scoreDelta === 0
|
|
814
|
+
? a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind)
|
|
815
|
+
: scoreDelta;
|
|
780
816
|
}
|
|
781
817
|
function routeSpecificityScore(route) {
|
|
782
818
|
return route.segments.reduce((score, segment) => {
|
|
@@ -904,7 +940,12 @@ function mergeCloudflareRouteMetadata(metadata) {
|
|
|
904
940
|
...(icons === undefined ? {} : { icons }),
|
|
905
941
|
...(openGraph === undefined && openGraphImages === undefined
|
|
906
942
|
? {}
|
|
907
|
-
: {
|
|
943
|
+
: {
|
|
944
|
+
openGraph: {
|
|
945
|
+
...openGraph,
|
|
946
|
+
...(openGraphImages === undefined ? {} : { images: openGraphImages }),
|
|
947
|
+
},
|
|
948
|
+
}),
|
|
908
949
|
};
|
|
909
950
|
return mergedMetadata;
|
|
910
951
|
}, {});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BuiltPrerenderedRoute, BuiltServerManifest } from \"../build.js\";\nimport type { ClientRouteManifestEntry } from \"../client.js\";\nimport { clientManifestAssetPaths } from \"../client-manifest-assets.js\";\nimport type { AppRouterResponseHook } from \"../render.js\";\nimport {\n __MREACT_QUERY_STATE_SCRIPT_ID,\n createQueryClient,\n dehydrate,\n installQueryAsyncStorage,\n isQueryClientScopeUnavailableError,\n runWithQueryClient,\n type DehydratedQueryClient,\n type QueryAsyncStorage,\n type QueryClient,\n} from \"@reckona/mreact-query\";\nimport type {\n GenerateMetadataContext,\n ManifestDescriptor,\n RobotsManifest,\n RouteMetadata,\n SitemapEntry,\n} from \"../types.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n requestLogFields,\n type AppRouterLogger,\n} from \"../logger.js\";\nimport { normalizeRoutePath } from \"../route-path.js\";\nimport type { AppRoute } from \"../routes.js\";\nimport { contentSecurityPolicy } from \"../csp.js\";\nimport { isNotFoundError } from \"../navigation.js\";\nimport { validateRouteMetadata } from \"../metadata.js\";\nimport { routeSecurityHeaders } from \"../security-headers.js\";\nimport type { AppRouterPrerenderStore } from \"../serve.js\";\nimport { emitRouterDevtoolsEvent } from \"./devtools.js\";\nimport { escapeHtmlAttribute, escapeHtmlText } from \"@reckona/mreact-shared/html-escape\";\n\n/**\n * Represents the Cloudflare Worker execution context used by router handlers.\n */\nexport interface CloudflareExecutionContext {\n passThroughOnException(): void;\n waitUntil(promise: Promise<unknown>): void;\n}\n\n/**\n * Loads static assets for Cloudflare router requests.\n */\nexport interface CloudflareAssetLoader<Env = unknown> {\n fetch?:\n | ((\n pathname: string,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n ) => Response | Promise<Response | undefined> | undefined)\n | undefined;\n}\n\n/**\n * Provides manifests, environment, and execution context to Cloudflare rendering.\n */\nexport interface CloudflareRenderContext<Env = unknown> {\n clientManifest: CloudflareClientManifest;\n context: CloudflareExecutionContext;\n env: Env;\n serverManifest: BuiltServerManifest;\n}\n\n/**\n * Configures a Cloudflare Worker request handler for app-router output.\n */\nexport interface CloudflareRequestHandlerOptions<Env = unknown> {\n assets?: CloudflareAssetLoader<Env> | undefined;\n clientManifest: CloudflareClientManifest;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n onError?:\n | ((\n error: unknown,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n ) => Response | Promise<Response>)\n | undefined;\n render?:\n | ((request: Request, context: CloudflareRenderContext<Env>) => Response | Promise<Response>)\n | undefined;\n serverManifest: BuiltServerManifest;\n}\n\n/**\n * Defines the Cloudflare Worker `fetch` handler shape returned by router adapters.\n */\nexport interface CloudflareRequestHandler<Env = unknown> {\n fetch(request: Request, env: Env, context: CloudflareExecutionContext): Promise<Response>;\n}\n\n/**\n * Provides route match data to Cloudflare built-route rendering.\n */\nexport interface CloudflareBuiltRouteRenderContext<\n Env = unknown,\n> extends CloudflareRenderContext<Env> {\n params: Record<string, readonly string[] | string>;\n route: AppRoute;\n}\n\n/**\n * Provides loader context to Cloudflare route modules.\n */\nexport interface CloudflareRouteModuleLoaderContext<\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Provides request context to Cloudflare server route handlers.\n */\nexport interface CloudflareServerRouteContext<\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n request: Request;\n}\n\n/**\n * Provides props to Cloudflare route module components.\n */\nexport interface CloudflareRouteModuleComponentProps<\n Data = unknown,\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n data: Data;\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Renders a Cloudflare route module response body or `Response`.\n */\nexport type CloudflareRouteModuleComponent<Data = unknown, Env = unknown> = (\n props: CloudflareRouteModuleComponentProps<Data, Env>,\n) => Response | string | PromiseLike<Response | string>;\n\n/**\n * Defines the exports accepted from a Cloudflare page route module.\n */\nexport interface CloudflareRouteModule<Data = unknown, Env = unknown> {\n App?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n CloudflareRouteComponent?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n default?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n generateMetadata?:\n | ((\n context: GenerateMetadataContext<Data>,\n ) => RouteMetadata | PromiseLike<RouteMetadata | undefined> | undefined)\n | undefined;\n loader?:\n | ((context: CloudflareRouteModuleLoaderContext<Env>) => Data | PromiseLike<Data>)\n | undefined;\n metadata?: RouteMetadata | undefined;\n}\n\n/**\n * Handles a Cloudflare server route request.\n */\nexport type CloudflareServerRouteHandler<Env = unknown> = (\n request: Request,\n context: CloudflareServerRouteContext<Env>,\n) => unknown | PromiseLike<unknown>;\n\n/**\n * Defines HTTP method exports accepted from a Cloudflare server route module.\n */\nexport interface CloudflareServerRouteModule<Env = unknown> {\n ALL?: CloudflareServerRouteHandler<Env> | undefined;\n DELETE?: CloudflareServerRouteHandler<Env> | undefined;\n default?: CloudflareServerRouteHandler<Env> | undefined;\n GET?: CloudflareServerRouteHandler<Env> | undefined;\n HEAD?: CloudflareServerRouteHandler<Env> | undefined;\n OPTIONS?: CloudflareServerRouteHandler<Env> | undefined;\n PATCH?: CloudflareServerRouteHandler<Env> | undefined;\n POST?: CloudflareServerRouteHandler<Env> | undefined;\n PUT?: CloudflareServerRouteHandler<Env> | undefined;\n}\n\n/**\n * Provides request context to Cloudflare metadata route modules.\n */\nexport interface CloudflareMetadataRouteContext {\n baseUrl: string;\n host: string;\n params: Record<string, readonly string[] | string>;\n request: Request;\n}\n\n/**\n * Defines the default export accepted from a Cloudflare metadata route module.\n */\nexport interface CloudflareMetadataRouteModule {\n default?: ((context: CloudflareMetadataRouteContext) => unknown | PromiseLike<unknown>) | undefined;\n}\n\n/**\n * Represents one registered Cloudflare route module entry.\n */\nexport type CloudflareRouteModuleRegistryEntry<Env = unknown> =\n | CloudflareRouteModule<unknown, Env>\n | CloudflareMetadataRouteModule\n | CloudflareServerRouteModule<Env>;\n\n/**\n * Maps generated route module file keys to Cloudflare route modules or lazy loaders.\n */\nexport type CloudflareRouteModuleRegistry<Env = unknown> = Record<\n string,\n | CloudflareRouteModuleRegistryEntry<Env>\n | (() => CloudflareRouteModuleRegistryEntry<Env> | PromiseLike<CloudflareRouteModuleRegistryEntry<Env>>)\n>;\n\n/**\n * Configures the Cloudflare route module renderer.\n */\nexport interface CloudflareRouteModuleRendererOptions<Env = unknown> {\n document?:\n | ((\n context: CloudflareRouteModuleComponentProps<unknown, Env> & {\n body: string;\n modulePreload: string;\n },\n ) => Response | string | PromiseLike<Response | string>)\n | undefined;\n modules: CloudflareRouteModuleRegistry<Env>;\n}\n\n/**\n * Represents an import glob of Cloudflare route modules.\n */\nexport type CloudflareRouteModuleGlob<Env = unknown> = Record<\n string,\n | CloudflareRouteModuleRegistryEntry<Env>\n | (() => CloudflareRouteModuleRegistryEntry<Env> | PromiseLike<CloudflareRouteModuleRegistryEntry<Env>>)\n>;\n\n/**\n * Configures collection of Cloudflare route modules from a built manifest.\n */\nexport interface CollectCloudflareRouteModulesOptions {\n manifest: BuiltServerManifest;\n}\n\n/**\n * Configures a Cloudflare request handler that renders matched built routes.\n */\nexport interface CloudflareBuiltRequestHandlerOptions<Env = unknown> extends Omit<\n CloudflareRequestHandlerOptions<Env>,\n \"render\"\n> {\n renderRoute?:\n | ((\n request: Request,\n context: CloudflareBuiltRouteRenderContext<Env>,\n ) => Response | Promise<Response>)\n | undefined;\n}\n\n/**\n * Describes client assets and route metadata used by Cloudflare handlers.\n */\nexport interface CloudflareClientManifest {\n assets?: readonly string[] | undefined;\n publicAssets?: readonly string[] | undefined;\n routes: ClientRouteManifestEntry[];\n}\n\n/**\n * Represents a Cloudflare asset binding with a `fetch` method.\n */\nexport interface CloudflareAssetBinding {\n fetch(request: Request): Response | Promise<Response>;\n}\n\n/**\n * Configures static asset loading from a Cloudflare asset binding.\n */\nexport interface CloudflareStaticAssetLoaderOptions<Env = unknown> {\n binding:\n | CloudflareAssetBinding\n | ((\n env: Env,\n ) => CloudflareAssetBinding | Promise<CloudflareAssetBinding | undefined> | undefined);\n clientManifest: CloudflareClientManifest;\n extraPaths?: readonly string[] | undefined;\n prefix?: string | undefined;\n}\n\n/**\n * Defines the Cloudflare Cache API subset used by prerender stores.\n */\nexport interface CloudflareCache {\n delete(request: Request | string): boolean | Promise<boolean>;\n match(request: Request | string): Response | Promise<Response | undefined> | undefined;\n put(request: Request | string, response: Response): void | Promise<void>;\n}\n\n/**\n * Configures a Cloudflare Cache API backed prerender store.\n */\nexport interface CloudflarePrerenderStoreOptions {\n cache: CloudflareCache;\n keyOrigin?: string | undefined;\n keyPrefix?: string | undefined;\n}\n\nconst clientPrefix = \"/_mreact/client/\";\nconst defaultPrerenderCacheOrigin = \"https://mreact.local\";\nconst defaultPrerenderCachePrefix = \"/_mreact/prerender\";\n\n/**\n * Creates a Cloudflare Worker `fetch` handler from manifests, asset loading, and an optional renderer.\n *\n * The handler serves generated client assets and prerendered routes before calling `render`, preserves streamed HTML responses, and routes errors through `onError` when provided.\n */\nexport function createCloudflareRequestHandler<Env = unknown>(\n options: CloudflareRequestHandlerOptions<Env>,\n): CloudflareRequestHandler<Env> {\n return {\n async fetch(request, env, context) {\n const startedAt = logNow();\n try {\n return await handleCloudflareRequest(options, request, env, context);\n } catch (error) {\n const logFields = requestLogFields(request, \"cloudflare\");\n emitRouterDevtoolsEvent({\n method: request.method,\n type: \"router:request:error\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n return await applyCloudflareResponseHook(\n options.onError === undefined\n ? new Response(\"Internal Server Error\", {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n })\n : await options.onError(error, request, env, context),\n options,\n request,\n );\n }\n },\n };\n}\n\n/**\n * Creates a Cloudflare Worker handler that matches built app-router routes before rendering.\n *\n * Pair it with `createCloudflareRouteModuleRenderer()` and the generated route module registry from Cloudflare-target builds.\n */\nexport function createCloudflareBuiltRequestHandler<Env = unknown>(\n options: CloudflareBuiltRequestHandlerOptions<Env>,\n): CloudflareRequestHandler<Env> {\n const sortedRoutes = [...options.serverManifest.routes].sort(compareCloudflareRoutes);\n\n return createCloudflareRequestHandler({\n ...options,\n render(request, context) {\n const matched = matchCloudflareRoute(\n sortedRoutes,\n new URL(request.url).pathname,\n );\n\n if (matched === undefined || options.renderRoute === undefined) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n return options.renderRoute(request, {\n ...context,\n params: matched.params,\n route: matched.route,\n });\n },\n });\n}\n\n/**\n * Creates the renderer used by the generated Cloudflare Worker route registry.\n *\n * It loads matched route modules, dispatches server route handlers, evaluates loaders and metadata, and renders page routes with Cloudflare request context.\n */\nexport function createCloudflareRouteModuleRenderer<Env = unknown>(\n options: CloudflareRouteModuleRendererOptions<Env>,\n): NonNullable<CloudflareBuiltRequestHandlerOptions<Env>[\"renderRoute\"]> {\n return async (request, context) => {\n if (context.route.kind !== \"server\" && isCloudflareNavigationRequest(request)) {\n return cloudflareDocumentReloadNavigationResponse();\n }\n\n const module = await loadCloudflareRouteModule(options.modules, context.route.file);\n\n if (module === undefined) {\n return new Response(`No Cloudflare route module registered for ${context.route.file}.`, {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n });\n }\n\n if (context.route.kind === \"server\") {\n return withDefaultSecurityHeaders(\n await dispatchCloudflareServerRoute(module as CloudflareServerRouteModule<Env>, request, {\n ...context,\n request,\n }),\n request,\n );\n }\n\n if (context.route.kind === \"metadata\") {\n return withDefaultSecurityHeaders(\n await dispatchCloudflareMetadataRoute(module as CloudflareMetadataRouteModule, request, {\n ...context,\n request,\n }),\n request,\n );\n }\n\n const pageModule = module as CloudflareRouteModule<unknown, Env>;\n const component = selectCloudflarePageComponent(pageModule);\n const queryClient = createQueryClient();\n\n if (component === undefined) {\n return new Response(\n `No Cloudflare page component registered for ${context.route.file}. Module exports: ${describeCloudflareModuleExports(pageModule)}.`,\n {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n },\n );\n }\n\n const loaderContext = {\n ...context,\n queryClient,\n request,\n };\n let data: unknown;\n\n try {\n data =\n pageModule.loader === undefined\n ? undefined\n : await runWithCloudflareQueryClient(queryClient, () => pageModule.loader!(loaderContext));\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n\n if (isNotFoundError(error)) {\n return cloudflareNotFoundResponse(request);\n }\n\n throw error;\n }\n const props = {\n ...context,\n data,\n queryClient,\n request,\n };\n let rendered: Awaited<ReturnType<typeof component>>;\n\n try {\n rendered = await runWithCloudflareQueryClient(queryClient, () => component(props));\n } catch (error) {\n if (isNotFoundError(error)) {\n return cloudflareNotFoundResponse(request);\n }\n\n throw error;\n }\n\n const metadata = await runWithCloudflareQueryClient(queryClient, () =>\n resolveCloudflareRouteMetadata([pageModule], props),\n );\n\n if (rendered instanceof Response) {\n return withDefaultSecurityHeaders(rendered, request, metadata);\n }\n\n const modulePreload = cloudflareModulePreloadTag(context.clientManifest, context.route.path);\n const body = withCloudflareHydrationMarkers({\n data,\n html: rendered,\n manifest: context.clientManifest,\n params: context.params,\n request,\n routePath: context.route.path,\n });\n const documented =\n options.document === undefined\n ? defaultCloudflareDocument(body, modulePreload, metadata)\n : await runWithCloudflareQueryClient(queryClient, () =>\n options.document!({\n ...props,\n body,\n modulePreload,\n }),\n );\n const documentedWithQueryState = await injectCloudflareQueryState(\n documented,\n dehydrate(queryClient),\n );\n\n return withDefaultSecurityHeaders(\n documentedWithQueryState instanceof Response\n ? documentedWithQueryState\n : new Response(documentedWithQueryState, {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n }),\n request,\n metadata,\n );\n };\n}\n\nasync function injectCloudflareQueryState<T extends Response | string>(\n document: T,\n state: DehydratedQueryClient,\n): Promise<T | Response | string> {\n if (state.queries.length === 0) {\n return document;\n }\n\n if (typeof document === \"string\") {\n return injectCloudflareQueryStateScript(document, state);\n }\n\n const contentType = document.headers.get(\"content-type\") ?? \"\";\n if (!/^text\\/html\\b/i.test(contentType)) {\n return document;\n }\n\n const headers = new Headers(document.headers);\n headers.delete(\"content-length\");\n return new Response(injectCloudflareQueryStateScript(await document.text(), state), {\n headers,\n status: document.status,\n statusText: document.statusText,\n });\n}\n\nfunction injectCloudflareQueryStateScript(html: string, state: DehydratedQueryClient): string {\n const script = `<script type=\"application/json\" id=\"${__MREACT_QUERY_STATE_SCRIPT_ID}\">${escapeJsonForHtml(\n JSON.stringify(state),\n )}</script>`;\n\n return /<\\/body>/i.test(html)\n ? html.replace(/<\\/body>/i, () => `${script}</body>`)\n : `${html}${script}`;\n}\n\nasync function runWithCloudflareQueryClient<T>(\n queryClient: QueryClient,\n fn: () => T,\n): Promise<Awaited<T>> {\n try {\n return await runWithQueryClient(queryClient, fn);\n } catch (error) {\n if (isQueryClientScopeUnavailableError(error)) {\n installQueryAsyncStorage(cloudflareQueryClientStorage);\n return await runWithSerializedCloudflareQueryClient(queryClient, fn);\n }\n\n throw error;\n }\n}\n\nconst cloudflareQueryClientStorage = createCloudflareQueryClientStorage();\nlet cloudflareQueryClientFallbackQueue: Promise<void> = Promise.resolve();\n\nasync function runWithSerializedCloudflareQueryClient<T>(\n queryClient: QueryClient,\n fn: () => T,\n): Promise<Awaited<T>> {\n const previous = cloudflareQueryClientFallbackQueue;\n let releaseCurrent!: () => void;\n const current = new Promise<void>((resolve) => {\n releaseCurrent = resolve;\n });\n cloudflareQueryClientFallbackQueue = previous.then(() => current, () => current);\n\n await previous;\n\n try {\n return await runWithQueryClient(queryClient, fn);\n } finally {\n releaseCurrent();\n }\n}\n\nfunction createCloudflareQueryClientStorage(): QueryAsyncStorage<QueryClient> {\n const stores: QueryClient[] = [];\n\n return {\n getStore() {\n return stores.at(-1);\n },\n run<TResult>(store: QueryClient, callback: () => TResult): TResult {\n stores.push(store);\n let popSynchronously = true;\n\n try {\n const result = callback();\n\n if (isPromiseLike(result)) {\n popSynchronously = false;\n return Promise.resolve(result).finally(() => {\n removeCloudflareQueryClientStore(stores, store);\n }) as TResult;\n }\n\n return result;\n } finally {\n if (popSynchronously) {\n removeCloudflareQueryClientStore(stores, store);\n }\n }\n },\n };\n}\n\nfunction removeCloudflareQueryClientStore(stores: QueryClient[], store: QueryClient): void {\n const index = stores.lastIndexOf(store);\n\n if (index >= 0) {\n stores.splice(index, 1);\n }\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nasync function dispatchCloudflareServerRoute<Env>(\n module: CloudflareServerRouteModule<Env>,\n request: Request,\n context: CloudflareServerRouteContext<Env>,\n): Promise<Response> {\n const handler =\n module[request.method as keyof CloudflareServerRouteModule<Env>] ?? module.ALL ?? module.default;\n\n if (typeof handler !== \"function\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n let response: unknown;\n\n try {\n response = await handler(request, context);\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n\n throw error;\n }\n\n return response instanceof Response\n ? response\n : new Response(\"Invalid route response\", { status: 500 });\n}\n\nconst cloudflareReservedPageModuleExportNames = new Set([\n \"ALL\",\n \"DELETE\",\n \"GET\",\n \"HEAD\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n \"App\",\n \"CloudflareRouteComponent\",\n \"default\",\n \"generateMetadata\",\n \"generateStaticParams\",\n \"loader\",\n \"metadata\",\n \"middleware\",\n \"prerender\",\n \"revalidate\",\n \"slots\",\n \"stream\",\n]);\n\nfunction selectCloudflarePageComponent<Data, Env>(\n module: CloudflareRouteModule<Data, Env>,\n): CloudflareRouteModuleComponent<Data, Env> | undefined {\n const defaultExport = readCloudflareModuleExport(module, \"default\");\n if (typeof defaultExport === \"function\") {\n return defaultExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n const appExport = readCloudflareModuleExport(module, \"App\");\n if (typeof appExport === \"function\") {\n return appExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n const cloudflareRouteComponentExport = readCloudflareModuleExport(module, \"CloudflareRouteComponent\");\n if (typeof cloudflareRouteComponentExport === \"function\") {\n return cloudflareRouteComponentExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n for (const name of Object.keys(module)) {\n const value = readCloudflareModuleExport(module, name);\n if (\n !cloudflareReservedPageModuleExportNames.has(name) &&\n typeof value === \"function\"\n ) {\n return value as CloudflareRouteModuleComponent<Data, Env>;\n }\n }\n\n return undefined;\n}\n\nfunction readCloudflareModuleExport(module: object, name: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(module, name);\n if (descriptor === undefined) {\n return undefined;\n }\n\n if (\"value\" in descriptor) {\n return descriptor.value;\n }\n\n return descriptor.get?.call(module);\n}\n\nconst cloudflareDiagnosticPageModuleExportNames = [\"default\", \"App\", \"CloudflareRouteComponent\", \"slots\"] as const;\n\n// Fixed names + typeof only (never values) so the 500 response is useful without\n// listing app-specific export names. Accessors are not invoked.\nfunction describeCloudflareModuleExports(module: object): string {\n const described = cloudflareDiagnosticPageModuleExportNames.map(\n (name) => `${name}=${typeofCloudflareModuleExport(module, name)}`,\n );\n\n return described.join(\", \");\n}\n\nfunction typeofCloudflareModuleExport(module: object, name: string): string {\n const descriptor = Object.getOwnPropertyDescriptor(module, name);\n if (descriptor === undefined) {\n return \"absent\";\n }\n\n if (!(\"value\" in descriptor)) {\n return \"accessor\";\n }\n\n return typeof descriptor.value;\n}\n\nasync function dispatchCloudflareMetadataRoute(\n module: CloudflareMetadataRouteModule,\n request: Request,\n context: CloudflareBuiltRouteRenderContext & { request: Request },\n): Promise<Response> {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return new Response(\"Method Not Allowed\", {\n headers: { allow: \"GET, HEAD\" },\n status: 405,\n });\n }\n\n if (typeof module.default !== \"function\") {\n return new Response(\"Invalid metadata route response\", { status: 500 });\n }\n\n const url = new URL(request.url);\n const value = await module.default({\n baseUrl: url.origin,\n host: url.host,\n params: context.params,\n request,\n });\n\n if (value instanceof Response) {\n return value;\n }\n\n if (context.route.kind !== \"metadata\") {\n return new Response(\"Invalid metadata route convention\", { status: 500 });\n }\n\n if (context.route.convention === \"robots\") {\n return new Response(serializeCloudflareRobots(value as RobotsManifest), {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": \"text/plain; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"sitemap\") {\n return new Response(serializeCloudflareSitemap(value as readonly SitemapEntry[]), {\n headers: {\n \"cache-control\": \"no-cache\",\n \"content-type\": \"application/xml; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"manifest\") {\n return new Response(JSON.stringify(value as ManifestDescriptor), {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": \"application/manifest+json; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"opengraph-image\") {\n const body = value instanceof Uint8Array ? value.slice().buffer : String(value);\n return new Response(body, {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": typeof value === \"string\" && value.trimStart().startsWith(\"<svg\")\n ? \"image/svg+xml\"\n : \"application/octet-stream\",\n },\n });\n }\n\n return new Response(\"Invalid metadata route convention\", { status: 500 });\n}\n\nfunction isCloudflareNavigationRequest(request: Request): boolean {\n return request.headers.get(\"x-mreact-navigation\") === \"1\";\n}\n\nfunction cloudflareDocumentReloadNavigationResponse(): Response {\n return new Response(null, {\n headers: { \"x-mreact-navigation\": \"reload\" },\n status: 204,\n });\n}\n\nfunction withDefaultSecurityHeaders(\n response: Response,\n request: Request,\n metadata?: RouteMetadata | undefined,\n): Response {\n const headers = new Headers(response.headers);\n const csp = contentSecurityPolicy(metadata?.csp);\n\n if (\n isHtmlContentType(headers.get(\"content-type\")) &&\n csp !== undefined &&\n !headers.has(\"content-security-policy\")\n ) {\n headers.set(\"content-security-policy\", csp);\n }\n\n for (const [name, value] of Object.entries(\n routeSecurityHeaders({ request, security: metadata?.security }),\n )) {\n if (!headers.has(name)) {\n headers.set(name, value);\n }\n }\n\n return new Response(response.body, {\n headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\n/**\n * Validates and normalizes a Vite `import.meta.glob` map into a Cloudflare route module registry.\n *\n * Every manifest route that needs a module must be present, and extra glob entries are rejected to catch stale generated workers.\n */\nexport function collectCloudflareRouteModules<Env = unknown>(\n glob: CloudflareRouteModuleGlob<Env>,\n options: CollectCloudflareRouteModulesOptions,\n): CloudflareRouteModuleRegistry<Env> {\n const requiredRoutes = options.manifest.routes.filter((route) =>\n cloudflareRouteRequiresModule(route, options.manifest),\n );\n const matchedKeys = new Set<string>();\n const modules: CloudflareRouteModuleRegistry<Env> = {};\n\n for (const route of requiredRoutes) {\n const match = Object.entries(glob).find(([key]) =>\n cloudflareRouteGlobKeyMatchesRoute(key, route.file),\n );\n\n if (match === undefined) {\n throw new Error(`Missing Cloudflare route module for ${route.file}.`);\n }\n\n const [key, module] = match;\n matchedKeys.add(key);\n modules[route.file] = module;\n }\n\n const extraKeys = Object.keys(glob).filter((key) => !matchedKeys.has(key));\n\n if (extraKeys.length > 0) {\n throw new Error(`Extra Cloudflare route module entries: ${extraKeys.join(\", \")}.`);\n }\n\n return modules;\n}\n\n/**\n * Creates a Cloudflare asset loader that forwards only manifest-listed client and public asset paths.\n *\n * This keeps the Worker from passing arbitrary paths to the `ASSETS` binding while still serving generated route scripts, CSS, imports, source maps, and allowed public files.\n */\nexport function createCloudflareStaticAssetLoader<Env = unknown>(\n options: CloudflareStaticAssetLoaderOptions<Env>,\n): CloudflareAssetLoader<Env> {\n const prefix = normalizeAssetPrefix(options.prefix ?? clientPrefix);\n const allowedPaths = cloudflareClientAssetPaths(options.clientManifest, {\n extraPaths: options.extraPaths,\n prefix,\n });\n\n return {\n async fetch(pathname, request, env) {\n if (!allowedPaths.has(pathname)) {\n return undefined;\n }\n\n const binding =\n typeof options.binding === \"function\" ? await options.binding(env) : options.binding;\n\n if (binding === undefined) {\n return undefined;\n }\n\n const assetUrl = new URL(request.url);\n assetUrl.pathname = pathname;\n assetUrl.search = \"\";\n\n return await binding.fetch(new Request(assetUrl, request));\n },\n };\n}\n\n/**\n * Returns the set of client and public asset paths a Cloudflare Worker is allowed to serve.\n */\nexport function cloudflareClientAssetPaths(\n manifest: CloudflareClientManifest,\n options: { extraPaths?: readonly string[] | undefined; prefix?: string | undefined } = {},\n): Set<string> {\n const prefix = normalizeAssetPrefix(options.prefix ?? clientPrefix);\n const paths = clientManifestAssetPaths(manifest, {\n extraPaths: options.extraPaths,\n prefix,\n });\n\n for (const publicAsset of manifest.publicAssets ?? []) {\n const path = safePublicAssetPath(publicAsset);\n\n if (path !== undefined) {\n paths.add(path);\n }\n }\n\n return paths;\n}\n\nfunction safePublicAssetPath(asset: string): string | undefined {\n if (!asset.startsWith(\"/\") || asset.startsWith(\"//\") || asset.includes(\"..\")) {\n return undefined;\n }\n\n return asset;\n}\n\n/**\n * Creates an app-router prerender store backed by the Cloudflare Cache API.\n *\n * Keys are represented as synthetic requests so Workers cache entries can be shared by path and optional key prefix.\n */\nexport function createCloudflarePrerenderStore(\n options: CloudflarePrerenderStoreOptions,\n): AppRouterPrerenderStore {\n return {\n async delete(path) {\n await options.cache.delete(prerenderCacheRequest(options, path));\n },\n async get(path) {\n const response = await options.cache.match(prerenderCacheRequest(options, path));\n\n if (response === undefined) {\n return undefined;\n }\n\n return (await response.json()) as BuiltPrerenderedRoute;\n },\n async set(path, entry) {\n await options.cache.put(\n prerenderCacheRequest(options, path),\n Response.json(entry, {\n headers: { \"cache-control\": \"no-store\" },\n }),\n );\n },\n };\n}\n\nasync function handleCloudflareRequest<Env>(\n options: CloudflareRequestHandlerOptions<Env>,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n): Promise<Response> {\n const startedAt = logNow();\n const logFields = requestLogFields(request, \"cloudflare\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n emitRouterDevtoolsEvent({\n method: request.method,\n type: \"router:request:start\",\n url: request.url,\n });\n\n const url = new URL(request.url);\n\n if (\n url.pathname.startsWith(clientPrefix) ||\n isCloudflarePublicAssetPath(options.clientManifest, url.pathname)\n ) {\n const response = await options.assets?.fetch?.(url.pathname, request, env, context);\n const assetResponse = await applyCloudflareResponseHook(\n response ?? new Response(\"Not Found\", { status: 404 }),\n options,\n request,\n );\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: assetResponse.status,\n type: \"router:request:end\",\n });\n return assetResponse;\n }\n\n const staticResponse = prerenderedResponse(\n options.serverManifest.prerenderedRoutes,\n normalizeRoutePath(url.pathname),\n request.method,\n isCloudflareNavigationRequest(request),\n );\n\n if (staticResponse !== undefined) {\n emitRouterDevtoolsEvent({\n method: request.method,\n status: staticResponse.status,\n type: \"router:request:end\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: staticResponse.status,\n type: \"router:request:end\",\n });\n return await applyCloudflareResponseHook(staticResponse, options, request);\n }\n\n if (options.render === undefined) {\n const notFoundResponse = await applyCloudflareResponseHook(\n new Response(\"Not Found\", { status: 404 }),\n options,\n request,\n );\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: notFoundResponse.status,\n type: \"router:request:end\",\n });\n return notFoundResponse;\n }\n\n const renderedResponse = await options.render(request, {\n clientManifest: options.clientManifest,\n context,\n env,\n serverManifest: options.serverManifest,\n });\n const response = await applyCloudflareResponseHook(\n preserveCloudflareStreamedHtmlResponse(renderedResponse),\n options,\n request,\n );\n emitRouterDevtoolsEvent({\n method: request.method,\n status: response.status,\n type: \"router:request:end\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n\n return response;\n}\n\nfunction isCloudflarePublicAssetPath(manifest: CloudflareClientManifest, pathname: string): boolean {\n return (manifest.publicAssets ?? []).includes(pathname);\n}\n\nasync function applyCloudflareResponseHook<Env>(\n response: Response,\n options: Pick<CloudflareRequestHandlerOptions<Env>, \"onResponse\">,\n request: Request,\n): Promise<Response> {\n const hooked = await options.onResponse?.(response, { request });\n\n return hooked instanceof Response ? hooked : response;\n}\n\nfunction preserveCloudflareStreamedHtmlResponse(response: Response): Response {\n if (\n response.headers.get(\"x-mreact-stream\") !== \"1\" ||\n !isHtmlContentType(response.headers.get(\"content-type\"))\n ) {\n return response;\n }\n\n const headers = new Headers(response.headers);\n const cacheControl = headers.get(\"cache-control\");\n\n if (!cacheControlHasDirective(cacheControl, \"no-transform\")) {\n headers.set(\n \"cache-control\",\n cacheControl === null || cacheControl.trim() === \"\"\n ? \"no-transform\"\n : `${cacheControl}, no-transform`,\n );\n }\n\n if (headers.get(\"content-encoding\") === null) {\n headers.set(\"content-encoding\", \"identity\");\n }\n\n return new Response(response.body, {\n headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\nfunction isHtmlContentType(contentType: string | null): boolean {\n return contentType?.toLowerCase().split(\";\", 1)[0]?.trim() === \"text/html\";\n}\n\nfunction cacheControlHasDirective(cacheControl: string | null, directive: string): boolean {\n if (cacheControl === null) {\n return false;\n }\n\n const normalizedDirective = directive.toLowerCase();\n return cacheControl\n .split(\",\")\n .some((part) => part.trim().toLowerCase() === normalizedDirective);\n}\n\nfunction prerenderedResponse(\n prerenderedRoutes: Record<string, BuiltPrerenderedRoute> | undefined,\n path: string,\n method: string,\n isNavigation: boolean,\n): Response | undefined {\n if (method !== \"GET\" && method !== \"HEAD\") {\n return undefined;\n }\n\n const prerendered = prerenderedRoutes?.[path];\n\n if (prerendered === undefined) {\n return undefined;\n }\n\n if (isNavigation && !prerendered.html.includes(\"data-mreact-route-id\")) {\n return cloudflareDocumentReloadNavigationResponse();\n }\n\n return new Response(method === \"HEAD\" ? null : prerendered.html, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n}\n\nfunction cloudflareRouteRequiresModule(\n route: AppRoute,\n manifest: BuiltServerManifest,\n): boolean {\n return (\n route.kind === \"metadata\" ||\n route.kind === \"server\" ||\n (route.kind === \"page\" &&\n (route.segments.some((segment) => segment.kind !== \"static\") ||\n manifest.prerenderedRoutes?.[route.path] === undefined))\n );\n}\n\nfunction cloudflareRouteGlobKeyMatchesRoute(key: string, routeFile: string): boolean {\n const normalizedKey = normalizeCloudflareRouteModulePath(key);\n const normalizedRoute = normalizeCloudflareRouteModulePath(routeFile);\n\n return (\n normalizedKey === normalizedRoute ||\n normalizedKey.endsWith(`/${normalizedRoute}`)\n );\n}\n\nfunction normalizeCloudflareRouteModulePath(path: string): string {\n const withoutPrefix = path\n .replace(/\\\\/g, \"/\")\n .replace(/^\\.\\//, \"\")\n .replace(/^\\/+/, \"\");\n\n return withoutPrefix.replace(/\\.(?:mjs|js|ts|tsx)$/, \"\");\n}\n\nfunction matchCloudflareRoute(\n routes: readonly AppRoute[],\n pathname: string,\n): { params: Record<string, readonly string[] | string>; route: AppRoute } | undefined {\n const normalizedPath = normalizeRoutePath(pathname);\n const pathSegments = normalizedPath === \"/\" ? [] : normalizedPath.slice(1).split(\"/\");\n\n for (const route of routes) {\n const params: Record<string, readonly string[] | string> = {};\n const catchAllIndex = route.segments.findIndex((segment) => segment.kind === \"catch-all\");\n\n if (catchAllIndex === -1 && route.segments.length !== pathSegments.length) {\n continue;\n }\n\n if (\n catchAllIndex !== -1 &&\n pathSegments.length <\n catchAllIndex + 1 + route.segments.length - catchAllIndex - 1\n ) {\n continue;\n }\n\n let matched = true;\n\n for (const [index, segment] of route.segments.entries()) {\n const value = pathSegments[index];\n\n if (value === undefined) {\n matched = false;\n break;\n }\n\n if (segment.kind === \"static\") {\n if (segment.value !== value) {\n matched = false;\n break;\n }\n continue;\n }\n\n if (segment.kind === \"dynamic\") {\n const decoded = safeDecodePathSegment(value);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n params[segment.name] = decoded;\n continue;\n }\n\n const suffixSegments = route.segments.slice(index + 1);\n const catchAllEnd = pathSegments.length - suffixSegments.length;\n\n if (catchAllEnd <= index) {\n matched = false;\n break;\n }\n\n const decodedParts: string[] = [];\n for (const part of pathSegments.slice(index, catchAllEnd)) {\n const decoded = safeDecodePathSegment(part);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n decodedParts.push(decoded);\n }\n params[segment.name] = decodedParts;\n\n for (let suffixIndex = 0; suffixIndex < suffixSegments.length; suffixIndex += 1) {\n const suffixSegment = suffixSegments[suffixIndex];\n const suffixValue = pathSegments[catchAllEnd + suffixIndex];\n\n if (suffixSegment === undefined || suffixValue === undefined) {\n matched = false;\n break;\n }\n\n if (suffixSegment.kind === \"static\") {\n if (suffixSegment.value !== suffixValue) {\n matched = false;\n break;\n }\n continue;\n }\n\n if (suffixSegment.kind === \"dynamic\") {\n const decoded = safeDecodePathSegment(suffixValue);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n params[suffixSegment.name] = decoded;\n continue;\n }\n\n matched = false;\n break;\n }\n\n break;\n }\n\n if (matched) {\n return { params, route };\n }\n }\n\n return undefined;\n}\n\nfunction compareCloudflareRoutes(a: AppRoute, b: AppRoute): number {\n const scoreDelta = routeSpecificityScore(b) - routeSpecificityScore(a);\n\n return scoreDelta === 0 ? a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind) : scoreDelta;\n}\n\nfunction routeSpecificityScore(route: AppRoute): number {\n return route.segments.reduce((score, segment) => {\n if (segment.kind === \"static\") {\n return score + 100;\n }\n\n if (segment.kind === \"dynamic\") {\n return score + 10;\n }\n\n return score;\n }, route.segments.length);\n}\n\nfunction safeDecodePathSegment(segment: string): string | undefined {\n try {\n return decodeURIComponent(segment);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeAssetPrefix(prefix: string): string {\n const withLeadingSlash = prefix.startsWith(\"/\") ? prefix : `/${prefix}`;\n\n return withLeadingSlash.endsWith(\"/\") ? withLeadingSlash : `${withLeadingSlash}/`;\n}\n\nfunction withCloudflareHydrationMarkers(options: {\n data: unknown;\n html: string;\n manifest: CloudflareClientManifest;\n params: Record<string, readonly string[] | string>;\n request: Request;\n routePath: string;\n}): string {\n const marker = cloudflareHydrationMarkerParts(options);\n\n return marker.prefix === \"\" && marker.suffix === \"\"\n ? options.html\n : `${marker.prefix}${options.html}${marker.suffix}`;\n}\n\nfunction cloudflareHydrationMarkerParts(options: {\n data: unknown;\n manifest: CloudflareClientManifest;\n params: Record<string, readonly string[] | string>;\n request: Request;\n routePath: string;\n}): { prefix: string; suffix: string } {\n const route = options.manifest.routes.find(\n (route) => route.path === options.routePath && route.client === true,\n );\n\n if (route?.script === undefined) {\n return { prefix: \"\", suffix: \"\" };\n }\n\n const routeId = route.routeId ?? cloudflareRouteIdForPath(options.routePath);\n const escapedRouteId = escapeHtmlAttribute(routeId);\n const propsJson = escapeScriptJson(\n JSON.stringify({\n params: options.params,\n request: { url: options.request.url },\n data: options.data,\n }),\n );\n const clientReferencesJson =\n route.clientReferenceManifest === undefined || route.clientReferenceManifest.length === 0\n ? undefined\n : escapeScriptJson(JSON.stringify(route.clientReferenceManifest));\n\n return {\n prefix: `<div data-mreact-route-id=\"${escapedRouteId}\">`,\n suffix: [\n \"</div>\",\n `<script type=\"application/json\" id=\"mreact-props-${escapedRouteId}\">${propsJson}</script>`,\n clientReferencesJson === undefined\n ? undefined\n : `<script type=\"application/json\" id=\"mreact-client-references-${escapedRouteId}\">${clientReferencesJson}</script>`,\n `<script type=\"module\" src=\"/_mreact/client/${escapeHtmlAttribute(route.script)}\"></script>`,\n ]\n .filter((part): part is string => part !== undefined)\n .join(\"\"),\n };\n}\n\nfunction escapeScriptJson(json: string): string {\n return escapeJsonForHtml(json);\n}\n\nfunction escapeJsonForHtml(value: string): string {\n return value\n .replaceAll(\"&\", \"\\\\u0026\")\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\">\", \"\\\\u003e\")\n .replaceAll(\"\\u2028\", \"\\\\u2028\")\n .replaceAll(\"\\u2029\", \"\\\\u2029\");\n}\n\nfunction cloudflareRouteIdForPath(path: string): string {\n if (path === \"/\") {\n return \"index\";\n }\n\n return path\n .slice(1)\n .replaceAll(\"/\", \"_\")\n .replaceAll(\":\", \"_\")\n .replace(/[^A-Za-z0-9_$-]/g, \"_\");\n}\n\nasync function loadCloudflareRouteModule<Env>(\n modules: CloudflareRouteModuleRegistry<Env>,\n file: string,\n): Promise<CloudflareRouteModuleRegistryEntry<Env> | undefined> {\n const entry = modules[file];\n\n return typeof entry === \"function\" ? await entry() : entry;\n}\n\nfunction cloudflareModulePreloadTag(manifest: CloudflareClientManifest, routePath: string): string {\n const script = manifest.routes.find((route) => route.path === routePath)?.script;\n\n return script === undefined\n ? \"\"\n : `<link rel=\"modulepreload\" href=\"/_mreact/client/${escapeHtmlAttribute(script)}\">`;\n}\n\nasync function resolveCloudflareRouteMetadata<Data, Env>(\n modules: readonly CloudflareRouteModule<Data, Env>[],\n context: GenerateMetadataContext<Data>,\n): Promise<RouteMetadata | undefined> {\n const metadata: RouteMetadata[] = [];\n\n for (const module of modules) {\n let next = validateRouteMetadata(module.metadata);\n\n if (module.generateMetadata !== undefined) {\n const generated = await module.generateMetadata(context);\n next = mergeCloudflareRouteMetadata(\n [next, validateRouteMetadata(generated, \"generateMetadata\")].filter(\n isCloudflareRouteMetadata,\n ),\n );\n }\n\n if (next !== undefined) {\n metadata.push(next);\n }\n }\n\n return validateRouteMetadata(mergeCloudflareRouteMetadata(metadata));\n}\n\nfunction isCloudflareRouteMetadata(value: RouteMetadata | undefined): value is RouteMetadata {\n return value !== undefined;\n}\n\nfunction mergeCloudflareRouteMetadata(metadata: readonly RouteMetadata[]): RouteMetadata | undefined {\n if (metadata.length === 0) {\n return undefined;\n }\n\n return metadata.reduce<RouteMetadata>((merged, next) => {\n const openGraph = mergeCloudflareMetadataObject(merged.openGraph, next.openGraph);\n const openGraphImages = mergeCloudflareMetadataArrays(\n merged.openGraph?.images,\n next.openGraph?.images,\n );\n\n const alternates = mergeCloudflareMetadataObject(merged.alternates, next.alternates);\n const csp = mergeCloudflareMetadataObject(merged.csp, next.csp);\n const head = mergeCloudflareMetadataArrays(merged.head, next.head);\n const icons = mergeCloudflareMetadataObject(merged.icons, next.icons);\n const mergedMetadata: RouteMetadata = {\n ...merged,\n ...next,\n ...(alternates === undefined ? {} : { alternates }),\n ...(csp === undefined ? {} : { csp }),\n ...(head === undefined ? {} : { head }),\n ...(icons === undefined ? {} : { icons }),\n ...(openGraph === undefined && openGraphImages === undefined\n ? {}\n : { openGraph: { ...openGraph, ...(openGraphImages === undefined ? {} : { images: openGraphImages }) } }),\n };\n\n return mergedMetadata;\n }, {});\n}\n\nfunction mergeCloudflareMetadataObject<T extends object>(\n left: T | undefined,\n right: T | undefined,\n): T | undefined {\n if (left === undefined) {\n return right;\n }\n if (right === undefined) {\n return left;\n }\n\n return { ...left, ...right };\n}\n\nfunction mergeCloudflareMetadataArrays<T>(\n left: readonly T[] | undefined,\n right: readonly T[] | undefined,\n): readonly T[] | undefined {\n if (left === undefined || left.length === 0) {\n return right;\n }\n if (right === undefined || right.length === 0) {\n return left;\n }\n\n return [...left, ...right];\n}\n\nfunction defaultCloudflareDocument(\n body: string,\n modulePreload: string,\n metadata: RouteMetadata | undefined,\n): string {\n return `<!DOCTYPE html><html><head>${modulePreload}${cloudflareMetadataTitle(metadata)}</head><body>${body}</body></html>`;\n}\n\nfunction cloudflareMetadataTitle(metadata: RouteMetadata | undefined): string {\n if (metadata?.title === undefined) {\n return \"\";\n }\n\n return `<title>${escapeHtmlText(metadataString(metadata.title))}</title>`;\n}\n\nfunction metadataString(value: boolean | number | string): string {\n return String(value);\n}\n\nfunction serializeCloudflareRobots(manifest: RobotsManifest): string {\n const lines: string[] = [];\n const rules =\n manifest.rules === undefined\n ? []\n : Array.isArray(manifest.rules)\n ? manifest.rules\n : [manifest.rules];\n\n for (const rule of rules) {\n for (const userAgent of arrayValue(rule.userAgent)) {\n lines.push(`User-agent: ${userAgent}`);\n }\n for (const allow of arrayValue(rule.allow)) {\n lines.push(`Allow: ${allow}`);\n }\n for (const disallow of arrayValue(rule.disallow)) {\n lines.push(`Disallow: ${disallow}`);\n }\n }\n\n for (const sitemap of arrayValue(manifest.sitemap)) {\n lines.push(`Sitemap: ${sitemap}`);\n }\n if (manifest.host !== undefined) {\n lines.push(`Host: ${manifest.host}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction serializeCloudflareSitemap(entries: readonly SitemapEntry[]): string {\n const urls = entries\n .map((entry) => {\n const fields = [\n `<loc>${escapeXml(entry.url)}</loc>`,\n entry.lastModified === undefined\n ? undefined\n : `<lastmod>${escapeXml(sitemapDate(entry.lastModified))}</lastmod>`,\n entry.changeFrequency === undefined\n ? undefined\n : `<changefreq>${escapeXml(entry.changeFrequency)}</changefreq>`,\n entry.priority === undefined ? undefined : `<priority>${entry.priority}</priority>`,\n ].filter((field): field is string => field !== undefined);\n\n return `<url>${fields.join(\"\")}</url>`;\n })\n .join(\"\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">${urls}</urlset>`;\n}\n\nfunction sitemapDate(value: Date | number | string): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n return typeof value === \"number\" ? new Date(value).toISOString() : value;\n}\n\nfunction arrayValue<T>(value: T | readonly T[] | undefined): readonly T[] {\n if (value === undefined) {\n return [];\n }\n\n return Array.isArray(value) ? (value as readonly T[]) : [value as T];\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n}\n\nfunction cloudflareNotFoundResponse(request: Request): Response {\n return withDefaultSecurityHeaders(\n new Response(\"<!DOCTYPE html><html><head></head><body>Not Found</body></html>\", {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n status: 404,\n }),\n request,\n );\n}\n\nfunction prerenderCacheRequest(options: CloudflarePrerenderStoreOptions, path: string): Request {\n const origin = options.keyOrigin ?? defaultPrerenderCacheOrigin;\n const prefix = options.keyPrefix ?? defaultPrerenderCachePrefix;\n const normalizedPath = normalizeRoutePath(path.startsWith(\"/\") ? path : `/${path}`);\n const url = new URL(`${normalizePrerenderPrefix(prefix)}${normalizedPath}`, origin);\n\n return new Request(url, { method: \"GET\" });\n}\n\nfunction normalizePrerenderPrefix(prefix: string): string {\n const withLeadingSlash = prefix.startsWith(\"/\") ? prefix : `/${prefix}`;\n\n return withLeadingSlash.replace(/\\/+$/, \"\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cloudflare.js","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BuiltPrerenderedRoute, BuiltServerManifest } from \"../build.js\";\nimport type { ClientRouteManifestEntry } from \"../client.js\";\nimport { clientManifestAssetPaths } from \"../client-manifest-assets.js\";\nimport type { AppRouterResponseHook } from \"../render.js\";\nimport {\n __MREACT_QUERY_STATE_SCRIPT_ID,\n createQueryClient,\n dehydrate,\n installQueryAsyncStorage,\n isQueryClientScopeUnavailableError,\n runWithQueryClient,\n type DehydratedQueryClient,\n type QueryAsyncStorage,\n type QueryClient,\n} from \"@reckona/mreact-query\";\nimport type {\n GenerateMetadataContext,\n ManifestDescriptor,\n RobotsManifest,\n RouteMetadata,\n SitemapEntry,\n} from \"../types.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n requestLogFields,\n type AppRouterLogger,\n} from \"../logger.js\";\nimport { middlewareMatches, type MiddlewareModule } from \"../middleware.js\";\nimport { normalizeRoutePath } from \"../route-path.js\";\nimport type { AppRoute } from \"../routes.js\";\nimport { contentSecurityPolicy } from \"../csp.js\";\nimport { isNotFoundError, rewriteLocation } from \"../navigation.js\";\nimport { validateRouteMetadata } from \"../metadata.js\";\nimport { routeSecurityHeaders } from \"../security-headers.js\";\nimport type { AppRouterPrerenderStore } from \"../serve.js\";\nimport { emitRouterDevtoolsEvent } from \"./devtools.js\";\nimport { escapeHtmlAttribute, escapeHtmlText } from \"@reckona/mreact-shared/html-escape\";\n\n/**\n * Represents the Cloudflare Worker execution context used by router handlers.\n */\nexport interface CloudflareExecutionContext {\n passThroughOnException(): void;\n waitUntil(promise: Promise<unknown>): void;\n}\n\n/**\n * Loads static assets for Cloudflare router requests.\n */\nexport interface CloudflareAssetLoader<Env = unknown> {\n fetch?:\n | ((\n pathname: string,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n ) => Response | Promise<Response | undefined> | undefined)\n | undefined;\n}\n\n/**\n * Provides manifests, environment, and execution context to Cloudflare rendering.\n */\nexport interface CloudflareRenderContext<Env = unknown> {\n clientManifest: CloudflareClientManifest;\n context: CloudflareExecutionContext;\n env: Env;\n serverManifest: BuiltServerManifest;\n}\n\n/**\n * Configures a Cloudflare Worker request handler for app-router output.\n */\nexport interface CloudflareRequestHandlerOptions<Env = unknown> {\n assets?: CloudflareAssetLoader<Env> | undefined;\n clientManifest: CloudflareClientManifest;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n onError?:\n | ((\n error: unknown,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n ) => Response | Promise<Response>)\n | undefined;\n render?:\n | ((request: Request, context: CloudflareRenderContext<Env>) => Response | Promise<Response>)\n | undefined;\n serverManifest: BuiltServerManifest;\n}\n\n/**\n * Defines the Cloudflare Worker `fetch` handler shape returned by router adapters.\n */\nexport interface CloudflareRequestHandler<Env = unknown> {\n fetch(request: Request, env: Env, context: CloudflareExecutionContext): Promise<Response>;\n}\n\n/**\n * Provides route match data to Cloudflare built-route rendering.\n */\nexport interface CloudflareBuiltRouteRenderContext<\n Env = unknown,\n> extends CloudflareRenderContext<Env> {\n params: Record<string, readonly string[] | string>;\n route: AppRoute;\n}\n\n/**\n * Provides loader context to Cloudflare route modules.\n */\nexport interface CloudflareRouteModuleLoaderContext<\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Provides request context to Cloudflare server route handlers.\n */\nexport interface CloudflareServerRouteContext<\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n request: Request;\n}\n\n/**\n * Provides props to Cloudflare route module components.\n */\nexport interface CloudflareRouteModuleComponentProps<\n Data = unknown,\n Env = unknown,\n> extends CloudflareBuiltRouteRenderContext<Env> {\n data: Data;\n queryClient: QueryClient;\n request: Request;\n}\n\n/**\n * Renders a Cloudflare route module response body or `Response`.\n */\nexport type CloudflareRouteModuleComponent<Data = unknown, Env = unknown> = (\n props: CloudflareRouteModuleComponentProps<Data, Env>,\n) => Response | string | PromiseLike<Response | string>;\n\n/**\n * Defines the exports accepted from a Cloudflare page route module.\n */\nexport interface CloudflareRouteModule<Data = unknown, Env = unknown> {\n App?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n CloudflareRouteComponent?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n default?: CloudflareRouteModuleComponent<Data, Env> | undefined;\n generateMetadata?:\n | ((\n context: GenerateMetadataContext<Data>,\n ) => RouteMetadata | PromiseLike<RouteMetadata | undefined> | undefined)\n | undefined;\n loader?:\n | ((context: CloudflareRouteModuleLoaderContext<Env>) => Data | PromiseLike<Data>)\n | undefined;\n metadata?: RouteMetadata | undefined;\n}\n\n/**\n * Handles a Cloudflare server route request.\n */\nexport type CloudflareServerRouteHandler<Env = unknown> = (\n request: Request,\n context: CloudflareServerRouteContext<Env>,\n) => unknown | PromiseLike<unknown>;\n\n/**\n * Defines HTTP method exports accepted from a Cloudflare server route module.\n */\nexport interface CloudflareServerRouteModule<Env = unknown> {\n ALL?: CloudflareServerRouteHandler<Env> | undefined;\n DELETE?: CloudflareServerRouteHandler<Env> | undefined;\n default?: CloudflareServerRouteHandler<Env> | undefined;\n GET?: CloudflareServerRouteHandler<Env> | undefined;\n HEAD?: CloudflareServerRouteHandler<Env> | undefined;\n OPTIONS?: CloudflareServerRouteHandler<Env> | undefined;\n PATCH?: CloudflareServerRouteHandler<Env> | undefined;\n POST?: CloudflareServerRouteHandler<Env> | undefined;\n PUT?: CloudflareServerRouteHandler<Env> | undefined;\n}\n\n/**\n * Provides request context to Cloudflare metadata route modules.\n */\nexport interface CloudflareMetadataRouteContext {\n baseUrl: string;\n host: string;\n params: Record<string, readonly string[] | string>;\n request: Request;\n}\n\n/**\n * Defines the default export accepted from a Cloudflare metadata route module.\n */\nexport interface CloudflareMetadataRouteModule {\n default?:\n | ((context: CloudflareMetadataRouteContext) => unknown | PromiseLike<unknown>)\n | undefined;\n}\n\n/**\n * Represents one registered Cloudflare route module entry.\n */\nexport type CloudflareRouteModuleRegistryEntry<Env = unknown> =\n | CloudflareRouteModule<unknown, Env>\n | CloudflareMetadataRouteModule\n | CloudflareServerRouteModule<Env>;\n\n/**\n * Maps generated route module file keys to Cloudflare route modules or lazy loaders.\n */\nexport type CloudflareRouteModuleRegistry<Env = unknown> = Record<\n string,\n | CloudflareRouteModuleRegistryEntry<Env>\n | (() =>\n | CloudflareRouteModuleRegistryEntry<Env>\n | PromiseLike<CloudflareRouteModuleRegistryEntry<Env>>)\n>;\n\n/**\n * Configures the Cloudflare route module renderer.\n */\nexport interface CloudflareRouteModuleRendererOptions<Env = unknown> {\n document?:\n | ((\n context: CloudflareRouteModuleComponentProps<unknown, Env> & {\n body: string;\n modulePreload: string;\n },\n ) => Response | string | PromiseLike<Response | string>)\n | undefined;\n modules: CloudflareRouteModuleRegistry<Env>;\n}\n\n/**\n * Represents an import glob of Cloudflare route modules.\n */\nexport type CloudflareRouteModuleGlob<Env = unknown> = Record<\n string,\n | CloudflareRouteModuleRegistryEntry<Env>\n | (() =>\n | CloudflareRouteModuleRegistryEntry<Env>\n | PromiseLike<CloudflareRouteModuleRegistryEntry<Env>>)\n>;\n\n/**\n * Configures collection of Cloudflare route modules from a built manifest.\n */\nexport interface CollectCloudflareRouteModulesOptions {\n manifest: BuiltServerManifest;\n}\n\n/**\n * Configures a Cloudflare request handler that renders matched built routes.\n */\nexport interface CloudflareBuiltRequestHandlerOptions<Env = unknown> extends Omit<\n CloudflareRequestHandlerOptions<Env>,\n \"render\"\n> {\n renderRoute?:\n | ((\n request: Request,\n context: CloudflareBuiltRouteRenderContext<Env>,\n ) => Response | Promise<Response>)\n | undefined;\n}\n\n/**\n * Describes client assets and route metadata used by Cloudflare handlers.\n */\nexport interface CloudflareClientManifest {\n assets?: readonly string[] | undefined;\n publicAssets?: readonly string[] | undefined;\n routes: ClientRouteManifestEntry[];\n}\n\n/**\n * Represents a Cloudflare asset binding with a `fetch` method.\n */\nexport interface CloudflareAssetBinding {\n fetch(request: Request): Response | Promise<Response>;\n}\n\n/**\n * Configures static asset loading from a Cloudflare asset binding.\n */\nexport interface CloudflareStaticAssetLoaderOptions<Env = unknown> {\n binding:\n | CloudflareAssetBinding\n | ((\n env: Env,\n ) => CloudflareAssetBinding | Promise<CloudflareAssetBinding | undefined> | undefined);\n clientManifest: CloudflareClientManifest;\n extraPaths?: readonly string[] | undefined;\n prefix?: string | undefined;\n}\n\n/**\n * Defines the Cloudflare Cache API subset used by prerender stores.\n */\nexport interface CloudflareCache {\n delete(request: Request | string): boolean | Promise<boolean>;\n match(request: Request | string): Response | Promise<Response | undefined> | undefined;\n put(request: Request | string, response: Response): void | Promise<void>;\n}\n\n/**\n * Configures a Cloudflare Cache API backed prerender store.\n */\nexport interface CloudflarePrerenderStoreOptions {\n cache: CloudflareCache;\n keyOrigin?: string | undefined;\n keyPrefix?: string | undefined;\n}\n\nconst clientPrefix = \"/_mreact/client/\";\nconst cloudflareMiddlewareRouteModuleKey = \"__middleware__\";\nconst defaultPrerenderCacheOrigin = \"https://mreact.local\";\nconst defaultPrerenderCachePrefix = \"/_mreact/prerender\";\n\n/**\n * Creates a Cloudflare Worker `fetch` handler from manifests, asset loading, and an optional renderer.\n *\n * The handler serves generated client assets and prerendered routes before calling `render`, preserves streamed HTML responses, and routes errors through `onError` when provided.\n */\nexport function createCloudflareRequestHandler<Env = unknown>(\n options: CloudflareRequestHandlerOptions<Env>,\n): CloudflareRequestHandler<Env> {\n return {\n async fetch(request, env, context) {\n const startedAt = logNow();\n try {\n return await handleCloudflareRequest(options, request, env, context);\n } catch (error) {\n const logFields = requestLogFields(request, \"cloudflare\");\n emitRouterDevtoolsEvent({\n method: request.method,\n type: \"router:request:error\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n return await applyCloudflareResponseHook(\n options.onError === undefined\n ? new Response(\"Internal Server Error\", {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n })\n : await options.onError(error, request, env, context),\n options,\n request,\n );\n }\n },\n };\n}\n\n/**\n * Creates a Cloudflare Worker handler that matches built app-router routes before rendering.\n *\n * Pair it with `createCloudflareRouteModuleRenderer()` and the generated route module registry from Cloudflare-target builds.\n */\nexport function createCloudflareBuiltRequestHandler<Env = unknown>(\n options: CloudflareBuiltRequestHandlerOptions<Env>,\n): CloudflareRequestHandler<Env> {\n const sortedRoutes = [...options.serverManifest.routes].sort(compareCloudflareRoutes);\n\n return createCloudflareRequestHandler({\n ...options,\n render(request, context) {\n const matched = matchCloudflareRoute(sortedRoutes, new URL(request.url).pathname);\n\n if (matched === undefined || options.renderRoute === undefined) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n return options.renderRoute(request, {\n ...context,\n params: matched.params,\n route: matched.route,\n });\n },\n });\n}\n\n/**\n * Creates the renderer used by the generated Cloudflare Worker route registry.\n *\n * It loads matched route modules, dispatches server route handlers, evaluates loaders and metadata, and renders page routes with Cloudflare request context.\n */\nexport function createCloudflareRouteModuleRenderer<Env = unknown>(\n options: CloudflareRouteModuleRendererOptions<Env>,\n): NonNullable<CloudflareBuiltRequestHandlerOptions<Env>[\"renderRoute\"]> {\n return async (request, context) => {\n const middlewareResult = await resolveCloudflareRouteModuleMiddleware(options.modules, request);\n if (middlewareResult.type === \"response\") {\n return middlewareResult.response;\n }\n request = middlewareResult.request;\n\n if (context.route.kind !== \"server\" && isCloudflareNavigationRequest(request)) {\n return cloudflareDocumentReloadNavigationResponse();\n }\n\n const module = await loadCloudflareRouteModule(options.modules, context.route.file);\n\n if (module === undefined) {\n return new Response(`No Cloudflare route module registered for ${context.route.file}.`, {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n });\n }\n\n if (context.route.kind === \"server\") {\n return withDefaultSecurityHeaders(\n await dispatchCloudflareServerRoute(module as CloudflareServerRouteModule<Env>, request, {\n ...context,\n request,\n }),\n request,\n );\n }\n\n if (context.route.kind === \"metadata\") {\n return withDefaultSecurityHeaders(\n await dispatchCloudflareMetadataRoute(module as CloudflareMetadataRouteModule, request, {\n ...context,\n request,\n }),\n request,\n );\n }\n\n const pageModule = module as CloudflareRouteModule<unknown, Env>;\n const component = selectCloudflarePageComponent(pageModule);\n const queryClient = createQueryClient();\n\n if (component === undefined) {\n return new Response(\n `No Cloudflare page component registered for ${context.route.file}. Module exports: ${describeCloudflareModuleExports(pageModule)}.`,\n {\n headers: { \"content-type\": \"text/plain; charset=utf-8\" },\n status: 500,\n },\n );\n }\n\n const loaderContext = {\n ...context,\n queryClient,\n request,\n };\n let data: unknown;\n\n try {\n data =\n pageModule.loader === undefined\n ? undefined\n : await runWithCloudflareQueryClient(queryClient, () =>\n pageModule.loader!(loaderContext),\n );\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n\n if (isNotFoundError(error)) {\n return cloudflareNotFoundResponse(request);\n }\n\n throw error;\n }\n const props = {\n ...context,\n data,\n queryClient,\n request,\n };\n let rendered: Awaited<ReturnType<typeof component>>;\n\n try {\n rendered = await runWithCloudflareQueryClient(queryClient, () => component(props));\n } catch (error) {\n if (isNotFoundError(error)) {\n return cloudflareNotFoundResponse(request);\n }\n\n throw error;\n }\n\n const metadata = await runWithCloudflareQueryClient(queryClient, () =>\n resolveCloudflareRouteMetadata([pageModule], props),\n );\n\n if (rendered instanceof Response) {\n return withDefaultSecurityHeaders(rendered, request, metadata);\n }\n\n const modulePreload = cloudflareModulePreloadTag(context.clientManifest, context.route.path);\n const body = withCloudflareHydrationMarkers({\n data,\n html: rendered,\n manifest: context.clientManifest,\n params: context.params,\n request,\n routePath: context.route.path,\n });\n const documented =\n options.document === undefined\n ? defaultCloudflareDocument(body, modulePreload, metadata)\n : await runWithCloudflareQueryClient(queryClient, () =>\n options.document!({\n ...props,\n body,\n modulePreload,\n }),\n );\n const documentedWithQueryState = await injectCloudflareQueryState(\n documented,\n dehydrate(queryClient),\n );\n\n return withDefaultSecurityHeaders(\n documentedWithQueryState instanceof Response\n ? documentedWithQueryState\n : new Response(documentedWithQueryState, {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n }),\n request,\n metadata,\n );\n };\n}\n\nasync function resolveCloudflareRouteModuleMiddleware<Env>(\n modules: CloudflareRouteModuleRegistry<Env>,\n request: Request,\n): Promise<{ request: Request; type: \"continue\" } | { response: Response; type: \"response\" }> {\n const module = (await loadCloudflareRouteModule(modules, cloudflareMiddlewareRouteModuleKey)) as\n | MiddlewareModule\n | undefined;\n\n if (module === undefined || !middlewareMatches(module.config, new URL(request.url).pathname)) {\n return { request, type: \"continue\" };\n }\n\n const middleware = module.middleware ?? module.default;\n if (typeof middleware !== \"function\") {\n return { request, type: \"continue\" };\n }\n\n const response = await middleware(request);\n if (!(response instanceof Response)) {\n return { request, type: \"continue\" };\n }\n\n const location = rewriteLocation(response);\n if (location !== undefined) {\n return {\n request: new Request(new URL(location, request.url), request),\n type: \"continue\",\n };\n }\n\n return { response, type: \"response\" };\n}\n\nasync function injectCloudflareQueryState<T extends Response | string>(\n document: T,\n state: DehydratedQueryClient,\n): Promise<T | Response | string> {\n if (state.queries.length === 0) {\n return document;\n }\n\n if (typeof document === \"string\") {\n return injectCloudflareQueryStateScript(document, state);\n }\n\n const contentType = document.headers.get(\"content-type\") ?? \"\";\n if (!/^text\\/html\\b/i.test(contentType)) {\n return document;\n }\n\n const headers = new Headers(document.headers);\n headers.delete(\"content-length\");\n return new Response(injectCloudflareQueryStateScript(await document.text(), state), {\n headers,\n status: document.status,\n statusText: document.statusText,\n });\n}\n\nfunction injectCloudflareQueryStateScript(html: string, state: DehydratedQueryClient): string {\n const script = `<script type=\"application/json\" id=\"${__MREACT_QUERY_STATE_SCRIPT_ID}\">${escapeJsonForHtml(\n JSON.stringify(state),\n )}</script>`;\n\n return /<\\/body>/i.test(html)\n ? html.replace(/<\\/body>/i, () => `${script}</body>`)\n : `${html}${script}`;\n}\n\nasync function runWithCloudflareQueryClient<T>(\n queryClient: QueryClient,\n fn: () => T,\n): Promise<Awaited<T>> {\n if (cloudflareQueryClientFallbackInstalled) {\n installQueryAsyncStorage(cloudflareQueryClientStorage);\n return await runWithSerializedCloudflareQueryClient(queryClient, fn);\n }\n\n try {\n return await runWithQueryClient(queryClient, fn);\n } catch (error) {\n if (isQueryClientScopeUnavailableError(error)) {\n installQueryAsyncStorage(cloudflareQueryClientStorage);\n cloudflareQueryClientFallbackInstalled = true;\n return await runWithSerializedCloudflareQueryClient(queryClient, fn);\n }\n\n throw error;\n }\n}\n\nconst cloudflareQueryClientStorage = createCloudflareQueryClientStorage();\nlet cloudflareQueryClientFallbackQueue: Promise<void> = Promise.resolve();\nlet cloudflareQueryClientFallbackInstalled = false;\n\nasync function runWithSerializedCloudflareQueryClient<T>(\n queryClient: QueryClient,\n fn: () => T,\n): Promise<Awaited<T>> {\n const previous = cloudflareQueryClientFallbackQueue;\n let releaseCurrent!: () => void;\n const current = new Promise<void>((resolve) => {\n releaseCurrent = resolve;\n });\n cloudflareQueryClientFallbackQueue = previous.then(\n () => current,\n () => current,\n );\n\n await previous;\n\n try {\n return await runWithQueryClient(queryClient, fn);\n } finally {\n releaseCurrent();\n }\n}\n\nfunction createCloudflareQueryClientStorage(): QueryAsyncStorage<QueryClient> {\n const stores: QueryClient[] = [];\n\n return {\n getStore() {\n return stores.at(-1);\n },\n run<TResult>(store: QueryClient, callback: () => TResult): TResult {\n stores.push(store);\n let popSynchronously = true;\n\n try {\n const result = callback();\n\n if (isPromiseLike(result)) {\n popSynchronously = false;\n return Promise.resolve(result).finally(() => {\n removeCloudflareQueryClientStore(stores, store);\n }) as TResult;\n }\n\n return result;\n } finally {\n if (popSynchronously) {\n removeCloudflareQueryClientStore(stores, store);\n }\n }\n },\n };\n}\n\nfunction removeCloudflareQueryClientStore(stores: QueryClient[], store: QueryClient): void {\n const index = stores.lastIndexOf(store);\n\n if (index >= 0) {\n stores.splice(index, 1);\n }\n}\n\nfunction isPromiseLike(value: unknown): value is PromiseLike<unknown> {\n return (\n (typeof value === \"object\" || typeof value === \"function\") &&\n value !== null &&\n typeof (value as { then?: unknown }).then === \"function\"\n );\n}\n\nasync function dispatchCloudflareServerRoute<Env>(\n module: CloudflareServerRouteModule<Env>,\n request: Request,\n context: CloudflareServerRouteContext<Env>,\n): Promise<Response> {\n const handler =\n module[request.method as keyof CloudflareServerRouteModule<Env>] ??\n module.ALL ??\n module.default;\n\n if (typeof handler !== \"function\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n let response: unknown;\n\n try {\n response = await handler(request, context);\n } catch (error) {\n if (error instanceof Response) {\n return error;\n }\n\n throw error;\n }\n\n return response instanceof Response\n ? response\n : new Response(\"Invalid route response\", { status: 500 });\n}\n\nconst cloudflareReservedPageModuleExportNames = new Set([\n \"ALL\",\n \"DELETE\",\n \"GET\",\n \"HEAD\",\n \"OPTIONS\",\n \"PATCH\",\n \"POST\",\n \"PUT\",\n \"App\",\n \"CloudflareRouteComponent\",\n \"default\",\n \"generateMetadata\",\n \"generateStaticParams\",\n \"loader\",\n \"metadata\",\n \"middleware\",\n \"prerender\",\n \"revalidate\",\n \"slots\",\n \"stream\",\n]);\n\nfunction selectCloudflarePageComponent<Data, Env>(\n module: CloudflareRouteModule<Data, Env>,\n): CloudflareRouteModuleComponent<Data, Env> | undefined {\n const defaultExport = readCloudflareModuleExport(module, \"default\");\n if (typeof defaultExport === \"function\") {\n return defaultExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n const appExport = readCloudflareModuleExport(module, \"App\");\n if (typeof appExport === \"function\") {\n return appExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n const cloudflareRouteComponentExport = readCloudflareModuleExport(\n module,\n \"CloudflareRouteComponent\",\n );\n if (typeof cloudflareRouteComponentExport === \"function\") {\n return cloudflareRouteComponentExport as CloudflareRouteModuleComponent<Data, Env>;\n }\n\n for (const name of Object.keys(module)) {\n const value = readCloudflareModuleExport(module, name);\n if (!cloudflareReservedPageModuleExportNames.has(name) && typeof value === \"function\") {\n return value as CloudflareRouteModuleComponent<Data, Env>;\n }\n }\n\n return undefined;\n}\n\nfunction readCloudflareModuleExport(module: object, name: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(module, name);\n if (descriptor === undefined) {\n return undefined;\n }\n\n if (\"value\" in descriptor) {\n return descriptor.value;\n }\n\n return descriptor.get?.call(module);\n}\n\nconst cloudflareDiagnosticPageModuleExportNames = [\n \"default\",\n \"App\",\n \"CloudflareRouteComponent\",\n \"slots\",\n] as const;\n\n// Fixed names + typeof only (never values) so the 500 response is useful without\n// listing app-specific export names. Accessors are not invoked.\nfunction describeCloudflareModuleExports(module: object): string {\n const described = cloudflareDiagnosticPageModuleExportNames.map(\n (name) => `${name}=${typeofCloudflareModuleExport(module, name)}`,\n );\n\n return described.join(\", \");\n}\n\nfunction typeofCloudflareModuleExport(module: object, name: string): string {\n const descriptor = Object.getOwnPropertyDescriptor(module, name);\n if (descriptor === undefined) {\n return \"absent\";\n }\n\n if (!(\"value\" in descriptor)) {\n return \"accessor\";\n }\n\n return typeof descriptor.value;\n}\n\nasync function dispatchCloudflareMetadataRoute(\n module: CloudflareMetadataRouteModule,\n request: Request,\n context: CloudflareBuiltRouteRenderContext & { request: Request },\n): Promise<Response> {\n if (request.method !== \"GET\" && request.method !== \"HEAD\") {\n return new Response(\"Method Not Allowed\", {\n headers: { allow: \"GET, HEAD\" },\n status: 405,\n });\n }\n\n if (typeof module.default !== \"function\") {\n return new Response(\"Invalid metadata route response\", { status: 500 });\n }\n\n const url = new URL(request.url);\n const value = await module.default({\n baseUrl: url.origin,\n host: url.host,\n params: context.params,\n request,\n });\n\n if (value instanceof Response) {\n return value;\n }\n\n if (context.route.kind !== \"metadata\") {\n return new Response(\"Invalid metadata route convention\", { status: 500 });\n }\n\n if (context.route.convention === \"robots\") {\n return new Response(serializeCloudflareRobots(value as RobotsManifest), {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": \"text/plain; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"sitemap\") {\n return new Response(serializeCloudflareSitemap(value as readonly SitemapEntry[]), {\n headers: {\n \"cache-control\": \"no-cache\",\n \"content-type\": \"application/xml; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"manifest\") {\n return new Response(JSON.stringify(value as ManifestDescriptor), {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": \"application/manifest+json; charset=utf-8\",\n },\n });\n }\n\n if (context.route.convention === \"opengraph-image\") {\n const body = value instanceof Uint8Array ? value.slice().buffer : String(value);\n return new Response(body, {\n headers: {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\":\n typeof value === \"string\" && value.trimStart().startsWith(\"<svg\")\n ? \"image/svg+xml\"\n : \"application/octet-stream\",\n },\n });\n }\n\n return new Response(\"Invalid metadata route convention\", { status: 500 });\n}\n\nfunction isCloudflareNavigationRequest(request: Request): boolean {\n return request.headers.get(\"x-mreact-navigation\") === \"1\";\n}\n\nfunction cloudflareDocumentReloadNavigationResponse(): Response {\n return new Response(null, {\n headers: { \"x-mreact-navigation\": \"reload\" },\n status: 204,\n });\n}\n\nfunction withDefaultSecurityHeaders(\n response: Response,\n request: Request,\n metadata?: RouteMetadata | undefined,\n): Response {\n const headers = new Headers(response.headers);\n const csp = contentSecurityPolicy(metadata?.csp);\n\n if (\n isHtmlContentType(headers.get(\"content-type\")) &&\n csp !== undefined &&\n !headers.has(\"content-security-policy\")\n ) {\n headers.set(\"content-security-policy\", csp);\n }\n\n for (const [name, value] of Object.entries(\n routeSecurityHeaders({ request, security: metadata?.security }),\n )) {\n if (!headers.has(name)) {\n headers.set(name, value);\n }\n }\n\n return new Response(response.body, {\n headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\n/**\n * Validates and normalizes a Vite `import.meta.glob` map into a Cloudflare route module registry.\n *\n * Every manifest route that needs a module must be present, and extra glob entries are rejected to catch stale generated workers.\n */\nexport function collectCloudflareRouteModules<Env = unknown>(\n glob: CloudflareRouteModuleGlob<Env>,\n options: CollectCloudflareRouteModulesOptions,\n): CloudflareRouteModuleRegistry<Env> {\n const requiredRoutes = options.manifest.routes.filter((route) =>\n cloudflareRouteRequiresModule(route, options.manifest),\n );\n const matchedKeys = new Set<string>();\n const modules: CloudflareRouteModuleRegistry<Env> = {};\n\n for (const route of requiredRoutes) {\n const match = Object.entries(glob).find(([key]) =>\n cloudflareRouteGlobKeyMatchesRoute(key, route.file),\n );\n\n if (match === undefined) {\n throw new Error(`Missing Cloudflare route module for ${route.file}.`);\n }\n\n const [key, module] = match;\n matchedKeys.add(key);\n modules[route.file] = module;\n }\n\n const extraKeys = Object.keys(glob).filter((key) => !matchedKeys.has(key));\n\n if (extraKeys.length > 0) {\n throw new Error(`Extra Cloudflare route module entries: ${extraKeys.join(\", \")}.`);\n }\n\n return modules;\n}\n\n/**\n * Creates a Cloudflare asset loader that forwards only manifest-listed client and public asset paths.\n *\n * This keeps the Worker from passing arbitrary paths to the `ASSETS` binding while still serving generated route scripts, CSS, imports, source maps, and allowed public files.\n */\nexport function createCloudflareStaticAssetLoader<Env = unknown>(\n options: CloudflareStaticAssetLoaderOptions<Env>,\n): CloudflareAssetLoader<Env> {\n const prefix = normalizeAssetPrefix(options.prefix ?? clientPrefix);\n const allowedPaths = cloudflareClientAssetPaths(options.clientManifest, {\n extraPaths: options.extraPaths,\n prefix,\n });\n\n return {\n async fetch(pathname, request, env) {\n if (!allowedPaths.has(pathname)) {\n return undefined;\n }\n\n const binding =\n typeof options.binding === \"function\" ? await options.binding(env) : options.binding;\n\n if (binding === undefined) {\n return undefined;\n }\n\n const assetUrl = new URL(request.url);\n assetUrl.pathname = pathname;\n assetUrl.search = \"\";\n\n return await binding.fetch(new Request(assetUrl, request));\n },\n };\n}\n\n/**\n * Returns the set of client and public asset paths a Cloudflare Worker is allowed to serve.\n */\nexport function cloudflareClientAssetPaths(\n manifest: CloudflareClientManifest,\n options: { extraPaths?: readonly string[] | undefined; prefix?: string | undefined } = {},\n): Set<string> {\n const prefix = normalizeAssetPrefix(options.prefix ?? clientPrefix);\n const paths = clientManifestAssetPaths(manifest, {\n extraPaths: options.extraPaths,\n prefix,\n });\n\n for (const publicAsset of manifest.publicAssets ?? []) {\n const path = safePublicAssetPath(publicAsset);\n\n if (path !== undefined) {\n paths.add(path);\n }\n }\n\n return paths;\n}\n\nfunction safePublicAssetPath(asset: string): string | undefined {\n if (!asset.startsWith(\"/\") || asset.startsWith(\"//\") || asset.includes(\"..\")) {\n return undefined;\n }\n\n return asset;\n}\n\n/**\n * Creates an app-router prerender store backed by the Cloudflare Cache API.\n *\n * Keys are represented as synthetic requests so Workers cache entries can be shared by path and optional key prefix.\n */\nexport function createCloudflarePrerenderStore(\n options: CloudflarePrerenderStoreOptions,\n): AppRouterPrerenderStore {\n return {\n async delete(path) {\n await options.cache.delete(prerenderCacheRequest(options, path));\n },\n async get(path) {\n const response = await options.cache.match(prerenderCacheRequest(options, path));\n\n if (response === undefined) {\n return undefined;\n }\n\n return (await response.json()) as BuiltPrerenderedRoute;\n },\n async set(path, entry) {\n await options.cache.put(\n prerenderCacheRequest(options, path),\n Response.json(entry, {\n headers: { \"cache-control\": \"no-store\" },\n }),\n );\n },\n };\n}\n\nasync function handleCloudflareRequest<Env>(\n options: CloudflareRequestHandlerOptions<Env>,\n request: Request,\n env: Env,\n context: CloudflareExecutionContext,\n): Promise<Response> {\n const startedAt = logNow();\n const logFields = requestLogFields(request, \"cloudflare\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n emitRouterDevtoolsEvent({\n method: request.method,\n type: \"router:request:start\",\n url: request.url,\n });\n\n const url = new URL(request.url);\n\n if (\n url.pathname.startsWith(clientPrefix) ||\n isCloudflarePublicAssetPath(options.clientManifest, url.pathname)\n ) {\n const response = await options.assets?.fetch?.(url.pathname, request, env, context);\n const assetResponse = await applyCloudflareResponseHook(\n response ?? new Response(\"Not Found\", { status: 404 }),\n options,\n request,\n );\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: assetResponse.status,\n type: \"router:request:end\",\n });\n return assetResponse;\n }\n\n const staticResponse = prerenderedResponse(\n options.serverManifest.prerenderedRoutes,\n normalizeRoutePath(url.pathname),\n request.method,\n isCloudflareNavigationRequest(request),\n );\n\n if (staticResponse !== undefined) {\n emitRouterDevtoolsEvent({\n method: request.method,\n status: staticResponse.status,\n type: \"router:request:end\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: staticResponse.status,\n type: \"router:request:end\",\n });\n return await applyCloudflareResponseHook(staticResponse, options, request);\n }\n\n if (options.render === undefined) {\n const notFoundResponse = await applyCloudflareResponseHook(\n new Response(\"Not Found\", { status: 404 }),\n options,\n request,\n );\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: notFoundResponse.status,\n type: \"router:request:end\",\n });\n return notFoundResponse;\n }\n\n const renderedResponse = await options.render(request, {\n clientManifest: options.clientManifest,\n context,\n env,\n serverManifest: options.serverManifest,\n });\n const response = await applyCloudflareResponseHook(\n preserveCloudflareStreamedHtmlResponse(renderedResponse),\n options,\n request,\n );\n emitRouterDevtoolsEvent({\n method: request.method,\n status: response.status,\n type: \"router:request:end\",\n url: request.url,\n });\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n\n return response;\n}\n\nfunction isCloudflarePublicAssetPath(\n manifest: CloudflareClientManifest,\n pathname: string,\n): boolean {\n return (manifest.publicAssets ?? []).includes(pathname);\n}\n\nasync function applyCloudflareResponseHook<Env>(\n response: Response,\n options: Pick<CloudflareRequestHandlerOptions<Env>, \"onResponse\">,\n request: Request,\n): Promise<Response> {\n const hooked = await options.onResponse?.(response, { request });\n\n return hooked instanceof Response ? hooked : response;\n}\n\nfunction preserveCloudflareStreamedHtmlResponse(response: Response): Response {\n if (\n response.headers.get(\"x-mreact-stream\") !== \"1\" ||\n !isHtmlContentType(response.headers.get(\"content-type\"))\n ) {\n return response;\n }\n\n const headers = new Headers(response.headers);\n const cacheControl = headers.get(\"cache-control\");\n\n if (!cacheControlHasDirective(cacheControl, \"no-transform\")) {\n headers.set(\n \"cache-control\",\n cacheControl === null || cacheControl.trim() === \"\"\n ? \"no-transform\"\n : `${cacheControl}, no-transform`,\n );\n }\n\n if (headers.get(\"content-encoding\") === null) {\n headers.set(\"content-encoding\", \"identity\");\n }\n\n return new Response(response.body, {\n headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\nfunction isHtmlContentType(contentType: string | null): boolean {\n return contentType?.toLowerCase().split(\";\", 1)[0]?.trim() === \"text/html\";\n}\n\nfunction cacheControlHasDirective(cacheControl: string | null, directive: string): boolean {\n if (cacheControl === null) {\n return false;\n }\n\n const normalizedDirective = directive.toLowerCase();\n return cacheControl.split(\",\").some((part) => part.trim().toLowerCase() === normalizedDirective);\n}\n\nfunction prerenderedResponse(\n prerenderedRoutes: Record<string, BuiltPrerenderedRoute> | undefined,\n path: string,\n method: string,\n isNavigation: boolean,\n): Response | undefined {\n if (method !== \"GET\" && method !== \"HEAD\") {\n return undefined;\n }\n\n const prerendered = prerenderedRoutes?.[path];\n\n if (prerendered === undefined) {\n return undefined;\n }\n\n if (isNavigation && !prerendered.html.includes(\"data-mreact-route-id\")) {\n return cloudflareDocumentReloadNavigationResponse();\n }\n\n return new Response(method === \"HEAD\" ? null : prerendered.html, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n}\n\nfunction cloudflareRouteRequiresModule(route: AppRoute, manifest: BuiltServerManifest): boolean {\n return (\n route.kind === \"metadata\" ||\n route.kind === \"server\" ||\n (route.kind === \"page\" &&\n (route.segments.some((segment) => segment.kind !== \"static\") ||\n manifest.prerenderedRoutes?.[route.path] === undefined))\n );\n}\n\nfunction cloudflareRouteGlobKeyMatchesRoute(key: string, routeFile: string): boolean {\n const normalizedKey = normalizeCloudflareRouteModulePath(key);\n const normalizedRoute = normalizeCloudflareRouteModulePath(routeFile);\n\n return normalizedKey === normalizedRoute || normalizedKey.endsWith(`/${normalizedRoute}`);\n}\n\nfunction normalizeCloudflareRouteModulePath(path: string): string {\n const withoutPrefix = path.replace(/\\\\/g, \"/\").replace(/^\\.\\//, \"\").replace(/^\\/+/, \"\");\n\n return withoutPrefix.replace(/\\.(?:mjs|js|ts|tsx)$/, \"\");\n}\n\nfunction matchCloudflareRoute(\n routes: readonly AppRoute[],\n pathname: string,\n): { params: Record<string, readonly string[] | string>; route: AppRoute } | undefined {\n const normalizedPath = normalizeRoutePath(pathname);\n const pathSegments = normalizedPath === \"/\" ? [] : normalizedPath.slice(1).split(\"/\");\n\n for (const route of routes) {\n const params: Record<string, readonly string[] | string> = {};\n const catchAllIndex = route.segments.findIndex((segment) => segment.kind === \"catch-all\");\n\n if (catchAllIndex === -1 && route.segments.length !== pathSegments.length) {\n continue;\n }\n\n if (\n catchAllIndex !== -1 &&\n pathSegments.length < catchAllIndex + 1 + route.segments.length - catchAllIndex - 1\n ) {\n continue;\n }\n\n let matched = true;\n\n for (const [index, segment] of route.segments.entries()) {\n const value = pathSegments[index];\n\n if (value === undefined) {\n matched = false;\n break;\n }\n\n if (segment.kind === \"static\") {\n if (segment.value !== value) {\n matched = false;\n break;\n }\n continue;\n }\n\n if (segment.kind === \"dynamic\") {\n const decoded = safeDecodePathSegment(value);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n params[segment.name] = decoded;\n continue;\n }\n\n const suffixSegments = route.segments.slice(index + 1);\n const catchAllEnd = pathSegments.length - suffixSegments.length;\n\n if (catchAllEnd <= index) {\n matched = false;\n break;\n }\n\n const decodedParts: string[] = [];\n for (const part of pathSegments.slice(index, catchAllEnd)) {\n const decoded = safeDecodePathSegment(part);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n decodedParts.push(decoded);\n }\n params[segment.name] = decodedParts;\n\n for (let suffixIndex = 0; suffixIndex < suffixSegments.length; suffixIndex += 1) {\n const suffixSegment = suffixSegments[suffixIndex];\n const suffixValue = pathSegments[catchAllEnd + suffixIndex];\n\n if (suffixSegment === undefined || suffixValue === undefined) {\n matched = false;\n break;\n }\n\n if (suffixSegment.kind === \"static\") {\n if (suffixSegment.value !== suffixValue) {\n matched = false;\n break;\n }\n continue;\n }\n\n if (suffixSegment.kind === \"dynamic\") {\n const decoded = safeDecodePathSegment(suffixValue);\n if (decoded === undefined) {\n matched = false;\n break;\n }\n params[suffixSegment.name] = decoded;\n continue;\n }\n\n matched = false;\n break;\n }\n\n break;\n }\n\n if (matched) {\n return { params, route };\n }\n }\n\n return undefined;\n}\n\nfunction compareCloudflareRoutes(a: AppRoute, b: AppRoute): number {\n const scoreDelta = routeSpecificityScore(b) - routeSpecificityScore(a);\n\n return scoreDelta === 0\n ? a.path.localeCompare(b.path) || a.kind.localeCompare(b.kind)\n : scoreDelta;\n}\n\nfunction routeSpecificityScore(route: AppRoute): number {\n return route.segments.reduce((score, segment) => {\n if (segment.kind === \"static\") {\n return score + 100;\n }\n\n if (segment.kind === \"dynamic\") {\n return score + 10;\n }\n\n return score;\n }, route.segments.length);\n}\n\nfunction safeDecodePathSegment(segment: string): string | undefined {\n try {\n return decodeURIComponent(segment);\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeAssetPrefix(prefix: string): string {\n const withLeadingSlash = prefix.startsWith(\"/\") ? prefix : `/${prefix}`;\n\n return withLeadingSlash.endsWith(\"/\") ? withLeadingSlash : `${withLeadingSlash}/`;\n}\n\nfunction withCloudflareHydrationMarkers(options: {\n data: unknown;\n html: string;\n manifest: CloudflareClientManifest;\n params: Record<string, readonly string[] | string>;\n request: Request;\n routePath: string;\n}): string {\n const marker = cloudflareHydrationMarkerParts(options);\n\n return marker.prefix === \"\" && marker.suffix === \"\"\n ? options.html\n : `${marker.prefix}${options.html}${marker.suffix}`;\n}\n\nfunction cloudflareHydrationMarkerParts(options: {\n data: unknown;\n manifest: CloudflareClientManifest;\n params: Record<string, readonly string[] | string>;\n request: Request;\n routePath: string;\n}): { prefix: string; suffix: string } {\n const route = options.manifest.routes.find(\n (route) => route.path === options.routePath && route.client === true,\n );\n\n if (route?.script === undefined) {\n return { prefix: \"\", suffix: \"\" };\n }\n\n const routeId = route.routeId ?? cloudflareRouteIdForPath(options.routePath);\n const escapedRouteId = escapeHtmlAttribute(routeId);\n const propsJson = escapeScriptJson(\n JSON.stringify({\n params: options.params,\n request: { url: options.request.url },\n data: options.data,\n }),\n );\n const clientReferencesJson =\n route.clientReferenceManifest === undefined || route.clientReferenceManifest.length === 0\n ? undefined\n : escapeScriptJson(JSON.stringify(route.clientReferenceManifest));\n\n return {\n prefix: `<div data-mreact-route-id=\"${escapedRouteId}\">`,\n suffix: [\n \"</div>\",\n `<script type=\"application/json\" id=\"mreact-props-${escapedRouteId}\">${propsJson}</script>`,\n clientReferencesJson === undefined\n ? undefined\n : `<script type=\"application/json\" id=\"mreact-client-references-${escapedRouteId}\">${clientReferencesJson}</script>`,\n `<script type=\"module\" src=\"/_mreact/client/${escapeHtmlAttribute(route.script)}\"></script>`,\n ]\n .filter((part): part is string => part !== undefined)\n .join(\"\"),\n };\n}\n\nfunction escapeScriptJson(json: string): string {\n return escapeJsonForHtml(json);\n}\n\nfunction escapeJsonForHtml(value: string): string {\n return value\n .replaceAll(\"&\", \"\\\\u0026\")\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\">\", \"\\\\u003e\")\n .replaceAll(\"\\u2028\", \"\\\\u2028\")\n .replaceAll(\"\\u2029\", \"\\\\u2029\");\n}\n\nfunction cloudflareRouteIdForPath(path: string): string {\n if (path === \"/\") {\n return \"index\";\n }\n\n return path\n .slice(1)\n .replaceAll(\"/\", \"_\")\n .replaceAll(\":\", \"_\")\n .replace(/[^A-Za-z0-9_$-]/g, \"_\");\n}\n\nasync function loadCloudflareRouteModule<Env>(\n modules: CloudflareRouteModuleRegistry<Env>,\n file: string,\n): Promise<CloudflareRouteModuleRegistryEntry<Env> | undefined> {\n const entry = modules[file];\n\n return typeof entry === \"function\" ? await entry() : entry;\n}\n\nfunction cloudflareModulePreloadTag(manifest: CloudflareClientManifest, routePath: string): string {\n const script = manifest.routes.find((route) => route.path === routePath)?.script;\n\n return script === undefined\n ? \"\"\n : `<link rel=\"modulepreload\" href=\"/_mreact/client/${escapeHtmlAttribute(script)}\">`;\n}\n\nasync function resolveCloudflareRouteMetadata<Data, Env>(\n modules: readonly CloudflareRouteModule<Data, Env>[],\n context: GenerateMetadataContext<Data>,\n): Promise<RouteMetadata | undefined> {\n const metadata: RouteMetadata[] = [];\n\n for (const module of modules) {\n let next = validateRouteMetadata(module.metadata);\n\n if (module.generateMetadata !== undefined) {\n const generated = await module.generateMetadata(context);\n next = mergeCloudflareRouteMetadata(\n [next, validateRouteMetadata(generated, \"generateMetadata\")].filter(\n isCloudflareRouteMetadata,\n ),\n );\n }\n\n if (next !== undefined) {\n metadata.push(next);\n }\n }\n\n return validateRouteMetadata(mergeCloudflareRouteMetadata(metadata));\n}\n\nfunction isCloudflareRouteMetadata(value: RouteMetadata | undefined): value is RouteMetadata {\n return value !== undefined;\n}\n\nfunction mergeCloudflareRouteMetadata(\n metadata: readonly RouteMetadata[],\n): RouteMetadata | undefined {\n if (metadata.length === 0) {\n return undefined;\n }\n\n return metadata.reduce<RouteMetadata>((merged, next) => {\n const openGraph = mergeCloudflareMetadataObject(merged.openGraph, next.openGraph);\n const openGraphImages = mergeCloudflareMetadataArrays(\n merged.openGraph?.images,\n next.openGraph?.images,\n );\n\n const alternates = mergeCloudflareMetadataObject(merged.alternates, next.alternates);\n const csp = mergeCloudflareMetadataObject(merged.csp, next.csp);\n const head = mergeCloudflareMetadataArrays(merged.head, next.head);\n const icons = mergeCloudflareMetadataObject(merged.icons, next.icons);\n const mergedMetadata: RouteMetadata = {\n ...merged,\n ...next,\n ...(alternates === undefined ? {} : { alternates }),\n ...(csp === undefined ? {} : { csp }),\n ...(head === undefined ? {} : { head }),\n ...(icons === undefined ? {} : { icons }),\n ...(openGraph === undefined && openGraphImages === undefined\n ? {}\n : {\n openGraph: {\n ...openGraph,\n ...(openGraphImages === undefined ? {} : { images: openGraphImages }),\n },\n }),\n };\n\n return mergedMetadata;\n }, {});\n}\n\nfunction mergeCloudflareMetadataObject<T extends object>(\n left: T | undefined,\n right: T | undefined,\n): T | undefined {\n if (left === undefined) {\n return right;\n }\n if (right === undefined) {\n return left;\n }\n\n return { ...left, ...right };\n}\n\nfunction mergeCloudflareMetadataArrays<T>(\n left: readonly T[] | undefined,\n right: readonly T[] | undefined,\n): readonly T[] | undefined {\n if (left === undefined || left.length === 0) {\n return right;\n }\n if (right === undefined || right.length === 0) {\n return left;\n }\n\n return [...left, ...right];\n}\n\nfunction defaultCloudflareDocument(\n body: string,\n modulePreload: string,\n metadata: RouteMetadata | undefined,\n): string {\n return `<!DOCTYPE html><html><head>${modulePreload}${cloudflareMetadataTitle(metadata)}</head><body>${body}</body></html>`;\n}\n\nfunction cloudflareMetadataTitle(metadata: RouteMetadata | undefined): string {\n if (metadata?.title === undefined) {\n return \"\";\n }\n\n return `<title>${escapeHtmlText(metadataString(metadata.title))}</title>`;\n}\n\nfunction metadataString(value: boolean | number | string): string {\n return String(value);\n}\n\nfunction serializeCloudflareRobots(manifest: RobotsManifest): string {\n const lines: string[] = [];\n const rules =\n manifest.rules === undefined\n ? []\n : Array.isArray(manifest.rules)\n ? manifest.rules\n : [manifest.rules];\n\n for (const rule of rules) {\n for (const userAgent of arrayValue(rule.userAgent)) {\n lines.push(`User-agent: ${userAgent}`);\n }\n for (const allow of arrayValue(rule.allow)) {\n lines.push(`Allow: ${allow}`);\n }\n for (const disallow of arrayValue(rule.disallow)) {\n lines.push(`Disallow: ${disallow}`);\n }\n }\n\n for (const sitemap of arrayValue(manifest.sitemap)) {\n lines.push(`Sitemap: ${sitemap}`);\n }\n if (manifest.host !== undefined) {\n lines.push(`Host: ${manifest.host}`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction serializeCloudflareSitemap(entries: readonly SitemapEntry[]): string {\n const urls = entries\n .map((entry) => {\n const fields = [\n `<loc>${escapeXml(entry.url)}</loc>`,\n entry.lastModified === undefined\n ? undefined\n : `<lastmod>${escapeXml(sitemapDate(entry.lastModified))}</lastmod>`,\n entry.changeFrequency === undefined\n ? undefined\n : `<changefreq>${escapeXml(entry.changeFrequency)}</changefreq>`,\n entry.priority === undefined ? undefined : `<priority>${entry.priority}</priority>`,\n ].filter((field): field is string => field !== undefined);\n\n return `<url>${fields.join(\"\")}</url>`;\n })\n .join(\"\");\n\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?><urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">${urls}</urlset>`;\n}\n\nfunction sitemapDate(value: Date | number | string): string {\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n return typeof value === \"number\" ? new Date(value).toISOString() : value;\n}\n\nfunction arrayValue<T>(value: T | readonly T[] | undefined): readonly T[] {\n if (value === undefined) {\n return [];\n }\n\n return Array.isArray(value) ? (value as readonly T[]) : [value as T];\n}\n\nfunction escapeXml(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\");\n}\n\nfunction cloudflareNotFoundResponse(request: Request): Response {\n return withDefaultSecurityHeaders(\n new Response(\"<!DOCTYPE html><html><head></head><body>Not Found</body></html>\", {\n headers: { \"content-type\": \"text/html; charset=utf-8\" },\n status: 404,\n }),\n request,\n );\n}\n\nfunction prerenderCacheRequest(options: CloudflarePrerenderStoreOptions, path: string): Request {\n const origin = options.keyOrigin ?? defaultPrerenderCacheOrigin;\n const prefix = options.keyPrefix ?? defaultPrerenderCachePrefix;\n const normalizedPath = normalizeRoutePath(path.startsWith(\"/\") ? path : `/${path}`);\n const url = new URL(`${normalizePrerenderPrefix(prefix)}${normalizedPath}`, origin);\n\n return new Request(url, { method: \"GET\" });\n}\n\nfunction normalizePrerenderPrefix(prefix: string): string {\n const withLeadingSlash = prefix.startsWith(\"/\") ? prefix : `/${prefix}`;\n\n return withLeadingSlash.replace(/\\/+$/, \"\");\n}\n"]}
|