@reckona/mreact-router 0.0.202 → 0.0.203
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/README.md +5 -2
- package/dist/actions.d.ts +2 -3
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +61 -41
- package/dist/actions.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts +3 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +26 -10
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/build.d.ts +3 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +98 -12
- package/dist/build.js.map +1 -1
- package/dist/cache.d.ts +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +5 -4
- package/dist/cache.js.map +1 -1
- package/dist/cli-options.d.ts +3 -0
- package/dist/cli-options.d.ts.map +1 -1
- package/dist/cli-options.js +10 -2
- package/dist/cli-options.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +5 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +11 -2
- package/dist/client.js.map +1 -1
- package/dist/navigation-marker.d.ts +2 -0
- package/dist/navigation-marker.d.ts.map +1 -0
- package/dist/navigation-marker.js +294 -0
- package/dist/navigation-marker.js.map +1 -0
- package/dist/navigation-runtime.d.ts +1 -1
- package/dist/navigation-runtime.d.ts.map +1 -1
- package/dist/navigation-runtime.js +1 -1
- package/dist/navigation-runtime.js.map +1 -1
- package/dist/prerender-entry.d.ts +3 -1
- package/dist/prerender-entry.d.ts.map +1 -1
- package/dist/prerender-entry.js +61 -3
- package/dist/prerender-entry.js.map +1 -1
- package/dist/render.d.ts +7 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +51 -23
- package/dist/render.js.map +1 -1
- package/dist/serve.d.ts +3 -0
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +54 -30
- package/dist/serve.js.map +1 -1
- package/package.json +11 -11
- package/src/actions.ts +72 -56
- package/src/adapters/cloudflare.ts +40 -10
- package/src/build.ts +107 -10
- package/src/cache.ts +10 -4
- package/src/cli-options.ts +15 -2
- package/src/cli.ts +2 -1
- package/src/client.ts +15 -2
- package/src/navigation-marker.ts +353 -0
- package/src/navigation-runtime.ts +1 -0
- package/src/prerender-entry.ts +78 -5
- package/src/render.ts +80 -24
- package/src/serve.ts +71 -34
package/dist/serve.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Server } from "node:http";
|
|
2
|
+
import type { DehydrateOptions } from "@reckona/mreact-query";
|
|
2
3
|
import type { BuiltPrerenderedRoute } from "./build.js";
|
|
3
4
|
import type { AppRouterCache } from "./cache.js";
|
|
4
5
|
import { readBuiltPublicAsset } from "./built-assets.js";
|
|
@@ -30,6 +31,7 @@ export type RequestHostPolicy = "strict" | "trusted-proxy";
|
|
|
30
31
|
* Configures rendering a request against a built app-router output directory.
|
|
31
32
|
*/
|
|
32
33
|
export interface RenderBuiltAppRequestOptions {
|
|
34
|
+
dehydrateOptions?: DehydrateOptions | undefined;
|
|
33
35
|
outDir: string;
|
|
34
36
|
importPolicy?: AppRouterImportPolicy | undefined;
|
|
35
37
|
instrumentation?: RouterInstrumentation | undefined;
|
|
@@ -70,6 +72,7 @@ export interface BuiltAppRuntimePreloadStrategy {
|
|
|
70
72
|
* Configures the Node HTTP server used to serve a built app-router output.
|
|
71
73
|
*/
|
|
72
74
|
export interface StartServerOptions {
|
|
75
|
+
dehydrateOptions?: DehydrateOptions | undefined;
|
|
73
76
|
outDir: string;
|
|
74
77
|
port: number;
|
|
75
78
|
hostname?: string;
|
package/dist/serve.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.js
CHANGED
|
@@ -11,7 +11,7 @@ import { emitRouterLog, logDurationMs, logNow, } from "./logger.js";
|
|
|
11
11
|
import { startNodeRequestServer } from "./node-server.js";
|
|
12
12
|
import { builtAppRuntimePreloadPlan } from "./preload-policy.js";
|
|
13
13
|
import { normalizeRoutePath } from "./route-path.js";
|
|
14
|
-
import { isCurrentPrerenderedRoute, isVisitorDependentResponse, PRERENDERED_ROUTE_SCHEMA_VERSION, } from "./prerender-entry.js";
|
|
14
|
+
import { isCurrentPrerenderedRoute, isVisitorDependentResponse, PRERENDERED_ROUTE_SCHEMA_VERSION, replayedPrerenderedRouteHeaders, storedPrerenderedRouteHeaders, } from "./prerender-entry.js";
|
|
15
15
|
const builtRuntimeCache = new Map();
|
|
16
16
|
const builtRuntimeReadInflight = new Map();
|
|
17
17
|
let builtRuntimeMaterializeCountForTest = 0;
|
|
@@ -205,7 +205,7 @@ async function renderBuiltAppRequestWithRuntime(options) {
|
|
|
205
205
|
const prerendered = options.prerenderStore === undefined
|
|
206
206
|
? options.runtime.prerenderedRoutes.get(normalizedPath)
|
|
207
207
|
: await readPrerenderedRoute(options.runtime, normalizedPath, options.prerenderStore);
|
|
208
|
-
const prerenderedResponse = prerenderedRouteResponse(prerendered, request
|
|
208
|
+
const prerenderedResponse = prerenderedRouteResponse(prerendered, request);
|
|
209
209
|
if (prerenderedResponse !== undefined) {
|
|
210
210
|
return prerenderedResponse;
|
|
211
211
|
}
|
|
@@ -230,7 +230,7 @@ async function renderBuiltAppRequestWithRuntime(options) {
|
|
|
230
230
|
const prerendered = options.prerenderStore === undefined
|
|
231
231
|
? options.runtime.prerenderedRoutes.get(normalizedPath)
|
|
232
232
|
: await readPrerenderedRoute(options.runtime, normalizedPath, options.prerenderStore);
|
|
233
|
-
const prerenderedResponse = prerenderedRouteResponse(prerendered, request
|
|
233
|
+
const prerenderedResponse = prerenderedRouteResponse(prerendered, request);
|
|
234
234
|
if (prerenderedResponse !== undefined) {
|
|
235
235
|
emitBuiltRenderTiming(options, request, timing, prerenderedResponse.status);
|
|
236
236
|
return prerenderedResponse;
|
|
@@ -256,18 +256,23 @@ async function renderBuiltAppRequestWithRuntime(options) {
|
|
|
256
256
|
? await materializeResponseAsBuffer(response)
|
|
257
257
|
: response;
|
|
258
258
|
}
|
|
259
|
-
function prerenderedRouteResponse(prerendered,
|
|
259
|
+
function prerenderedRouteResponse(prerendered, request) {
|
|
260
260
|
if (!isCurrentPrerenderedRoute(prerendered)) {
|
|
261
261
|
return undefined;
|
|
262
262
|
}
|
|
263
|
-
|
|
263
|
+
const navigation = request.headers.get("x-mreact-navigation") === "1";
|
|
264
|
+
const html = navigation ? prerendered.navigationHtml : prerendered.html;
|
|
265
|
+
if (html === undefined) {
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
if (request.method === "HEAD") {
|
|
264
269
|
return new Response(null, {
|
|
265
|
-
headers: prerendered
|
|
270
|
+
headers: replayedPrerenderedRouteHeaders(prerendered, request),
|
|
266
271
|
status: prerendered.status,
|
|
267
272
|
});
|
|
268
273
|
}
|
|
269
|
-
return htmlResponse(
|
|
270
|
-
headers: prerendered
|
|
274
|
+
return htmlResponse(html, {
|
|
275
|
+
headers: replayedPrerenderedRouteHeaders(prerendered, request),
|
|
271
276
|
status: prerendered.status,
|
|
272
277
|
});
|
|
273
278
|
}
|
|
@@ -368,6 +373,7 @@ export async function startServer(options) {
|
|
|
368
373
|
resolveHost: resolveRequestHost,
|
|
369
374
|
trustForwardedProto: options.trustForwardedProto,
|
|
370
375
|
render: (request) => runtime.render(request, {
|
|
376
|
+
dehydrateOptions: options.dehydrateOptions,
|
|
371
377
|
instrumentation: options.instrumentation,
|
|
372
378
|
logger: options.logger,
|
|
373
379
|
onResponse: options.onResponse,
|
|
@@ -529,6 +535,7 @@ function builtRenderAppRequestOptions(options) {
|
|
|
529
535
|
clientScripts: options.runtime.clientScripts,
|
|
530
536
|
clientStylesByFile: options.runtime.clientStylesByFile,
|
|
531
537
|
clientStyles: options.runtime.clientStyles,
|
|
538
|
+
dehydrateOptions: options.dehydrateOptions,
|
|
532
539
|
importPolicy: {
|
|
533
540
|
...options.importPolicy,
|
|
534
541
|
allowedSourceDirs: options.runtime.allowedSourceDirs,
|
|
@@ -565,7 +572,10 @@ function mergeBuiltServerActionOptions(options, allowedActions) {
|
|
|
565
572
|
};
|
|
566
573
|
}
|
|
567
574
|
async function renderAndCachePrerenderWithLock(options, path) {
|
|
568
|
-
const
|
|
575
|
+
const lockKey = options.request.headers.get("x-mreact-navigation") === "1"
|
|
576
|
+
? `${path}\0navigation`
|
|
577
|
+
: path;
|
|
578
|
+
const existing = options.runtime.prerenderLocks.get(lockKey);
|
|
569
579
|
if (existing !== undefined) {
|
|
570
580
|
const result = await existing;
|
|
571
581
|
if (result.shareable) {
|
|
@@ -574,23 +584,24 @@ async function renderAndCachePrerenderWithLock(options, path) {
|
|
|
574
584
|
return (await runPrerenderRegeneration(options, path)).response;
|
|
575
585
|
}
|
|
576
586
|
const task = runPrerenderRegeneration(options, path);
|
|
577
|
-
options.runtime.prerenderLocks.set(
|
|
587
|
+
options.runtime.prerenderLocks.set(lockKey, task);
|
|
578
588
|
try {
|
|
579
589
|
return cloneResponse((await task).response);
|
|
580
590
|
}
|
|
581
591
|
finally {
|
|
582
|
-
options.runtime.prerenderLocks.delete(
|
|
592
|
+
options.runtime.prerenderLocks.delete(lockKey);
|
|
583
593
|
}
|
|
584
594
|
}
|
|
585
595
|
async function runPrerenderRegeneration(options, path) {
|
|
596
|
+
const lockKey = options.request.headers.get("x-mreact-navigation") === "1"
|
|
597
|
+
? `${path}\0navigation`
|
|
598
|
+
: path;
|
|
586
599
|
const regenerate = async () => {
|
|
587
600
|
const stored = await readPrerenderedRoute(options.runtime, path, options.prerenderStore);
|
|
588
|
-
|
|
601
|
+
const storedResponse = prerenderedRouteResponse(stored, options.request);
|
|
602
|
+
if (storedResponse !== undefined) {
|
|
589
603
|
return {
|
|
590
|
-
response:
|
|
591
|
-
headers: stored.headers,
|
|
592
|
-
status: stored.status,
|
|
593
|
-
}),
|
|
604
|
+
response: storedResponse,
|
|
594
605
|
shareable: true,
|
|
595
606
|
};
|
|
596
607
|
}
|
|
@@ -598,7 +609,10 @@ async function runPrerenderRegeneration(options, path) {
|
|
|
598
609
|
// render that depended on this visitor's request headers must not become
|
|
599
610
|
// one; it is returned to the caller without being stored. The signal starts
|
|
600
611
|
// closed so that a render which never reports back is not stored either.
|
|
601
|
-
const renderSignals = {
|
|
612
|
+
const renderSignals = {
|
|
613
|
+
headerDependent: () => true,
|
|
614
|
+
strictTransportSecurity: () => undefined,
|
|
615
|
+
};
|
|
602
616
|
const response = await renderBuiltDynamicResponse({ ...options, renderSignals });
|
|
603
617
|
if (!response.ok) {
|
|
604
618
|
return { response, shareable: false };
|
|
@@ -615,14 +629,24 @@ async function runPrerenderRegeneration(options, path) {
|
|
|
615
629
|
shareable: false,
|
|
616
630
|
};
|
|
617
631
|
}
|
|
632
|
+
const navigation = options.request.headers.get("x-mreact-navigation") === "1";
|
|
633
|
+
if (navigation && stored === undefined) {
|
|
634
|
+
return {
|
|
635
|
+
response: htmlResponse(body, {
|
|
636
|
+
headers: response.headers,
|
|
637
|
+
status: response.status,
|
|
638
|
+
}),
|
|
639
|
+
shareable: false,
|
|
640
|
+
};
|
|
641
|
+
}
|
|
618
642
|
return {
|
|
619
|
-
response: await cacheRegeneratedPrerenderedRoute(options.runtime, path, body, response, options.prerenderStore),
|
|
643
|
+
response: await cacheRegeneratedPrerenderedRoute(options.runtime, path, body, response, renderSignals.strictTransportSecurity(), options.prerenderStore, navigation ? stored : undefined),
|
|
620
644
|
shareable: true,
|
|
621
645
|
};
|
|
622
646
|
};
|
|
623
647
|
return options.prerenderStore?.withLock === undefined
|
|
624
648
|
? await regenerate()
|
|
625
|
-
: await options.prerenderStore.withLock(
|
|
649
|
+
: await options.prerenderStore.withLock(lockKey, regenerate);
|
|
626
650
|
}
|
|
627
651
|
async function applyBuiltPrerenderInvalidations(runtime, response, store) {
|
|
628
652
|
const revalidated = response.headers.get("x-mreact-revalidate");
|
|
@@ -635,17 +659,17 @@ async function applyBuiltPrerenderInvalidations(runtime, response, store) {
|
|
|
635
659
|
await store?.delete(normalized);
|
|
636
660
|
}
|
|
637
661
|
}
|
|
638
|
-
async function cacheRegeneratedPrerenderedRoute(runtime, path, body, response, store) {
|
|
639
|
-
const headers =
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
662
|
+
async function cacheRegeneratedPrerenderedRoute(runtime, path, body, response, strictTransportSecurity, store, existing) {
|
|
663
|
+
const headers = storedPrerenderedRouteHeaders(response.headers);
|
|
664
|
+
const entry = existing === undefined
|
|
665
|
+
? {
|
|
666
|
+
headers,
|
|
667
|
+
html: body,
|
|
668
|
+
schemaVersion: PRERENDERED_ROUTE_SCHEMA_VERSION,
|
|
669
|
+
status: response.status,
|
|
670
|
+
...(strictTransportSecurity === undefined ? {} : { strictTransportSecurity }),
|
|
671
|
+
}
|
|
672
|
+
: { ...existing, navigationHtml: body };
|
|
649
673
|
runtime.prerenderedRoutes.set(path, entry);
|
|
650
674
|
await store?.set(path, entry);
|
|
651
675
|
return htmlResponse(body, {
|
package/dist/serve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Server } from \"node:http\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { BuiltPrerenderedRoute } from \"./build.js\";\nimport type { AppRouterCache } from \"./cache.js\";\nimport {\n builtClientAssetPathname,\n clearBuiltPublicAssetCacheForTest,\n getBuiltPublicAssetCacheSizeForTest,\n readBuiltClientAsset,\n readBuiltPublicAsset,\n} from \"./built-assets.js\";\nimport {\n materializeBuiltRuntime,\n mergeBuiltRuntimeImportPolicy,\n readBuiltImportPolicyText,\n type BuiltRuntime,\n} from \"./built-runtime.js\";\nimport {\n allBuiltServerModuleFiles,\n loadBuiltResponseHookArtifacts,\n loadBuiltServerModuleArtifacts,\n loadBuiltServerModuleArtifactsForRequest,\n} from \"./built-server-module-artifacts.js\";\nimport {\n type AppRoute,\n type MatchedRoute,\n} from \"./routes.js\";\nimport type { AppRouterServerActionOptions } from \"./actions.js\";\nimport type { AppRouterImportPolicy } from \"./import-policy.js\";\nimport {\n preloadBuiltRequestModules,\n renderAppRequest,\n resolveAppRouterResponseHook,\n resolveAppRouterMiddleware,\n type AppRouterServerRenderArtifactLoader,\n type AppRouterRenderPreload,\n type AppRouterResponseHook,\n type RenderAppRequestRuntimeOptions,\n} from \"./render.js\";\nimport {\n invokeRouterInstrumentation,\n traceContextFromRequest,\n type RouterInstrumentation,\n} from \"./trace.js\";\nimport {\n bytesResponse,\n htmlResponse,\n} from \"./http.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logNow,\n type AppRouterLogger,\n} from \"./logger.js\";\nimport { startNodeRequestServer } from \"./node-server.js\";\nimport { builtAppRuntimePreloadPlan } from \"./preload-policy.js\";\nimport { normalizeRoutePath } from \"./route-path.js\";\nimport type { HttpUpgradeHandler } from \"./upgrade.js\";\nimport {\n isCurrentPrerenderedRoute,\n isVisitorDependentResponse,\n PRERENDERED_ROUTE_SCHEMA_VERSION,\n} from \"./prerender-entry.js\";\n\ninterface BuiltRuntimeCacheEntry {\n clientManifestText: string;\n importPolicyText: string | undefined;\n runtime: Promise<BuiltRuntime>;\n serverManifestText: string;\n}\n\nconst builtRuntimeCache = new Map<string, BuiltRuntimeCacheEntry>();\nconst builtRuntimeReadInflight = new Map<string, Promise<BuiltRuntime>>();\nlet builtRuntimeMaterializeCountForTest = 0;\n\n/**\n * Strategy for the final response body shape sent to the HTTP layer.\n *\n * - `\"string\"` (default, cross-runtime): body is the raw HTML string. The\n * underlying runtime encodes to UTF-8 bytes when writing to the socket.\n * - `\"buffer\"` (Node only): materialize the response body into a Buffer\n * before returning. Skips the implicit encode at the Response → socket\n * boundary and can let Node's HTTP layer write bytes directly.\n *\n * The buffer path forces full materialization of streaming responses\n * (loses TTFB streaming) — only opt in if the throughput gain outweighs\n * that on your workload.\n */\nexport type ResponseSinkStrategy = \"string\" | \"buffer\";\n/**\n * Controls whether built request handling trusts the incoming Host header.\n */\nexport type RequestHostPolicy = \"strict\" | \"trusted-proxy\";\n\nlet warnedImplicitHostTrust = false;\n\n/**\n * Configures rendering a request against a built app-router output directory.\n */\nexport interface RenderBuiltAppRequestOptions {\n outDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n request: Request;\n routeCache?: AppRouterCache | undefined;\n runtimeDir?: string | undefined;\n immutableRuntime?: boolean | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy;\n preload?: AppRouterRenderPreload | undefined;\n}\n\nexport interface BuiltRequestRuntimeOptions {\n immutableRuntime?: boolean | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n outDir: string;\n runtimeDir?: string | undefined;\n}\n\nexport type BuiltRequestRuntimeRenderOptions = Omit<\n RenderBuiltAppRequestOptions,\n \"immutableRuntime\" | \"outDir\" | \"request\" | \"runtimeDir\"\n>;\n\nexport interface BuiltRequestRuntime {\n preload(preload?: BuiltAppRuntimePreloadStrategy | undefined): Promise<void>;\n render(\n request: Request,\n options?: BuiltRequestRuntimeRenderOptions | undefined,\n ): Promise<Response>;\n}\n\n/**\n * Selects which built runtime modules should be preloaded.\n */\nexport type BuiltAppRuntimePreloadMode =\n | \"all\"\n | \"hot-route-requests\"\n | \"hot-routes\"\n | \"middleware\"\n | \"none\";\n\n/**\n * Configures built app runtime preload scope and optional hot routes.\n */\nexport interface BuiltAppRuntimePreloadStrategy {\n mode: BuiltAppRuntimePreloadMode;\n routes?: readonly string[] | undefined;\n}\n\n/**\n * Configures the Node HTTP server used to serve a built app-router output.\n */\nexport interface StartServerOptions {\n outDir: string;\n port: number;\n hostname?: string;\n // Optional hook for customizing the 500 response. The default returns\n // a generic \"Internal Server Error\" body and logs the stack to stderr\n // via console.error. Issue 071: stack traces must never end up in\n // production responses.\n errorHandler?: (error: unknown) => { body: string; status: number; headers?: Record<string, string> };\n // When set, an incoming Host header that does not exactly match one of\n // the listed values is replaced with the configured hostname/port for\n // origin reconstruction. Use this in front of public deployments to\n // block Host header injection (Issue 068). Undefined preserves the\n // legacy \"trust Host\" behavior for backward compatibility when\n // hostPolicy is not configured.\n allowedHosts?: readonly string[] | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n routeCache?: AppRouterCache | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy;\n onUpgrade?: HttpUpgradeHandler | undefined;\n /**\n * Trusts the first `X-Forwarded-Proto` value when the socket is not TLS.\n *\n * Defaults to `false`. Enable only behind a proxy that overwrites the header\n * and prevents untrusted clients from reaching the Node listener directly.\n */\n trustForwardedProto?: boolean | undefined;\n}\n\nexport function resolveRequestHost(options: {\n allowedHosts?: readonly string[] | undefined;\n fallbackHost: string;\n hostPolicy?: RequestHostPolicy | undefined;\n rawHost: string | undefined;\n}): string {\n const raw = options.rawHost;\n if (raw === undefined || raw === \"\") return options.fallbackHost;\n if (options.allowedHosts === undefined) {\n return options.hostPolicy === \"strict\" ? options.fallbackHost : raw;\n }\n return options.allowedHosts.includes(raw) ? raw : options.fallbackHost;\n}\n\nexport function warnIfImplicitHostTrust(options: {\n allowedHosts?: readonly string[] | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n}): void {\n if (\n process.env.NODE_ENV !== \"production\" ||\n options.allowedHosts !== undefined ||\n options.hostPolicy !== undefined ||\n warnedImplicitHostTrust\n ) {\n return;\n }\n\n warnedImplicitHostTrust = true;\n console.error(\n \"[mreact] Host header trust is implicit because neither allowedHosts nor hostPolicy is configured. Set allowedHosts for public deployments, hostPolicy: \\\"strict\\\" to reject unlisted Host headers, or hostPolicy: \\\"trusted-proxy\\\" when a trusted reverse proxy normalizes Host.\",\n );\n}\n\n/**\n * Defines storage for prerendered route responses used by built request rendering.\n */\nexport interface AppRouterPrerenderStore {\n delete(path: string): void | Promise<void>;\n get(path: string): BuiltPrerenderedRoute | undefined | Promise<BuiltPrerenderedRoute | undefined>;\n set(path: string, entry: BuiltPrerenderedRoute): void | Promise<void>;\n withLock?<T>(path: string, task: () => Promise<T>): Promise<T>;\n}\n\nexport async function createBuiltRequestRuntime(\n options: BuiltRequestRuntimeOptions,\n): Promise<BuiltRequestRuntime> {\n const runtime = await readBuiltRuntime({\n immutable: options.immutableRuntime,\n outDir: options.outDir,\n runtimeDir: options.runtimeDir,\n });\n const defaultImportPolicy = mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy);\n\n return {\n preload(preload) {\n return preloadBuiltAppRuntimeWithRuntime({\n importPolicy: defaultImportPolicy,\n preload,\n runtime,\n });\n },\n async render(request, renderOptions = {}) {\n emitBuiltRequestStart(renderOptions.instrumentation, request);\n const response = await renderBuiltAppRequestWithRuntime({\n ...renderOptions,\n instrumentation: withoutBuiltRequestInstrumentation(renderOptions.instrumentation),\n importPolicy:\n renderOptions.importPolicy === undefined\n ? defaultImportPolicy\n : mergeBuiltRuntimeImportPolicy(runtime, renderOptions.importPolicy),\n outDir: options.outDir,\n request,\n runtime,\n });\n\n const finalResponse = await applyBuiltAppResponseHook(\n response,\n {\n onResponse: renderOptions.onResponse,\n request,\n },\n runtime,\n );\n emitBuiltRequestEnd(renderOptions.instrumentation, request, finalResponse.status);\n return finalResponse;\n },\n };\n}\n\n/**\n * Preloads selected modules from a built app-router runtime.\n */\nexport async function preloadBuiltAppRuntime(options: {\n importPolicy?: AppRouterImportPolicy | undefined;\n outDir: string;\n preload?: BuiltAppRuntimePreloadStrategy | undefined;\n runtimeDir?: string | undefined;\n}): Promise<void> {\n const runtime = await readBuiltRuntime({\n outDir: options.outDir,\n runtimeDir: options.runtimeDir,\n });\n await preloadBuiltAppRuntimeWithRuntime({\n importPolicy: mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy),\n preload: options.preload,\n runtime,\n });\n}\n\nasync function preloadBuiltAppRuntimeWithRuntime(options: {\n importPolicy?: AppRouterImportPolicy | undefined;\n preload?: BuiltAppRuntimePreloadStrategy | undefined;\n runtime: BuiltRuntime;\n}): Promise<void> {\n const plan = builtAppRuntimePreloadPlan(options.preload);\n\n if (!plan.shouldPreload) {\n return;\n }\n\n const routes = builtRuntimePreloadRoutes(options.runtime, plan);\n if (plan.loadAllArtifacts) {\n await loadBuiltServerModuleArtifacts(\n options.runtime,\n allBuiltServerModuleFiles(options.runtime),\n \"all\",\n );\n } else {\n await loadBuiltServerModuleArtifactsForRequest(\n options.runtime,\n undefined,\n plan.middlewareArtifacts,\n );\n for (const route of routes) {\n await loadBuiltServerModuleArtifactsForRequest(\n options.runtime,\n route.file,\n plan.routeArtifacts,\n );\n }\n }\n await preloadBuiltRequestModules({\n appDir: options.runtime.appDir,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n routes,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n serverActionReferencesByFile: options.runtime.serverActionReferencesByFile,\n includeRenderModules: plan.includeRenderModules,\n });\n}\n\nfunction builtRuntimePreloadRoutes(\n runtime: BuiltRuntime,\n strategy: BuiltAppRuntimePreloadStrategy,\n): readonly AppRoute[] {\n if (strategy.mode === \"all\") {\n return runtime.routes;\n }\n\n if (strategy.mode === \"middleware\" || strategy.mode === \"none\") {\n return [];\n }\n\n const routes = strategy.routes ?? [];\n return routes.map((path) => {\n const route = runtime.routeMatcher.match(normalizeRoutePath(path))?.route;\n if (route === undefined) {\n throw new Error(`Unknown hot route preload path: ${path}`);\n }\n return route;\n });\n}\n\n/**\n * Renders a request using a built app-router output directory.\n */\nexport async function renderBuiltAppRequest(\n options: RenderBuiltAppRequestOptions,\n): Promise<Response> {\n emitBuiltRequestStart(options.instrumentation, options.request);\n const runtime = await readBuiltRuntime({\n outDir: options.outDir,\n immutable: options.immutableRuntime,\n runtimeDir: options.runtimeDir,\n });\n const response = await renderBuiltAppRequestWithRuntime({\n ...options,\n instrumentation: withoutBuiltRequestInstrumentation(options.instrumentation),\n importPolicy: mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy),\n runtime,\n });\n\n const finalResponse = await applyBuiltAppResponseHook(response, options, runtime);\n emitBuiltRequestEnd(options.instrumentation, options.request, finalResponse.status);\n return finalResponse;\n}\n\nfunction withoutBuiltRequestInstrumentation(\n instrumentation: RouterInstrumentation | undefined,\n): RouterInstrumentation | undefined {\n if (instrumentation === undefined) {\n return undefined;\n }\n\n const { onRequestEnd: _onRequestEnd, onRequestStart: _onRequestStart, ...remaining } =\n instrumentation;\n return remaining;\n}\n\nfunction emitBuiltRequestStart(\n instrumentation: RouterInstrumentation | undefined,\n request: Request,\n): void {\n const trace = traceContextFromRequest(request);\n invokeRouterInstrumentation(instrumentation?.onRequestStart, {\n method: request.method,\n path: new URL(request.url).pathname,\n request,\n ...(trace === undefined ? {} : { trace }),\n });\n}\n\nfunction emitBuiltRequestEnd(\n instrumentation: RouterInstrumentation | undefined,\n request: Request,\n status: number,\n): void {\n const trace = traceContextFromRequest(request);\n invokeRouterInstrumentation(instrumentation?.onRequestEnd, {\n method: request.method,\n path: new URL(request.url).pathname,\n request,\n status,\n ...(trace === undefined ? {} : { trace }),\n });\n}\n\nasync function renderBuiltAppRequestWithRuntime(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): Promise<Response> {\n const url = new URL(options.request.url);\n const timing = createBuiltRenderTiming(options.logger);\n\n const clientAssetPathname = builtClientAssetPathname(options.request, url);\n\n if (clientAssetPathname !== undefined) {\n return readBuiltClientAsset(\n options.outDir,\n clientAssetPathname,\n options.runtime.clientAssetPaths,\n );\n }\n\n if (options.request.method === \"GET\" || options.request.method === \"HEAD\") {\n const publicAsset = await readBuiltPublicAsset(options.outDir, url.pathname);\n\n if (publicAsset !== undefined) {\n return publicAsset;\n }\n }\n\n let request = options.request;\n let normalizedPath = normalizeRoutePath(url.pathname);\n let matched = options.runtime.routeMatcher.match(normalizedPath);\n\n // Prerendered HTML may only be served ahead of middleware when the app has\n // no middleware at all. Otherwise a middleware that gates access (auth,\n // geo blocking, maintenance mode) would be bypassed for exactly the routes\n // it is most often used to protect.\n if (\n !options.runtime.hasMiddleware &&\n (request.method === \"GET\" || request.method === \"HEAD\")\n ) {\n // Sync fast path when no external prerender store is configured (the\n // common case): skip the Promise wrap that `readPrerenderedRoute`\n // would otherwise introduce just to satisfy the async signature.\n const prerendered =\n options.prerenderStore === undefined\n ? options.runtime.prerenderedRoutes.get(normalizedPath)\n : await readPrerenderedRoute(\n options.runtime,\n normalizedPath,\n options.prerenderStore,\n );\n const prerenderedResponse = prerenderedRouteResponse(prerendered, request.method);\n\n if (prerenderedResponse !== undefined) {\n return prerenderedResponse;\n }\n }\n\n const middlewareStartedAt = builtRenderTimingPhaseStartedAt(timing);\n const middlewareResult = await resolveBuiltMiddleware({ ...options, timing }, request);\n finishBuiltRenderTimingPhase(timing, middlewareStartedAt, \"middlewareMs\");\n if (middlewareResult.type === \"response\") {\n emitBuiltRenderTiming(options, request, timing, middlewareResult.response.status);\n return middlewareResult.response;\n }\n if (middlewareResult.request !== request) {\n request = middlewareResult.request;\n normalizedPath = normalizeRoutePath(new URL(request.url).pathname);\n matched = options.runtime.routeMatcher.match(normalizedPath);\n }\n\n // Middleware apps resolve prerendered HTML here instead, so that a\n // middleware response or rewrite is honoured before the stored HTML is\n // served. The lookup uses the post-middleware path.\n if (\n options.runtime.hasMiddleware &&\n (request.method === \"GET\" || request.method === \"HEAD\")\n ) {\n const prerendered =\n options.prerenderStore === undefined\n ? options.runtime.prerenderedRoutes.get(normalizedPath)\n : await readPrerenderedRoute(\n options.runtime,\n normalizedPath,\n options.prerenderStore,\n );\n const prerenderedResponse = prerenderedRouteResponse(prerendered, request.method);\n\n if (prerenderedResponse !== undefined) {\n emitBuiltRenderTiming(options, request, timing, prerenderedResponse.status);\n return prerenderedResponse;\n }\n }\n\n if (request.method === \"GET\" && options.runtime.prerenderableRoutes.has(normalizedPath)) {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, matched?.route.file, {\n includeRender: false,\n });\n return renderAndCachePrerenderWithLock({ ...options, request }, normalizedPath);\n }\n\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, matched?.route.file, {\n includeRender: false,\n });\n const response = await renderBuiltDynamicResponse({\n ...options,\n matchedRoute: matched,\n request,\n requestUrl: new URL(request.url),\n });\n\n await applyBuiltPrerenderInvalidations(\n options.runtime,\n response,\n options.prerenderStore,\n );\n\n return options.sinkStrategy === \"buffer\"\n ? await materializeResponseAsBuffer(response)\n : response;\n}\n\nfunction prerenderedRouteResponse(\n prerendered: BuiltPrerenderedRoute | undefined,\n method: string,\n): Response | undefined {\n if (!isCurrentPrerenderedRoute(prerendered)) {\n return undefined;\n }\n\n if (method === \"HEAD\") {\n return new Response(null, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n }\n\n return htmlResponse(prerendered.html, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n}\n\nasync function resolveBuiltMiddleware(\n options: RenderBuiltAppRequestOptions & {\n runtime: BuiltRuntime;\n timing?: { phases: Record<string, number> } | undefined;\n },\n request: Request,\n): Promise<{ request: Request; type: \"continue\" } | { response: Response; type: \"response\" }> {\n if (!options.runtime.hasMiddleware) {\n return { request, type: \"continue\" };\n }\n\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, undefined);\n\n return resolveAppRouterMiddleware({\n appDir: options.runtime.appDir,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n instrumentation: options.instrumentation,\n request,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n timing: options.timing,\n });\n}\n\nfunction createBuiltRenderTiming(\n logger: AppRouterLogger | undefined,\n): { phases: Record<string, number> } | undefined {\n return logger?.debug === undefined ? undefined : { phases: {} };\n}\n\nfunction builtRenderTimingPhaseStartedAt(\n timing: { phases: Record<string, number> } | undefined,\n): number | undefined {\n return timing === undefined ? undefined : logNow();\n}\n\nfunction finishBuiltRenderTimingPhase(\n timing: { phases: Record<string, number> } | undefined,\n startedAt: number | undefined,\n phaseName: string,\n): void {\n if (timing === undefined || startedAt === undefined) {\n return;\n }\n\n timing.phases[phaseName] = logDurationMs(startedAt);\n}\n\nfunction emitBuiltRenderTiming(\n options: RenderBuiltAppRequestOptions,\n request: Request,\n timing: { phases: Record<string, number> } | undefined,\n status: number,\n): void {\n if (timing === undefined) {\n return;\n }\n\n emitRouterLog(options.logger, \"debug\", {\n method: request.method,\n path: new URL(request.url).pathname,\n phases: timing.phases,\n status,\n type: \"router:render:timing\",\n });\n}\n\nasync function applyBuiltAppResponseHook(\n response: Response,\n options: Pick<RenderBuiltAppRequestOptions, \"onResponse\" | \"request\">,\n runtime: BuiltRuntime,\n): Promise<Response> {\n await loadBuiltResponseHookArtifacts(runtime);\n const onResponse = await resolveAppRouterResponseHook({\n appDir: runtime.appDir,\n importPolicy: runtime.generatedImportPolicy,\n onResponse: options.onResponse,\n serverModules: runtime.serverModules,\n serverModuleCacheVersion: runtime.serverModuleCacheVersion,\n serverSourceFiles: runtime.serverSourceFiles,\n });\n const hooked = await onResponse?.(response, {\n request: options.request,\n });\n\n return hooked instanceof Response ? hooked : response;\n}\n\nasync function materializeResponseAsBuffer(response: Response): Promise<Response> {\n if (response.body === null) {\n return response;\n }\n\n // Drains streaming responses into a single Buffer (loses TTFB streaming\n // by design — opt-in via sinkStrategy === \"buffer\"). Avoids the\n // string → UTF-8 encode the Response stream would otherwise do lazily\n // during the socket write. Tagged via `bytesResponse` so `sendResponse`\n // can take the raw-bytes fast path.\n const bytes = new Uint8Array(await response.arrayBuffer());\n return bytesResponse(bytes, {\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\n/**\n * Starts a Node HTTP server for an already built app-router output directory.\n *\n * Use this for production-like local serving or custom Node deployments. It loads `.mreact/server` artifacts, applies the generated import policy when configured, enforces host trust options, and returns a `close()` method for orderly shutdown.\n */\nexport async function startServer(\n options: StartServerOptions,\n): Promise<{ close(): Promise<void>; server: Server; url: string }> {\n warnIfImplicitHostTrust(options);\n const runtime = await createBuiltRequestRuntime({\n importPolicy: options.importPolicy,\n outDir: options.outDir,\n });\n\n return await startNodeRequestServer({\n allowedHosts: options.allowedHosts,\n errorHandler: options.errorHandler,\n hostname: options.hostname,\n hostPolicy: options.hostPolicy,\n logger: options.logger,\n onUpgrade: options.onUpgrade,\n port: options.port,\n resolveHost: resolveRequestHost,\n trustForwardedProto: options.trustForwardedProto,\n render: (request) =>\n runtime.render(request, {\n instrumentation: options.instrumentation,\n logger: options.logger,\n onResponse: options.onResponse,\n prerenderStore: options.prerenderStore,\n routeCache: options.routeCache,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n }),\n });\n}\n\nexport const __readBuiltPublicAssetForTest = readBuiltPublicAsset;\n\nexport function __clearBuiltRuntimeCacheForTest(): void {\n builtRuntimeCache.clear();\n builtRuntimeReadInflight.clear();\n builtRuntimeMaterializeCountForTest = 0;\n}\n\nexport function __getBuiltRuntimeMaterializeCountForTest(): number {\n return builtRuntimeMaterializeCountForTest;\n}\n\nexport function __clearBuiltPublicAssetCacheForTest(): void {\n clearBuiltPublicAssetCacheForTest();\n}\n\nexport function __getBuiltPublicAssetCacheSizeForTest(): number {\n return getBuiltPublicAssetCacheSizeForTest();\n}\n\nasync function readBuiltRuntime(options: {\n immutable?: boolean | undefined;\n outDir: string;\n runtimeDir?: string | undefined;\n}): Promise<BuiltRuntime> {\n const outDir = options.outDir;\n const runtimeDir = options.runtimeDir ?? join(outDir, \"server\", \"runtime\");\n const cacheKey = `${outDir}\\0${runtimeDir}`;\n const cached = builtRuntimeCache.get(cacheKey);\n\n if (options.immutable === true && cached !== undefined) {\n return cached.runtime;\n }\n\n if (cached === undefined) {\n const inflight = builtRuntimeReadInflight.get(cacheKey);\n if (inflight !== undefined) {\n return inflight;\n }\n\n const runtime = readBuiltRuntimeUncached({\n cacheKey,\n cached,\n outDir,\n runtimeDir,\n });\n builtRuntimeReadInflight.set(cacheKey, runtime);\n void runtime\n .finally(() => {\n if (builtRuntimeReadInflight.get(cacheKey) === runtime) {\n builtRuntimeReadInflight.delete(cacheKey);\n }\n })\n .catch(() => {});\n return runtime;\n }\n\n return readBuiltRuntimeUncached({\n cacheKey,\n cached,\n outDir,\n runtimeDir,\n });\n}\n\nasync function readBuiltRuntimeUncached(options: {\n cached: BuiltRuntimeCacheEntry | undefined;\n cacheKey: string;\n outDir: string;\n runtimeDir: string;\n}): Promise<BuiltRuntime> {\n const { cacheKey, cached, outDir, runtimeDir } = options;\n const serverManifestPath = join(outDir, \"server\", \"manifest.json\");\n const clientManifestPath = join(outDir, \"client\", \"manifest.json\");\n const importPolicyPath = join(outDir, \"server\", \"import-policy.json\");\n const [serverManifestText, clientManifestText, importPolicyText] = await Promise.all([\n readRequiredBuiltArtifactText(serverManifestPath, \"built app server manifest\"),\n readRequiredBuiltArtifactText(clientManifestPath, \"built app client manifest\"),\n readBuiltImportPolicyText(outDir),\n ]);\n\n if (\n cached !== undefined &&\n cached.serverManifestText === serverManifestText &&\n cached.clientManifestText === clientManifestText &&\n cached.importPolicyText === importPolicyText\n ) {\n return cached.runtime;\n }\n\n const runtime = materializeBuiltRuntime({\n clientManifestText,\n clientManifestPath,\n importPolicyText,\n importPolicyPath,\n onMaterialize() {\n builtRuntimeMaterializeCountForTest += 1;\n },\n outDir,\n runtimeDir,\n serverManifestText,\n serverManifestPath,\n });\n\n builtRuntimeCache.set(cacheKey, {\n clientManifestText,\n importPolicyText,\n runtime,\n serverManifestText,\n });\n runtime.catch(() => {\n if (builtRuntimeCache.get(cacheKey)?.runtime === runtime) {\n builtRuntimeCache.delete(cacheKey);\n }\n });\n\n return runtime;\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nasync function readRequiredBuiltArtifactText(labelPath: string, label: string): Promise<string> {\n try {\n return await readFile(labelPath, \"utf8\");\n } catch (error) {\n throw builtArtifactReadError(label, labelPath, error);\n }\n}\n\nfunction builtArtifactReadError(label: string, artifactPath: string, error: unknown): Error {\n const prefix = isMissingFileError(error) ? \"Missing\" : \"Unable to read\";\n const detail = error instanceof Error && error.message !== \"\" ? `: ${error.message}` : \"\";\n\n return new Error(`${prefix} ${label}: ${artifactPath}${detail}`, { cause: error });\n}\n\nasync function readPrerenderedRoute(\n runtime: BuiltRuntime,\n path: string,\n store: AppRouterPrerenderStore | undefined,\n): Promise<BuiltPrerenderedRoute | undefined> {\n const stored = await store?.get(path);\n\n if (stored !== undefined) {\n if (isCurrentPrerenderedRoute(stored)) {\n runtime.prerenderedRoutes.set(path, stored);\n return stored;\n }\n\n await store?.delete(path);\n }\n\n const manifestEntry = runtime.prerenderedRoutes.get(path);\n\n if (!isCurrentPrerenderedRoute(manifestEntry)) {\n runtime.prerenderedRoutes.delete(path);\n return undefined;\n }\n\n if (store !== undefined) {\n await store.set(path, manifestEntry);\n }\n\n return manifestEntry;\n}\n\nfunction renderBuiltDynamicResponse(\n options: RenderBuiltAppRequestOptions & {\n matchedRoute?: MatchedRoute | undefined;\n renderSignals?: { headerDependent: () => boolean } | undefined;\n requestUrl?: URL | undefined;\n runtime: BuiltRuntime;\n },\n): Promise<Response> {\n return renderAppRequest({\n ...builtRenderAppRequestOptions(options),\n ...(options.renderSignals === undefined ? {} : { renderSignals: options.renderSignals }),\n });\n}\n\nfunction builtRenderAppRequestOptions(\n options: RenderBuiltAppRequestOptions & {\n matchedRoute?: MatchedRoute | undefined;\n requestUrl?: URL | undefined;\n runtime: BuiltRuntime;\n },\n): RenderAppRequestRuntimeOptions {\n const serverRenderArtifactLoader: AppRouterServerRenderArtifactLoader = {\n async load(routeFile: string) {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, routeFile, {\n includeRender: true,\n });\n },\n };\n const renderOptions: RenderAppRequestRuntimeOptions = {\n appDir: options.runtime.appDir,\n assetBaseUrl: options.runtime.assetBaseUrl,\n clientScripts: options.runtime.clientScripts,\n clientStylesByFile: options.runtime.clientStylesByFile,\n clientStyles: options.runtime.clientStyles,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n request: options.request,\n instrumentation: options.instrumentation,\n logger: options.logger,\n matchedRoute: options.matchedRoute,\n navigationScripts: options.runtime.navigationScripts,\n routeCache: options.routeCache,\n routeMatcher: options.runtime.routeMatcher,\n requestUrl: options.requestUrl,\n routes: options.runtime.routes,\n serverRenderArtifactLoader,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n serverActionReferencesByFile: options.runtime.serverActionReferencesByFile,\n serverActions: mergeBuiltServerActionOptions(\n options.serverActions,\n options.runtime.serverActionManifest,\n ),\n skipMiddleware: true,\n onResponse: () => undefined,\n ...(options.preload === undefined ? {} : { preload: options.preload }),\n };\n\n return renderOptions;\n}\n\nfunction mergeBuiltServerActionOptions(\n options: AppRouterServerActionOptions | undefined,\n allowedActions: readonly { moduleId: string; exportName: string; inferred?: boolean }[] | undefined,\n): AppRouterServerActionOptions | undefined {\n if (allowedActions === undefined) {\n return options;\n }\n\n return {\n ...options,\n allowedActions,\n };\n}\n\nasync function renderAndCachePrerenderWithLock(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n path: string,\n): Promise<Response> {\n const existing = options.runtime.prerenderLocks.get(path);\n\n if (existing !== undefined) {\n const result = await existing;\n if (result.shareable) {\n return cloneResponse(result.response);\n }\n\n return (await runPrerenderRegeneration(options, path)).response;\n }\n\n const task = runPrerenderRegeneration(options, path);\n options.runtime.prerenderLocks.set(path, task);\n\n try {\n return cloneResponse((await task).response);\n } finally {\n options.runtime.prerenderLocks.delete(path);\n }\n}\n\nasync function runPrerenderRegeneration(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n path: string,\n): Promise<{ response: Response; shareable: boolean }> {\n const regenerate = async () => {\n const stored = await readPrerenderedRoute(options.runtime, path, options.prerenderStore);\n\n if (stored !== undefined) {\n return {\n response: htmlResponse(stored.html, {\n headers: stored.headers,\n status: stored.status,\n }),\n shareable: true,\n };\n }\n\n // A prerendered entry is replayed to every visitor by path alone, so a\n // render that depended on this visitor's request headers must not become\n // one; it is returned to the caller without being stored. The signal starts\n // closed so that a render which never reports back is not stored either.\n const renderSignals = { headerDependent: () => true };\n const response = await renderBuiltDynamicResponse({ ...options, renderSignals });\n\n if (!response.ok) {\n return { response, shareable: false };\n }\n\n // Draining the body finishes a streamed render, so the signal is only\n // final once the whole response has been read.\n const body = await response.text();\n\n if (renderSignals.headerDependent() || isVisitorDependentResponse(response)) {\n return {\n response: htmlResponse(body, {\n headers: response.headers,\n status: response.status,\n }),\n shareable: false,\n };\n }\n\n return {\n response: await cacheRegeneratedPrerenderedRoute(\n options.runtime,\n path,\n body,\n response,\n options.prerenderStore,\n ),\n shareable: true,\n };\n };\n\n return options.prerenderStore?.withLock === undefined\n ? await regenerate()\n : await options.prerenderStore.withLock(path, regenerate);\n}\n\nasync function applyBuiltPrerenderInvalidations(\n runtime: BuiltRuntime,\n response: Response,\n store: AppRouterPrerenderStore | undefined,\n): Promise<void> {\n const revalidated = response.headers.get(\"x-mreact-revalidate\");\n\n if (revalidated === null) {\n return;\n }\n\n for (const path of revalidated.split(\",\")) {\n const normalized = normalizeRoutePath(path.trim());\n runtime.prerenderedRoutes.delete(normalized);\n await store?.delete(normalized);\n }\n}\n\nasync function cacheRegeneratedPrerenderedRoute(\n runtime: BuiltRuntime,\n path: string,\n body: string,\n response: Response,\n store: AppRouterPrerenderStore | undefined,\n): Promise<Response> {\n const headers: Record<string, string> = {};\n\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n const entry: BuiltPrerenderedRoute = {\n headers,\n html: body,\n schemaVersion: PRERENDERED_ROUTE_SCHEMA_VERSION,\n status: response.status,\n };\n runtime.prerenderedRoutes.set(path, entry);\n await store?.set(path, entry);\n\n return htmlResponse(body, {\n headers: response.headers,\n status: response.status,\n });\n}\n\nasync function cloneResponse(response: Response): Promise<Response> {\n return htmlResponse(await response.clone().text(), {\n headers: response.headers,\n status: response.status,\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EACL,wBAAwB,EACxB,iCAAiC,EACjC,mCAAmC,EACnC,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,6BAA6B,EAC7B,yBAAyB,GAE1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,8BAA8B,EAC9B,wCAAwC,GACzC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAGN,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,4BAA4B,EAC5B,0BAA0B,GAK3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,2BAA2B,EAC3B,uBAAuB,GAExB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,aAAa,EACb,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,aAAa,EACb,MAAM,GAEP,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EACL,yBAAyB,EACzB,0BAA0B,EAC1B,gCAAgC,EAChC,+BAA+B,EAC/B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAS9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkC,CAAC;AACpE,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAiC,CAAC;AAC1E,IAAI,mCAAmC,GAAG,CAAC,CAAC;AAqB5C,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAmGpC,MAAM,UAAU,kBAAkB,CAAC,OAKlC;IACC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC;IAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,OAAO,CAAC,YAAY,CAAC;IACjE,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC;IACtE,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAGvC;IACC,IACE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;QACrC,OAAO,CAAC,YAAY,KAAK,SAAS;QAClC,OAAO,CAAC,UAAU,KAAK,SAAS;QAChC,uBAAuB,EACvB,CAAC;QACD,OAAO;IACT,CAAC;IAED,uBAAuB,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,KAAK,CACX,mRAAmR,CACpR,CAAC;AACJ,CAAC;AAYD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAmC;IAEnC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;QACrC,SAAS,EAAE,OAAO,CAAC,gBAAgB;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEzF,OAAO;QACL,OAAO,CAAC,OAAO;YACb,OAAO,iCAAiC,CAAC;gBACvC,YAAY,EAAE,mBAAmB;gBACjC,OAAO;gBACP,OAAO;aACR,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,EAAE;YACtC,qBAAqB,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC;gBACtD,GAAG,aAAa;gBAChB,eAAe,EAAE,kCAAkC,CAAC,aAAa,CAAC,eAAe,CAAC;gBAClF,YAAY,EACV,aAAa,CAAC,YAAY,KAAK,SAAS;oBACtC,CAAC,CAAC,mBAAmB;oBACrB,CAAC,CAAC,6BAA6B,CAAC,OAAO,EAAE,aAAa,CAAC,YAAY,CAAC;gBACxE,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,OAAO;gBACP,OAAO;aACR,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,MAAM,yBAAyB,CACnD,QAAQ,EACR;gBACE,UAAU,EAAE,aAAa,CAAC,UAAU;gBACpC,OAAO;aACR,EACD,OAAO,CACR,CAAC;YACF,mBAAmB,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YAClF,OAAO,aAAa,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,OAK5C;IACC,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,iCAAiC,CAAC;QACtC,YAAY,EAAE,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;QAC1E,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO;KACR,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,iCAAiC,CAAC,OAIhD;IACC,MAAM,IAAI,GAAG,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,yBAAyB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,MAAM,8BAA8B,CAClC,OAAO,CAAC,OAAO,EACf,yBAAyB,CAAC,OAAO,CAAC,OAAO,CAAC,EAC1C,KAAK,CACN,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,wCAAwC,CAC5C,OAAO,CAAC,OAAO,EACf,SAAS,EACT,IAAI,CAAC,mBAAmB,CACzB,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,wCAAwC,CAC5C,OAAO,CAAC,OAAO,EACf,KAAK,CAAC,IAAI,EACV,IAAI,CAAC,cAAc,CACpB,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,0BAA0B,CAAC;QAC/B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,YAAY,EAAE;YACZ,GAAG,OAAO,CAAC,YAAY;YACvB,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;YACpD,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;SACzC;QACD,MAAM;QACN,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB;QAClE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;QACpD,4BAA4B,EAAE,OAAO,CAAC,OAAO,CAAC,4BAA4B;QAC1E,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;KAChD,CAAC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB,CAChC,OAAqB,EACrB,QAAwC;IAExC,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,OAAO,CAAC,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;IACrC,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC;QAC1E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAqC;IAErC,qBAAqB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,gBAAgB;QACnC,UAAU,EAAE,OAAO,CAAC,UAAU;KAC/B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,gCAAgC,CAAC;QACtD,GAAG,OAAO;QACV,eAAe,EAAE,kCAAkC,CAAC,OAAO,CAAC,eAAe,CAAC;QAC5E,YAAY,EAAE,6BAA6B,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC;QAC1E,OAAO;KACR,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAClF,mBAAmB,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACpF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,kCAAkC,CACzC,eAAkD;IAElD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,SAAS,EAAE,GAClF,eAAe,CAAC;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAC5B,eAAkD,EAClD,OAAgB;IAEhB,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,2BAA2B,CAAC,eAAe,EAAE,cAAc,EAAE;QAC3D,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;QACnC,OAAO;QACP,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,eAAkD,EAClD,OAAgB,EAChB,MAAc;IAEd,MAAM,KAAK,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC/C,2BAA2B,CAAC,eAAe,EAAE,YAAY,EAAE;QACzD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;QACnC,OAAO;QACP,MAAM;QACN,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;KAC1C,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,OAAiE;IAEjE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAE3E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,oBAAoB,CACzB,OAAO,CAAC,MAAM,EACd,mBAAmB,EACnB,OAAO,CAAC,OAAO,CAAC,gBAAgB,CACjC,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1E,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE7E,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC9B,IAAI,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAEjE,2EAA2E;IAC3E,wEAAwE;IACxE,2EAA2E;IAC3E,oCAAoC;IACpC,IACE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa;QAC9B,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,EACvD,CAAC;QACD,qEAAqE;QACrE,kEAAkE;QAClE,iEAAiE;QACjE,MAAM,WAAW,GACf,OAAO,CAAC,cAAc,KAAK,SAAS;YAClC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;YACvD,CAAC,CAAC,MAAM,oBAAoB,CACxB,OAAO,CAAC,OAAO,EACf,cAAc,EACd,OAAO,CAAC,cAAc,CACvB,CAAC;QACR,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE3E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,MAAM,mBAAmB,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;IACvF,4BAA4B,CAAC,MAAM,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC;IAC1E,IAAI,gBAAgB,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QACzC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClF,OAAO,gBAAgB,CAAC,QAAQ,CAAC;IACnC,CAAC;IACD,IAAI,gBAAgB,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QACzC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;QACnC,cAAc,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;IAED,mEAAmE;IACnE,uEAAuE;IACvE,oDAAoD;IACpD,IACE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC7B,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,EACvD,CAAC;QACD,MAAM,WAAW,GACf,OAAO,CAAC,cAAc,KAAK,SAAS;YAClC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;YACvD,CAAC,CAAC,MAAM,oBAAoB,CACxB,OAAO,CAAC,OAAO,EACf,cAAc,EACd,OAAO,CAAC,cAAc,CACvB,CAAC;QACR,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAE3E,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;YACtC,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5E,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QACxF,MAAM,wCAAwC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;YACnF,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;QACH,OAAO,+BAA+B,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,wCAAwC,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE;QACnF,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC;QAChD,GAAG,OAAO;QACV,YAAY,EAAE,OAAO;QACrB,OAAO;QACP,UAAU,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;KACjC,CAAC,CAAC;IAEH,MAAM,gCAAgC,CACpC,OAAO,CAAC,OAAO,EACf,QAAQ,EACR,OAAO,CAAC,cAAc,CACvB,CAAC;IAEF,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ;QACtC,CAAC,CAAC,MAAM,2BAA2B,CAAC,QAAQ,CAAC;QAC7C,CAAC,CAAC,QAAQ,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAC/B,WAA8C,EAC9C,OAAgB;IAEhB,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,GAAG,CAAC;IACtE,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;IACxE,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,OAAO,EAAE,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC;YAC9D,MAAM,EAAE,WAAW,CAAC,MAAM;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE,+BAA+B,CAAC,WAAW,EAAE,OAAO,CAAC;QAC9D,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAGC,EACD,OAAgB;IAEhB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QACnC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,wCAAwC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAE3E,OAAO,0BAA0B,CAAC;QAChC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,YAAY,EAAE;YACZ,GAAG,OAAO,CAAC,YAAY;YACvB,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;YACpD,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;SACzC;QACD,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB;QAClE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAAmC;IAEnC,OAAO,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClE,CAAC;AAED,SAAS,+BAA+B,CACtC,MAAsD;IAEtD,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,4BAA4B,CACnC,MAAsD,EACtD,SAA6B,EAC7B,SAAiB;IAEjB,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO;IACT,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAAqC,EACrC,OAAgB,EAChB,MAAsD,EACtD,MAAc;IAEd,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;QACrC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM;QACN,IAAI,EAAE,sBAAsB;KAC7B,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,yBAAyB,CACtC,QAAkB,EAClB,OAAqE,EACrE,OAAqB;IAErB,MAAM,8BAA8B,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,MAAM,4BAA4B,CAAC;QACpD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,qBAAqB;QAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;QAC1D,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC,QAAQ,EAAE;QAC1C,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;IAEH,OAAO,MAAM,YAAY,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,QAAkB;IAC3D,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,gEAAgE;IAChE,sEAAsE;IACtE,wEAAwE;IACxE,oCAAoC;IACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,OAAO,aAAa,CAAC,KAAK,EAAE;QAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA2B;IAE3B,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC;QAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,OAAO,MAAM,sBAAsB,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,kBAAkB;QAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAClB,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;YACtB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,eAAe,EAAE,OAAO,CAAC,eAAe;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,GAAG,CAAC,OAAO,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;SACtF,CAAC;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,6BAA6B,GAAG,oBAAoB,CAAC;AAElE,MAAM,UAAU,+BAA+B;IAC7C,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1B,wBAAwB,CAAC,KAAK,EAAE,CAAC;IACjC,mCAAmC,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,wCAAwC;IACtD,OAAO,mCAAmC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,mCAAmC;IACjD,iCAAiC,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,qCAAqC;IACnD,OAAO,mCAAmC,EAAE,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAI/B;IACC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3E,MAAM,QAAQ,GAAG,GAAG,MAAM,KAAK,UAAU,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACvC,QAAQ;YACR,MAAM;YACN,MAAM;YACN,UAAU;SACX,CAAC,CAAC;QACH,wBAAwB,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,KAAK,OAAO;aACT,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,wBAAwB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;gBACvD,wBAAwB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,wBAAwB,CAAC;QAC9B,QAAQ;QACR,MAAM;QACN,MAAM;QACN,UAAU;KACX,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAKvC;IACC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;IACnE,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACtE,MAAM,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnF,6BAA6B,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;QAC9E,6BAA6B,CAAC,kBAAkB,EAAE,2BAA2B,CAAC;QAC9E,yBAAyB,CAAC,MAAM,CAAC;KAClC,CAAC,CAAC;IAEH,IACE,MAAM,KAAK,SAAS;QACpB,MAAM,CAAC,kBAAkB,KAAK,kBAAkB;QAChD,MAAM,CAAC,kBAAkB,KAAK,kBAAkB;QAChD,MAAM,CAAC,gBAAgB,KAAK,gBAAgB,EAC5C,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAG,uBAAuB,CAAC;QACtC,kBAAkB;QAClB,kBAAkB;QAClB,gBAAgB;QAChB,gBAAgB;QAChB,aAAa;YACX,mCAAmC,IAAI,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM;QACN,UAAU;QACV,kBAAkB;QAClB,kBAAkB;KACnB,CAAC,CAAC;IAEH,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE;QAC9B,kBAAkB;QAClB,gBAAgB;QAChB,OAAO;QACP,kBAAkB;KACnB,CAAC,CAAC;IACH,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;QACjB,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;YACzD,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACd,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAChD,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,6BAA6B,CAAC,SAAiB,EAAE,KAAa;IAC3E,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,YAAoB,EAAE,KAAc;IACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC;IACxE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1F,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,KAAK,YAAY,GAAG,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAAqB,EACrB,IAAY,EACZ,KAA0C;IAE1C,MAAM,MAAM,GAAG,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC5C,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,0BAA0B,CACjC,OAKC;IAED,OAAO,gBAAgB,CAAC;QACtB,GAAG,4BAA4B,CAAC,OAAO,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;KACzF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACnC,OAIC;IAED,MAAM,0BAA0B,GAAwC;QACtE,KAAK,CAAC,IAAI,CAAC,SAAiB;YAC1B,MAAM,wCAAwC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE;gBACzE,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IACF,MAAM,aAAa,GAAmC;QACpD,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;QAC1C,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB;QACtD,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;QAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,YAAY,EAAE;YACZ,GAAG,OAAO,CAAC,YAAY;YACvB,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;YACpD,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,WAAW;SACzC;QACD,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,eAAe,EAAE,OAAO,CAAC,eAAe;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;QACpD,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,YAAY;QAC1C,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;QAC9B,0BAA0B;QAC1B,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,aAAa;QAC5C,wBAAwB,EAAE,OAAO,CAAC,OAAO,CAAC,wBAAwB;QAClE,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAC,iBAAiB;QACpD,4BAA4B,EAAE,OAAO,CAAC,OAAO,CAAC,4BAA4B;QAC1E,aAAa,EAAE,6BAA6B,CAC1C,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,OAAO,CAAC,oBAAoB,CACrC;QACD,cAAc,EAAE,IAAI;QACpB,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;QAC3B,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACvE,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,SAAS,6BAA6B,CACpC,OAAiD,EACjD,cAAmG;IAEnG,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,GAAG,OAAO;QACV,cAAc;KACf,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,OAAiE,EACjE,IAAY;IAEZ,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,GAAG;QACxD,CAAC,CAAC,GAAG,IAAI,cAAc;QACvB,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,MAAM,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClE,CAAC;IAED,MAAM,IAAI,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,OAAiE,EACjE,IAAY;IAEZ,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,GAAG;QACxD,CAAC,CAAC,GAAG,IAAI,cAAc;QACvB,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;QACzF,MAAM,cAAc,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEzE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO;gBACL,QAAQ,EAAE,cAAc;gBACxB,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,yEAAyE;QACzE,4EAA4E;QAC5E,yEAAyE;QACzE,MAAM,aAAa,GAAG;YACpB,eAAe,EAAE,GAAG,EAAE,CAAC,IAAI;YAC3B,uBAAuB,EAAE,GAAG,EAAE,CAAC,SAA+B;SAC/D,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,0BAA0B,CAAC,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;QAEjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACxC,CAAC;QAED,sEAAsE;QACtE,+CAA+C;QAC/C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,aAAa,CAAC,eAAe,EAAE,IAAI,0BAA0B,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,OAAO;gBACL,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE;oBAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC;gBACF,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,GAAG,CAAC;QAC9E,IAAI,UAAU,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO;gBACL,QAAQ,EAAE,YAAY,CAAC,IAAI,EAAE;oBAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;iBACxB,CAAC;gBACF,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,gCAAgC,CAC9C,OAAO,CAAC,OAAO,EACf,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,aAAa,CAAC,uBAAuB,EAAE,EACvC,OAAO,CAAC,cAAc,EACtB,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAChC;YACD,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO,OAAO,CAAC,cAAc,EAAE,QAAQ,KAAK,SAAS;QACnD,CAAC,CAAC,MAAM,UAAU,EAAE;QACpB,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,OAAqB,EACrB,QAAkB,EAClB,KAA0C;IAE1C,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEhE,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,OAAqB,EACrB,IAAY,EACZ,IAAY,EACZ,QAAkB,EAClB,uBAA2C,EAC3C,KAA0C,EAC1C,QAA4C;IAE5C,MAAM,OAAO,GAAG,6BAA6B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,KAAK,GACT,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC;YACE,OAAO;YACP,IAAI,EAAE,IAAI;YACV,aAAa,EAAE,gCAAgC;YAC/C,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,GAAG,CAAC,uBAAuB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,uBAAuB,EAAE,CAAC;SAC9E;QACH,CAAC,CAAC,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAC5C,OAAO,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE9B,OAAO,YAAY,CAAC,IAAI,EAAE;QACxB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,QAAkB;IAC7C,OAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;QACjD,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;KACxB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { Server } from \"node:http\";\nimport type { DehydrateOptions } from \"@reckona/mreact-query\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { BuiltPrerenderedRoute } from \"./build.js\";\nimport type { AppRouterCache } from \"./cache.js\";\nimport {\n builtClientAssetPathname,\n clearBuiltPublicAssetCacheForTest,\n getBuiltPublicAssetCacheSizeForTest,\n readBuiltClientAsset,\n readBuiltPublicAsset,\n} from \"./built-assets.js\";\nimport {\n materializeBuiltRuntime,\n mergeBuiltRuntimeImportPolicy,\n readBuiltImportPolicyText,\n type BuiltRuntime,\n} from \"./built-runtime.js\";\nimport {\n allBuiltServerModuleFiles,\n loadBuiltResponseHookArtifacts,\n loadBuiltServerModuleArtifacts,\n loadBuiltServerModuleArtifactsForRequest,\n} from \"./built-server-module-artifacts.js\";\nimport {\n type AppRoute,\n type MatchedRoute,\n} from \"./routes.js\";\nimport type { AppRouterServerActionOptions } from \"./actions.js\";\nimport type { AppRouterImportPolicy } from \"./import-policy.js\";\nimport {\n preloadBuiltRequestModules,\n renderAppRequest,\n resolveAppRouterResponseHook,\n resolveAppRouterMiddleware,\n type AppRouterServerRenderArtifactLoader,\n type AppRouterRenderPreload,\n type AppRouterResponseHook,\n type RenderAppRequestRuntimeOptions,\n} from \"./render.js\";\nimport {\n invokeRouterInstrumentation,\n traceContextFromRequest,\n type RouterInstrumentation,\n} from \"./trace.js\";\nimport {\n bytesResponse,\n htmlResponse,\n} from \"./http.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logNow,\n type AppRouterLogger,\n} from \"./logger.js\";\nimport { startNodeRequestServer } from \"./node-server.js\";\nimport { builtAppRuntimePreloadPlan } from \"./preload-policy.js\";\nimport { normalizeRoutePath } from \"./route-path.js\";\nimport type { HttpUpgradeHandler } from \"./upgrade.js\";\nimport {\n isCurrentPrerenderedRoute,\n isVisitorDependentResponse,\n PRERENDERED_ROUTE_SCHEMA_VERSION,\n replayedPrerenderedRouteHeaders,\n storedPrerenderedRouteHeaders,\n} from \"./prerender-entry.js\";\n\ninterface BuiltRuntimeCacheEntry {\n clientManifestText: string;\n importPolicyText: string | undefined;\n runtime: Promise<BuiltRuntime>;\n serverManifestText: string;\n}\n\nconst builtRuntimeCache = new Map<string, BuiltRuntimeCacheEntry>();\nconst builtRuntimeReadInflight = new Map<string, Promise<BuiltRuntime>>();\nlet builtRuntimeMaterializeCountForTest = 0;\n\n/**\n * Strategy for the final response body shape sent to the HTTP layer.\n *\n * - `\"string\"` (default, cross-runtime): body is the raw HTML string. The\n * underlying runtime encodes to UTF-8 bytes when writing to the socket.\n * - `\"buffer\"` (Node only): materialize the response body into a Buffer\n * before returning. Skips the implicit encode at the Response → socket\n * boundary and can let Node's HTTP layer write bytes directly.\n *\n * The buffer path forces full materialization of streaming responses\n * (loses TTFB streaming) — only opt in if the throughput gain outweighs\n * that on your workload.\n */\nexport type ResponseSinkStrategy = \"string\" | \"buffer\";\n/**\n * Controls whether built request handling trusts the incoming Host header.\n */\nexport type RequestHostPolicy = \"strict\" | \"trusted-proxy\";\n\nlet warnedImplicitHostTrust = false;\n\n/**\n * Configures rendering a request against a built app-router output directory.\n */\nexport interface RenderBuiltAppRequestOptions {\n dehydrateOptions?: DehydrateOptions | undefined;\n outDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n request: Request;\n routeCache?: AppRouterCache | undefined;\n runtimeDir?: string | undefined;\n immutableRuntime?: boolean | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy;\n preload?: AppRouterRenderPreload | undefined;\n}\n\nexport interface BuiltRequestRuntimeOptions {\n immutableRuntime?: boolean | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n outDir: string;\n runtimeDir?: string | undefined;\n}\n\nexport type BuiltRequestRuntimeRenderOptions = Omit<\n RenderBuiltAppRequestOptions,\n \"immutableRuntime\" | \"outDir\" | \"request\" | \"runtimeDir\"\n>;\n\nexport interface BuiltRequestRuntime {\n preload(preload?: BuiltAppRuntimePreloadStrategy | undefined): Promise<void>;\n render(\n request: Request,\n options?: BuiltRequestRuntimeRenderOptions | undefined,\n ): Promise<Response>;\n}\n\n/**\n * Selects which built runtime modules should be preloaded.\n */\nexport type BuiltAppRuntimePreloadMode =\n | \"all\"\n | \"hot-route-requests\"\n | \"hot-routes\"\n | \"middleware\"\n | \"none\";\n\n/**\n * Configures built app runtime preload scope and optional hot routes.\n */\nexport interface BuiltAppRuntimePreloadStrategy {\n mode: BuiltAppRuntimePreloadMode;\n routes?: readonly string[] | undefined;\n}\n\n/**\n * Configures the Node HTTP server used to serve a built app-router output.\n */\nexport interface StartServerOptions {\n dehydrateOptions?: DehydrateOptions | undefined;\n outDir: string;\n port: number;\n hostname?: string;\n // Optional hook for customizing the 500 response. The default returns\n // a generic \"Internal Server Error\" body and logs the stack to stderr\n // via console.error. Issue 071: stack traces must never end up in\n // production responses.\n errorHandler?: (error: unknown) => { body: string; status: number; headers?: Record<string, string> };\n // When set, an incoming Host header that does not exactly match one of\n // the listed values is replaced with the configured hostname/port for\n // origin reconstruction. Use this in front of public deployments to\n // block Host header injection (Issue 068). Undefined preserves the\n // legacy \"trust Host\" behavior for backward compatibility when\n // hostPolicy is not configured.\n allowedHosts?: readonly string[] | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n routeCache?: AppRouterCache | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy;\n onUpgrade?: HttpUpgradeHandler | undefined;\n /**\n * Trusts the first `X-Forwarded-Proto` value when the socket is not TLS.\n *\n * Defaults to `false`. Enable only behind a proxy that overwrites the header\n * and prevents untrusted clients from reaching the Node listener directly.\n */\n trustForwardedProto?: boolean | undefined;\n}\n\nexport function resolveRequestHost(options: {\n allowedHosts?: readonly string[] | undefined;\n fallbackHost: string;\n hostPolicy?: RequestHostPolicy | undefined;\n rawHost: string | undefined;\n}): string {\n const raw = options.rawHost;\n if (raw === undefined || raw === \"\") return options.fallbackHost;\n if (options.allowedHosts === undefined) {\n return options.hostPolicy === \"strict\" ? options.fallbackHost : raw;\n }\n return options.allowedHosts.includes(raw) ? raw : options.fallbackHost;\n}\n\nexport function warnIfImplicitHostTrust(options: {\n allowedHosts?: readonly string[] | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n}): void {\n if (\n process.env.NODE_ENV !== \"production\" ||\n options.allowedHosts !== undefined ||\n options.hostPolicy !== undefined ||\n warnedImplicitHostTrust\n ) {\n return;\n }\n\n warnedImplicitHostTrust = true;\n console.error(\n \"[mreact] Host header trust is implicit because neither allowedHosts nor hostPolicy is configured. Set allowedHosts for public deployments, hostPolicy: \\\"strict\\\" to reject unlisted Host headers, or hostPolicy: \\\"trusted-proxy\\\" when a trusted reverse proxy normalizes Host.\",\n );\n}\n\n/**\n * Defines storage for prerendered route responses used by built request rendering.\n */\nexport interface AppRouterPrerenderStore {\n delete(path: string): void | Promise<void>;\n get(path: string): BuiltPrerenderedRoute | undefined | Promise<BuiltPrerenderedRoute | undefined>;\n set(path: string, entry: BuiltPrerenderedRoute): void | Promise<void>;\n withLock?<T>(path: string, task: () => Promise<T>): Promise<T>;\n}\n\nexport async function createBuiltRequestRuntime(\n options: BuiltRequestRuntimeOptions,\n): Promise<BuiltRequestRuntime> {\n const runtime = await readBuiltRuntime({\n immutable: options.immutableRuntime,\n outDir: options.outDir,\n runtimeDir: options.runtimeDir,\n });\n const defaultImportPolicy = mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy);\n\n return {\n preload(preload) {\n return preloadBuiltAppRuntimeWithRuntime({\n importPolicy: defaultImportPolicy,\n preload,\n runtime,\n });\n },\n async render(request, renderOptions = {}) {\n emitBuiltRequestStart(renderOptions.instrumentation, request);\n const response = await renderBuiltAppRequestWithRuntime({\n ...renderOptions,\n instrumentation: withoutBuiltRequestInstrumentation(renderOptions.instrumentation),\n importPolicy:\n renderOptions.importPolicy === undefined\n ? defaultImportPolicy\n : mergeBuiltRuntimeImportPolicy(runtime, renderOptions.importPolicy),\n outDir: options.outDir,\n request,\n runtime,\n });\n\n const finalResponse = await applyBuiltAppResponseHook(\n response,\n {\n onResponse: renderOptions.onResponse,\n request,\n },\n runtime,\n );\n emitBuiltRequestEnd(renderOptions.instrumentation, request, finalResponse.status);\n return finalResponse;\n },\n };\n}\n\n/**\n * Preloads selected modules from a built app-router runtime.\n */\nexport async function preloadBuiltAppRuntime(options: {\n importPolicy?: AppRouterImportPolicy | undefined;\n outDir: string;\n preload?: BuiltAppRuntimePreloadStrategy | undefined;\n runtimeDir?: string | undefined;\n}): Promise<void> {\n const runtime = await readBuiltRuntime({\n outDir: options.outDir,\n runtimeDir: options.runtimeDir,\n });\n await preloadBuiltAppRuntimeWithRuntime({\n importPolicy: mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy),\n preload: options.preload,\n runtime,\n });\n}\n\nasync function preloadBuiltAppRuntimeWithRuntime(options: {\n importPolicy?: AppRouterImportPolicy | undefined;\n preload?: BuiltAppRuntimePreloadStrategy | undefined;\n runtime: BuiltRuntime;\n}): Promise<void> {\n const plan = builtAppRuntimePreloadPlan(options.preload);\n\n if (!plan.shouldPreload) {\n return;\n }\n\n const routes = builtRuntimePreloadRoutes(options.runtime, plan);\n if (plan.loadAllArtifacts) {\n await loadBuiltServerModuleArtifacts(\n options.runtime,\n allBuiltServerModuleFiles(options.runtime),\n \"all\",\n );\n } else {\n await loadBuiltServerModuleArtifactsForRequest(\n options.runtime,\n undefined,\n plan.middlewareArtifacts,\n );\n for (const route of routes) {\n await loadBuiltServerModuleArtifactsForRequest(\n options.runtime,\n route.file,\n plan.routeArtifacts,\n );\n }\n }\n await preloadBuiltRequestModules({\n appDir: options.runtime.appDir,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n routes,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n serverActionReferencesByFile: options.runtime.serverActionReferencesByFile,\n includeRenderModules: plan.includeRenderModules,\n });\n}\n\nfunction builtRuntimePreloadRoutes(\n runtime: BuiltRuntime,\n strategy: BuiltAppRuntimePreloadStrategy,\n): readonly AppRoute[] {\n if (strategy.mode === \"all\") {\n return runtime.routes;\n }\n\n if (strategy.mode === \"middleware\" || strategy.mode === \"none\") {\n return [];\n }\n\n const routes = strategy.routes ?? [];\n return routes.map((path) => {\n const route = runtime.routeMatcher.match(normalizeRoutePath(path))?.route;\n if (route === undefined) {\n throw new Error(`Unknown hot route preload path: ${path}`);\n }\n return route;\n });\n}\n\n/**\n * Renders a request using a built app-router output directory.\n */\nexport async function renderBuiltAppRequest(\n options: RenderBuiltAppRequestOptions,\n): Promise<Response> {\n emitBuiltRequestStart(options.instrumentation, options.request);\n const runtime = await readBuiltRuntime({\n outDir: options.outDir,\n immutable: options.immutableRuntime,\n runtimeDir: options.runtimeDir,\n });\n const response = await renderBuiltAppRequestWithRuntime({\n ...options,\n instrumentation: withoutBuiltRequestInstrumentation(options.instrumentation),\n importPolicy: mergeBuiltRuntimeImportPolicy(runtime, options.importPolicy),\n runtime,\n });\n\n const finalResponse = await applyBuiltAppResponseHook(response, options, runtime);\n emitBuiltRequestEnd(options.instrumentation, options.request, finalResponse.status);\n return finalResponse;\n}\n\nfunction withoutBuiltRequestInstrumentation(\n instrumentation: RouterInstrumentation | undefined,\n): RouterInstrumentation | undefined {\n if (instrumentation === undefined) {\n return undefined;\n }\n\n const { onRequestEnd: _onRequestEnd, onRequestStart: _onRequestStart, ...remaining } =\n instrumentation;\n return remaining;\n}\n\nfunction emitBuiltRequestStart(\n instrumentation: RouterInstrumentation | undefined,\n request: Request,\n): void {\n const trace = traceContextFromRequest(request);\n invokeRouterInstrumentation(instrumentation?.onRequestStart, {\n method: request.method,\n path: new URL(request.url).pathname,\n request,\n ...(trace === undefined ? {} : { trace }),\n });\n}\n\nfunction emitBuiltRequestEnd(\n instrumentation: RouterInstrumentation | undefined,\n request: Request,\n status: number,\n): void {\n const trace = traceContextFromRequest(request);\n invokeRouterInstrumentation(instrumentation?.onRequestEnd, {\n method: request.method,\n path: new URL(request.url).pathname,\n request,\n status,\n ...(trace === undefined ? {} : { trace }),\n });\n}\n\nasync function renderBuiltAppRequestWithRuntime(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): Promise<Response> {\n const url = new URL(options.request.url);\n const timing = createBuiltRenderTiming(options.logger);\n\n const clientAssetPathname = builtClientAssetPathname(options.request, url);\n\n if (clientAssetPathname !== undefined) {\n return readBuiltClientAsset(\n options.outDir,\n clientAssetPathname,\n options.runtime.clientAssetPaths,\n );\n }\n\n if (options.request.method === \"GET\" || options.request.method === \"HEAD\") {\n const publicAsset = await readBuiltPublicAsset(options.outDir, url.pathname);\n\n if (publicAsset !== undefined) {\n return publicAsset;\n }\n }\n\n let request = options.request;\n let normalizedPath = normalizeRoutePath(url.pathname);\n let matched = options.runtime.routeMatcher.match(normalizedPath);\n\n // Prerendered HTML may only be served ahead of middleware when the app has\n // no middleware at all. Otherwise a middleware that gates access (auth,\n // geo blocking, maintenance mode) would be bypassed for exactly the routes\n // it is most often used to protect.\n if (\n !options.runtime.hasMiddleware &&\n (request.method === \"GET\" || request.method === \"HEAD\")\n ) {\n // Sync fast path when no external prerender store is configured (the\n // common case): skip the Promise wrap that `readPrerenderedRoute`\n // would otherwise introduce just to satisfy the async signature.\n const prerendered =\n options.prerenderStore === undefined\n ? options.runtime.prerenderedRoutes.get(normalizedPath)\n : await readPrerenderedRoute(\n options.runtime,\n normalizedPath,\n options.prerenderStore,\n );\n const prerenderedResponse = prerenderedRouteResponse(prerendered, request);\n\n if (prerenderedResponse !== undefined) {\n return prerenderedResponse;\n }\n }\n\n const middlewareStartedAt = builtRenderTimingPhaseStartedAt(timing);\n const middlewareResult = await resolveBuiltMiddleware({ ...options, timing }, request);\n finishBuiltRenderTimingPhase(timing, middlewareStartedAt, \"middlewareMs\");\n if (middlewareResult.type === \"response\") {\n emitBuiltRenderTiming(options, request, timing, middlewareResult.response.status);\n return middlewareResult.response;\n }\n if (middlewareResult.request !== request) {\n request = middlewareResult.request;\n normalizedPath = normalizeRoutePath(new URL(request.url).pathname);\n matched = options.runtime.routeMatcher.match(normalizedPath);\n }\n\n // Middleware apps resolve prerendered HTML here instead, so that a\n // middleware response or rewrite is honoured before the stored HTML is\n // served. The lookup uses the post-middleware path.\n if (\n options.runtime.hasMiddleware &&\n (request.method === \"GET\" || request.method === \"HEAD\")\n ) {\n const prerendered =\n options.prerenderStore === undefined\n ? options.runtime.prerenderedRoutes.get(normalizedPath)\n : await readPrerenderedRoute(\n options.runtime,\n normalizedPath,\n options.prerenderStore,\n );\n const prerenderedResponse = prerenderedRouteResponse(prerendered, request);\n\n if (prerenderedResponse !== undefined) {\n emitBuiltRenderTiming(options, request, timing, prerenderedResponse.status);\n return prerenderedResponse;\n }\n }\n\n if (request.method === \"GET\" && options.runtime.prerenderableRoutes.has(normalizedPath)) {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, matched?.route.file, {\n includeRender: false,\n });\n return renderAndCachePrerenderWithLock({ ...options, request }, normalizedPath);\n }\n\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, matched?.route.file, {\n includeRender: false,\n });\n const response = await renderBuiltDynamicResponse({\n ...options,\n matchedRoute: matched,\n request,\n requestUrl: new URL(request.url),\n });\n\n await applyBuiltPrerenderInvalidations(\n options.runtime,\n response,\n options.prerenderStore,\n );\n\n return options.sinkStrategy === \"buffer\"\n ? await materializeResponseAsBuffer(response)\n : response;\n}\n\nfunction prerenderedRouteResponse(\n prerendered: BuiltPrerenderedRoute | undefined,\n request: Request,\n): Response | undefined {\n if (!isCurrentPrerenderedRoute(prerendered)) {\n return undefined;\n }\n\n const navigation = request.headers.get(\"x-mreact-navigation\") === \"1\";\n const html = navigation ? prerendered.navigationHtml : prerendered.html;\n if (html === undefined) {\n return undefined;\n }\n\n if (request.method === \"HEAD\") {\n return new Response(null, {\n headers: replayedPrerenderedRouteHeaders(prerendered, request),\n status: prerendered.status,\n });\n }\n\n return htmlResponse(html, {\n headers: replayedPrerenderedRouteHeaders(prerendered, request),\n status: prerendered.status,\n });\n}\n\nasync function resolveBuiltMiddleware(\n options: RenderBuiltAppRequestOptions & {\n runtime: BuiltRuntime;\n timing?: { phases: Record<string, number> } | undefined;\n },\n request: Request,\n): Promise<{ request: Request; type: \"continue\" } | { response: Response; type: \"response\" }> {\n if (!options.runtime.hasMiddleware) {\n return { request, type: \"continue\" };\n }\n\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, undefined);\n\n return resolveAppRouterMiddleware({\n appDir: options.runtime.appDir,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n instrumentation: options.instrumentation,\n request,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n timing: options.timing,\n });\n}\n\nfunction createBuiltRenderTiming(\n logger: AppRouterLogger | undefined,\n): { phases: Record<string, number> } | undefined {\n return logger?.debug === undefined ? undefined : { phases: {} };\n}\n\nfunction builtRenderTimingPhaseStartedAt(\n timing: { phases: Record<string, number> } | undefined,\n): number | undefined {\n return timing === undefined ? undefined : logNow();\n}\n\nfunction finishBuiltRenderTimingPhase(\n timing: { phases: Record<string, number> } | undefined,\n startedAt: number | undefined,\n phaseName: string,\n): void {\n if (timing === undefined || startedAt === undefined) {\n return;\n }\n\n timing.phases[phaseName] = logDurationMs(startedAt);\n}\n\nfunction emitBuiltRenderTiming(\n options: RenderBuiltAppRequestOptions,\n request: Request,\n timing: { phases: Record<string, number> } | undefined,\n status: number,\n): void {\n if (timing === undefined) {\n return;\n }\n\n emitRouterLog(options.logger, \"debug\", {\n method: request.method,\n path: new URL(request.url).pathname,\n phases: timing.phases,\n status,\n type: \"router:render:timing\",\n });\n}\n\nasync function applyBuiltAppResponseHook(\n response: Response,\n options: Pick<RenderBuiltAppRequestOptions, \"onResponse\" | \"request\">,\n runtime: BuiltRuntime,\n): Promise<Response> {\n await loadBuiltResponseHookArtifacts(runtime);\n const onResponse = await resolveAppRouterResponseHook({\n appDir: runtime.appDir,\n importPolicy: runtime.generatedImportPolicy,\n onResponse: options.onResponse,\n serverModules: runtime.serverModules,\n serverModuleCacheVersion: runtime.serverModuleCacheVersion,\n serverSourceFiles: runtime.serverSourceFiles,\n });\n const hooked = await onResponse?.(response, {\n request: options.request,\n });\n\n return hooked instanceof Response ? hooked : response;\n}\n\nasync function materializeResponseAsBuffer(response: Response): Promise<Response> {\n if (response.body === null) {\n return response;\n }\n\n // Drains streaming responses into a single Buffer (loses TTFB streaming\n // by design — opt-in via sinkStrategy === \"buffer\"). Avoids the\n // string → UTF-8 encode the Response stream would otherwise do lazily\n // during the socket write. Tagged via `bytesResponse` so `sendResponse`\n // can take the raw-bytes fast path.\n const bytes = new Uint8Array(await response.arrayBuffer());\n return bytesResponse(bytes, {\n headers: response.headers,\n status: response.status,\n statusText: response.statusText,\n });\n}\n\n/**\n * Starts a Node HTTP server for an already built app-router output directory.\n *\n * Use this for production-like local serving or custom Node deployments. It loads `.mreact/server` artifacts, applies the generated import policy when configured, enforces host trust options, and returns a `close()` method for orderly shutdown.\n */\nexport async function startServer(\n options: StartServerOptions,\n): Promise<{ close(): Promise<void>; server: Server; url: string }> {\n warnIfImplicitHostTrust(options);\n const runtime = await createBuiltRequestRuntime({\n importPolicy: options.importPolicy,\n outDir: options.outDir,\n });\n\n return await startNodeRequestServer({\n allowedHosts: options.allowedHosts,\n errorHandler: options.errorHandler,\n hostname: options.hostname,\n hostPolicy: options.hostPolicy,\n logger: options.logger,\n onUpgrade: options.onUpgrade,\n port: options.port,\n resolveHost: resolveRequestHost,\n trustForwardedProto: options.trustForwardedProto,\n render: (request) =>\n runtime.render(request, {\n dehydrateOptions: options.dehydrateOptions,\n instrumentation: options.instrumentation,\n logger: options.logger,\n onResponse: options.onResponse,\n prerenderStore: options.prerenderStore,\n routeCache: options.routeCache,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n }),\n });\n}\n\nexport const __readBuiltPublicAssetForTest = readBuiltPublicAsset;\n\nexport function __clearBuiltRuntimeCacheForTest(): void {\n builtRuntimeCache.clear();\n builtRuntimeReadInflight.clear();\n builtRuntimeMaterializeCountForTest = 0;\n}\n\nexport function __getBuiltRuntimeMaterializeCountForTest(): number {\n return builtRuntimeMaterializeCountForTest;\n}\n\nexport function __clearBuiltPublicAssetCacheForTest(): void {\n clearBuiltPublicAssetCacheForTest();\n}\n\nexport function __getBuiltPublicAssetCacheSizeForTest(): number {\n return getBuiltPublicAssetCacheSizeForTest();\n}\n\nasync function readBuiltRuntime(options: {\n immutable?: boolean | undefined;\n outDir: string;\n runtimeDir?: string | undefined;\n}): Promise<BuiltRuntime> {\n const outDir = options.outDir;\n const runtimeDir = options.runtimeDir ?? join(outDir, \"server\", \"runtime\");\n const cacheKey = `${outDir}\\0${runtimeDir}`;\n const cached = builtRuntimeCache.get(cacheKey);\n\n if (options.immutable === true && cached !== undefined) {\n return cached.runtime;\n }\n\n if (cached === undefined) {\n const inflight = builtRuntimeReadInflight.get(cacheKey);\n if (inflight !== undefined) {\n return inflight;\n }\n\n const runtime = readBuiltRuntimeUncached({\n cacheKey,\n cached,\n outDir,\n runtimeDir,\n });\n builtRuntimeReadInflight.set(cacheKey, runtime);\n void runtime\n .finally(() => {\n if (builtRuntimeReadInflight.get(cacheKey) === runtime) {\n builtRuntimeReadInflight.delete(cacheKey);\n }\n })\n .catch(() => {});\n return runtime;\n }\n\n return readBuiltRuntimeUncached({\n cacheKey,\n cached,\n outDir,\n runtimeDir,\n });\n}\n\nasync function readBuiltRuntimeUncached(options: {\n cached: BuiltRuntimeCacheEntry | undefined;\n cacheKey: string;\n outDir: string;\n runtimeDir: string;\n}): Promise<BuiltRuntime> {\n const { cacheKey, cached, outDir, runtimeDir } = options;\n const serverManifestPath = join(outDir, \"server\", \"manifest.json\");\n const clientManifestPath = join(outDir, \"client\", \"manifest.json\");\n const importPolicyPath = join(outDir, \"server\", \"import-policy.json\");\n const [serverManifestText, clientManifestText, importPolicyText] = await Promise.all([\n readRequiredBuiltArtifactText(serverManifestPath, \"built app server manifest\"),\n readRequiredBuiltArtifactText(clientManifestPath, \"built app client manifest\"),\n readBuiltImportPolicyText(outDir),\n ]);\n\n if (\n cached !== undefined &&\n cached.serverManifestText === serverManifestText &&\n cached.clientManifestText === clientManifestText &&\n cached.importPolicyText === importPolicyText\n ) {\n return cached.runtime;\n }\n\n const runtime = materializeBuiltRuntime({\n clientManifestText,\n clientManifestPath,\n importPolicyText,\n importPolicyPath,\n onMaterialize() {\n builtRuntimeMaterializeCountForTest += 1;\n },\n outDir,\n runtimeDir,\n serverManifestText,\n serverManifestPath,\n });\n\n builtRuntimeCache.set(cacheKey, {\n clientManifestText,\n importPolicyText,\n runtime,\n serverManifestText,\n });\n runtime.catch(() => {\n if (builtRuntimeCache.get(cacheKey)?.runtime === runtime) {\n builtRuntimeCache.delete(cacheKey);\n }\n });\n\n return runtime;\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === \"ENOENT\"\n );\n}\n\nasync function readRequiredBuiltArtifactText(labelPath: string, label: string): Promise<string> {\n try {\n return await readFile(labelPath, \"utf8\");\n } catch (error) {\n throw builtArtifactReadError(label, labelPath, error);\n }\n}\n\nfunction builtArtifactReadError(label: string, artifactPath: string, error: unknown): Error {\n const prefix = isMissingFileError(error) ? \"Missing\" : \"Unable to read\";\n const detail = error instanceof Error && error.message !== \"\" ? `: ${error.message}` : \"\";\n\n return new Error(`${prefix} ${label}: ${artifactPath}${detail}`, { cause: error });\n}\n\nasync function readPrerenderedRoute(\n runtime: BuiltRuntime,\n path: string,\n store: AppRouterPrerenderStore | undefined,\n): Promise<BuiltPrerenderedRoute | undefined> {\n const stored = await store?.get(path);\n\n if (stored !== undefined) {\n if (isCurrentPrerenderedRoute(stored)) {\n runtime.prerenderedRoutes.set(path, stored);\n return stored;\n }\n\n await store?.delete(path);\n }\n\n const manifestEntry = runtime.prerenderedRoutes.get(path);\n\n if (!isCurrentPrerenderedRoute(manifestEntry)) {\n runtime.prerenderedRoutes.delete(path);\n return undefined;\n }\n\n if (store !== undefined) {\n await store.set(path, manifestEntry);\n }\n\n return manifestEntry;\n}\n\nfunction renderBuiltDynamicResponse(\n options: RenderBuiltAppRequestOptions & {\n matchedRoute?: MatchedRoute | undefined;\n renderSignals?: { headerDependent: () => boolean } | undefined;\n requestUrl?: URL | undefined;\n runtime: BuiltRuntime;\n },\n): Promise<Response> {\n return renderAppRequest({\n ...builtRenderAppRequestOptions(options),\n ...(options.renderSignals === undefined ? {} : { renderSignals: options.renderSignals }),\n });\n}\n\nfunction builtRenderAppRequestOptions(\n options: RenderBuiltAppRequestOptions & {\n matchedRoute?: MatchedRoute | undefined;\n requestUrl?: URL | undefined;\n runtime: BuiltRuntime;\n },\n): RenderAppRequestRuntimeOptions {\n const serverRenderArtifactLoader: AppRouterServerRenderArtifactLoader = {\n async load(routeFile: string) {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, routeFile, {\n includeRender: true,\n });\n },\n };\n const renderOptions: RenderAppRequestRuntimeOptions = {\n appDir: options.runtime.appDir,\n assetBaseUrl: options.runtime.assetBaseUrl,\n clientScripts: options.runtime.clientScripts,\n clientStylesByFile: options.runtime.clientStylesByFile,\n clientStyles: options.runtime.clientStyles,\n dehydrateOptions: options.dehydrateOptions,\n importPolicy: {\n ...options.importPolicy,\n allowedSourceDirs: options.runtime.allowedSourceDirs,\n projectRoot: options.runtime.projectRoot,\n },\n request: options.request,\n instrumentation: options.instrumentation,\n logger: options.logger,\n matchedRoute: options.matchedRoute,\n navigationScripts: options.runtime.navigationScripts,\n routeCache: options.routeCache,\n routeMatcher: options.runtime.routeMatcher,\n requestUrl: options.requestUrl,\n routes: options.runtime.routes,\n serverRenderArtifactLoader,\n serverModules: options.runtime.serverModules,\n serverModuleCacheVersion: options.runtime.serverModuleCacheVersion,\n serverSourceFiles: options.runtime.serverSourceFiles,\n serverActionReferencesByFile: options.runtime.serverActionReferencesByFile,\n serverActions: mergeBuiltServerActionOptions(\n options.serverActions,\n options.runtime.serverActionManifest,\n ),\n skipMiddleware: true,\n onResponse: () => undefined,\n ...(options.preload === undefined ? {} : { preload: options.preload }),\n };\n\n return renderOptions;\n}\n\nfunction mergeBuiltServerActionOptions(\n options: AppRouterServerActionOptions | undefined,\n allowedActions: readonly { moduleId: string; exportName: string; inferred?: boolean }[] | undefined,\n): AppRouterServerActionOptions | undefined {\n if (allowedActions === undefined) {\n return options;\n }\n\n return {\n ...options,\n allowedActions,\n };\n}\n\nasync function renderAndCachePrerenderWithLock(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n path: string,\n): Promise<Response> {\n const lockKey =\n options.request.headers.get(\"x-mreact-navigation\") === \"1\"\n ? `${path}\\0navigation`\n : path;\n const existing = options.runtime.prerenderLocks.get(lockKey);\n\n if (existing !== undefined) {\n const result = await existing;\n if (result.shareable) {\n return cloneResponse(result.response);\n }\n\n return (await runPrerenderRegeneration(options, path)).response;\n }\n\n const task = runPrerenderRegeneration(options, path);\n options.runtime.prerenderLocks.set(lockKey, task);\n\n try {\n return cloneResponse((await task).response);\n } finally {\n options.runtime.prerenderLocks.delete(lockKey);\n }\n}\n\nasync function runPrerenderRegeneration(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n path: string,\n): Promise<{ response: Response; shareable: boolean }> {\n const lockKey =\n options.request.headers.get(\"x-mreact-navigation\") === \"1\"\n ? `${path}\\0navigation`\n : path;\n const regenerate = async () => {\n const stored = await readPrerenderedRoute(options.runtime, path, options.prerenderStore);\n const storedResponse = prerenderedRouteResponse(stored, options.request);\n\n if (storedResponse !== undefined) {\n return {\n response: storedResponse,\n shareable: true,\n };\n }\n\n // A prerendered entry is replayed to every visitor by path alone, so a\n // render that depended on this visitor's request headers must not become\n // one; it is returned to the caller without being stored. The signal starts\n // closed so that a render which never reports back is not stored either.\n const renderSignals = {\n headerDependent: () => true,\n strictTransportSecurity: () => undefined as string | undefined,\n };\n const response = await renderBuiltDynamicResponse({ ...options, renderSignals });\n\n if (!response.ok) {\n return { response, shareable: false };\n }\n\n // Draining the body finishes a streamed render, so the signal is only\n // final once the whole response has been read.\n const body = await response.text();\n\n if (renderSignals.headerDependent() || isVisitorDependentResponse(response)) {\n return {\n response: htmlResponse(body, {\n headers: response.headers,\n status: response.status,\n }),\n shareable: false,\n };\n }\n\n const navigation = options.request.headers.get(\"x-mreact-navigation\") === \"1\";\n if (navigation && stored === undefined) {\n return {\n response: htmlResponse(body, {\n headers: response.headers,\n status: response.status,\n }),\n shareable: false,\n };\n }\n\n return {\n response: await cacheRegeneratedPrerenderedRoute(\n options.runtime,\n path,\n body,\n response,\n renderSignals.strictTransportSecurity(),\n options.prerenderStore,\n navigation ? stored : undefined,\n ),\n shareable: true,\n };\n };\n\n return options.prerenderStore?.withLock === undefined\n ? await regenerate()\n : await options.prerenderStore.withLock(lockKey, regenerate);\n}\n\nasync function applyBuiltPrerenderInvalidations(\n runtime: BuiltRuntime,\n response: Response,\n store: AppRouterPrerenderStore | undefined,\n): Promise<void> {\n const revalidated = response.headers.get(\"x-mreact-revalidate\");\n\n if (revalidated === null) {\n return;\n }\n\n for (const path of revalidated.split(\",\")) {\n const normalized = normalizeRoutePath(path.trim());\n runtime.prerenderedRoutes.delete(normalized);\n await store?.delete(normalized);\n }\n}\n\nasync function cacheRegeneratedPrerenderedRoute(\n runtime: BuiltRuntime,\n path: string,\n body: string,\n response: Response,\n strictTransportSecurity: string | undefined,\n store: AppRouterPrerenderStore | undefined,\n existing?: BuiltPrerenderedRoute | undefined,\n): Promise<Response> {\n const headers = storedPrerenderedRouteHeaders(response.headers);\n const entry: BuiltPrerenderedRoute =\n existing === undefined\n ? {\n headers,\n html: body,\n schemaVersion: PRERENDERED_ROUTE_SCHEMA_VERSION,\n status: response.status,\n ...(strictTransportSecurity === undefined ? {} : { strictTransportSecurity }),\n }\n : { ...existing, navigationHtml: body };\n runtime.prerenderedRoutes.set(path, entry);\n await store?.set(path, entry);\n\n return htmlResponse(body, {\n headers: response.headers,\n status: response.status,\n });\n}\n\nasync function cloneResponse(response: Response): Promise<Response> {\n return htmlResponse(await response.clone().text(), {\n headers: response.headers,\n status: response.status,\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reckona/mreact-router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.203",
|
|
4
4
|
"description": "File-system app router, SSR, actions, and deployment adapters for mreact.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jsx",
|
|
@@ -111,20 +111,20 @@
|
|
|
111
111
|
"dependencies": {
|
|
112
112
|
"@typescript/typescript6": "^6.0.2",
|
|
113
113
|
"esbuild": ">=0.28.1 <0.29",
|
|
114
|
-
"@reckona/mreact": "0.0.
|
|
115
|
-
"@reckona/mreact-
|
|
116
|
-
"@reckona/mreact-
|
|
117
|
-
"@reckona/mreact-
|
|
118
|
-
"@reckona/mreact-
|
|
119
|
-
"@reckona/mreact-compiler": "0.0.
|
|
120
|
-
"@reckona/mreact-
|
|
121
|
-
"@reckona/mreact-
|
|
122
|
-
"@reckona/mreact-
|
|
114
|
+
"@reckona/mreact": "0.0.203",
|
|
115
|
+
"@reckona/mreact-devtools": "0.0.203",
|
|
116
|
+
"@reckona/mreact-reactive-core": "0.0.203",
|
|
117
|
+
"@reckona/mreact-query": "0.0.203",
|
|
118
|
+
"@reckona/mreact-server": "0.0.203",
|
|
119
|
+
"@reckona/mreact-compiler": "0.0.203",
|
|
120
|
+
"@reckona/mreact-reactive-dom": "0.0.203",
|
|
121
|
+
"@reckona/mreact-compat": "0.0.203",
|
|
122
|
+
"@reckona/mreact-shared": "0.0.203"
|
|
123
123
|
},
|
|
124
124
|
"peerDependencies": {
|
|
125
125
|
"vite": ">=8.1.4 <9"
|
|
126
126
|
},
|
|
127
127
|
"optionalDependencies": {
|
|
128
|
-
"@reckona/mreact-router-native": "0.0.
|
|
128
|
+
"@reckona/mreact-router-native": "0.0.203"
|
|
129
129
|
}
|
|
130
130
|
}
|