@reckona/mreact-router 0.0.97 → 0.0.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +4 -0
  2. package/dist/actions.d.ts +7 -0
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +26 -2
  5. package/dist/actions.js.map +1 -1
  6. package/dist/adapters/aws-lambda.d.ts.map +1 -1
  7. package/dist/adapters/aws-lambda.js +10 -7
  8. package/dist/adapters/aws-lambda.js.map +1 -1
  9. package/dist/build.d.ts +38 -1
  10. package/dist/build.d.ts.map +1 -1
  11. package/dist/build.js +1087 -304
  12. package/dist/build.js.map +1 -1
  13. package/dist/bundle-pipeline.d.ts +7 -0
  14. package/dist/bundle-pipeline.d.ts.map +1 -1
  15. package/dist/bundle-pipeline.js +121 -87
  16. package/dist/bundle-pipeline.js.map +1 -1
  17. package/dist/cache.d.ts.map +1 -1
  18. package/dist/cache.js +10 -8
  19. package/dist/cache.js.map +1 -1
  20. package/dist/cli-options.d.ts +1 -0
  21. package/dist/cli-options.d.ts.map +1 -1
  22. package/dist/cli-options.js +16 -0
  23. package/dist/cli-options.js.map +1 -1
  24. package/dist/cli.js +1 -0
  25. package/dist/cli.js.map +1 -1
  26. package/dist/client.d.ts +6 -1
  27. package/dist/client.d.ts.map +1 -1
  28. package/dist/client.js +113 -8
  29. package/dist/client.js.map +1 -1
  30. package/dist/csrf.d.ts.map +1 -1
  31. package/dist/csrf.js +7 -3
  32. package/dist/csrf.js.map +1 -1
  33. package/dist/http.d.ts.map +1 -1
  34. package/dist/http.js +18 -1
  35. package/dist/http.js.map +1 -1
  36. package/dist/import-policy.d.ts.map +1 -1
  37. package/dist/import-policy.js +7 -3
  38. package/dist/import-policy.js.map +1 -1
  39. package/dist/index.d.ts +4 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/link.d.ts +5 -3
  43. package/dist/link.d.ts.map +1 -1
  44. package/dist/link.js +92 -3
  45. package/dist/link.js.map +1 -1
  46. package/dist/logger.d.ts +7 -1
  47. package/dist/logger.d.ts.map +1 -1
  48. package/dist/logger.js.map +1 -1
  49. package/dist/module-runner.d.ts +2 -0
  50. package/dist/module-runner.d.ts.map +1 -1
  51. package/dist/module-runner.js +1 -0
  52. package/dist/module-runner.js.map +1 -1
  53. package/dist/native-route-matcher.d.ts +2 -1
  54. package/dist/native-route-matcher.d.ts.map +1 -1
  55. package/dist/native-route-matcher.js +13 -2
  56. package/dist/native-route-matcher.js.map +1 -1
  57. package/dist/render.d.ts.map +1 -1
  58. package/dist/render.js +117 -2
  59. package/dist/render.js.map +1 -1
  60. package/dist/route-source.d.ts +4 -4
  61. package/dist/route-source.d.ts.map +1 -1
  62. package/dist/route-source.js +8 -8
  63. package/dist/route-source.js.map +1 -1
  64. package/dist/route-styles.d.ts +6 -0
  65. package/dist/route-styles.d.ts.map +1 -1
  66. package/dist/route-styles.js +10 -1
  67. package/dist/route-styles.js.map +1 -1
  68. package/dist/serve.d.ts +5 -0
  69. package/dist/serve.d.ts.map +1 -1
  70. package/dist/serve.js +7 -4
  71. package/dist/serve.js.map +1 -1
  72. package/package.json +11 -11
  73. package/src/actions.ts +42 -2
  74. package/src/adapters/aws-lambda.ts +33 -16
  75. package/src/build.ts +1578 -397
  76. package/src/bundle-pipeline.ts +136 -88
  77. package/src/cache.ts +13 -8
  78. package/src/cli-options.ts +20 -0
  79. package/src/cli.ts +1 -0
  80. package/src/client.ts +145 -14
  81. package/src/csrf.ts +8 -3
  82. package/src/http.ts +21 -1
  83. package/src/import-policy.ts +8 -3
  84. package/src/index.ts +5 -0
  85. package/src/link.ts +135 -8
  86. package/src/logger.ts +9 -1
  87. package/src/module-runner.ts +4 -0
  88. package/src/native-route-matcher.ts +13 -2
  89. package/src/render.ts +177 -2
  90. package/src/route-source.ts +8 -8
  91. package/src/route-styles.ts +17 -1
  92. package/src/serve.ts +11 -6
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 { createServer, type Server } from \"node:http\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, normalize, sep } from \"node:path\";\nimport type {\n BuiltPrerenderedRoute,\n BuiltServerManifest,\n BuiltServerModuleArtifact,\n} from \"./build.js\";\nimport type { AppRouterCache } from \"./cache.js\";\nimport type { ClientRouteManifestEntry } from \"./client-route-inference.js\";\nimport { createRouteMatcher, type AppRoute, type RouteMatcher } from \"./routes.js\";\nimport type { AppRouterServerActionOptions } from \"./actions.js\";\nimport type { AppRouterImportPolicy } from \"./import-policy.js\";\nimport {\n preloadBuiltRequestModules,\n renderAppRequest,\n resolveAppRouterMiddleware,\n type AppRouterRenderPreload,\n type AppRouterResponseHook,\n type RenderAppRequestOptions,\n} from \"./render.js\";\nimport type { RouterInstrumentation } from \"./trace.js\";\nimport { bytesResponse, htmlResponse, nodeRequestToWebRequest, sendResponse } from \"./http.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n nodeRequestPath,\n requestLogFields,\n type AppRouterLogger,\n} from \"./logger.js\";\nimport { builtAppRuntimePreloadPlan } from \"./preload-policy.js\";\nimport { routeShellCandidates } from \"./route-shells.js\";\nimport { normalizeRoutePath } from \"./route-path.js\";\nimport type { HttpUpgradeHandler } from \"./upgrade.js\";\n\ninterface BuiltRuntime {\n appDir: string;\n allowedSourceDirs: readonly string[];\n assetBaseUrl?: string | undefined;\n clientScripts: ReadonlyMap<string, string>;\n clientStyles: ReadonlyMap<string, readonly string[]>;\n hasMiddleware: boolean;\n navigationScripts: ReadonlyMap<string, string>;\n projectRoot: string;\n publicAssetBaseUrl?: string | undefined;\n prerenderableRoutes: ReadonlySet<string>;\n prerenderLocks: Map<string, Promise<Response>>;\n prerenderedRoutes: Map<string, BuiltPrerenderedRoute>;\n routeMatcher: RouteMatcher;\n routes: readonly AppRoute[];\n serverActionReferencesByFile: ReadonlyMap<\n string,\n readonly {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n moduleId: string;\n exportName: string;\n inferred: boolean;\n sourceHash: string;\n start: number;\n }[]\n >;\n serverActionManifest?: readonly { moduleId: string; exportName: string; inferred?: boolean }[] | undefined;\n serverModuleArtifactLoads: Map<string, Promise<void>>;\n serverModuleFiles: ReadonlyMap<string, string>;\n serverModuleRenderFiles: ReadonlyMap<string, string>;\n serverModuleRequestFiles: ReadonlyMap<string, string>;\n serverModules: Map<string, BuiltServerModuleArtifact>;\n serverModuleCacheVersion: string;\n serverSourceFiles: ReadonlyMap<string, string>;\n}\n\ninterface BuiltRuntimeCacheEntry {\n clientManifestText: string;\n runtime: Promise<BuiltRuntime>;\n serverManifestText: string;\n}\n\nconst builtRuntimeCache = new Map<string, BuiltRuntimeCacheEntry>();\nconst builtPublicAssetCache = new Map<string, BuiltPublicAsset | null>();\n\ninterface BuiltPublicAsset {\n bytes: Uint8Array;\n headers: HeadersInit;\n}\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\";\nexport type RequestHostPolicy = \"strict\" | \"trusted-proxy\";\n\nlet warnedImplicitHostTrust = false;\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\nexport type BuiltAppRuntimePreloadMode =\n | \"all\"\n | \"hot-route-requests\"\n | \"hot-routes\"\n | \"middleware\"\n | \"none\";\n\nexport interface BuiltAppRuntimePreloadStrategy {\n mode: BuiltAppRuntimePreloadMode;\n routes?: readonly string[] | undefined;\n}\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\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\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\n return {\n preload(preload) {\n return preloadBuiltAppRuntimeWithRuntime({\n importPolicy: options.importPolicy,\n preload,\n runtime,\n });\n },\n async render(request, renderOptions = {}) {\n const response = await renderBuiltAppRequestWithRuntime({\n ...renderOptions,\n importPolicy: renderOptions.importPolicy ?? options.importPolicy,\n outDir: options.outDir,\n request,\n runtime,\n });\n\n return applyBuiltAppResponseHook(response, {\n onResponse: renderOptions.onResponse,\n request,\n });\n },\n };\n}\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: 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 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\nexport async function renderBuiltAppRequest(\n options: RenderBuiltAppRequestOptions,\n): Promise<Response> {\n const response = await renderBuiltAppRequestWithRuntime({\n ...options,\n runtime: await readBuiltRuntime({\n outDir: options.outDir,\n immutable: options.immutableRuntime,\n runtimeDir: options.runtimeDir,\n }),\n });\n\n return applyBuiltAppResponseHook(response, options);\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 if (url.pathname.startsWith(\"/_mreact/client/\")) {\n return readBuiltClientAsset(options.outDir, url.pathname);\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 if (options.request.method === \"GET\" || options.request.method === \"HEAD\") {\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\n if (prerendered !== undefined) {\n if (options.request.method === \"HEAD\") {\n return new Response(null, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n }\n return htmlResponse(prerendered.html, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\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 request = middlewareResult.request;\n normalizedPath = normalizeRoutePath(new URL(request.url).pathname);\n matched = options.runtime.routeMatcher.match(normalizedPath);\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({ ...options, request });\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\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): Promise<Response> {\n const hooked = await options.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\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 const server = createServer(async (incoming, outgoing) => {\n const startedAt = logNow();\n const fallbackRequestFields = {\n method: incoming.method ?? \"GET\",\n path: nodeRequestPath(incoming.url),\n runtime: \"node\" as const,\n };\n\n try {\n const fallbackHost = `${options.hostname ?? \"127.0.0.1\"}:${options.port}`;\n const host = resolveRequestHost({\n allowedHosts: options.allowedHosts,\n fallbackHost,\n hostPolicy: options.hostPolicy,\n rawHost: incoming.headers.host,\n });\n const origin = `http://${host}`;\n const request = nodeRequestToWebRequest(incoming, origin);\n const logFields = requestLogFields(request, \"node\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n const response = await 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 emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n\n await sendResponse(outgoing, response);\n } catch (error) {\n // Log the full stack to stderr for operator visibility; never\n // place it in the response body where attackers can scrape it\n // (Issue 071). The errorHandler hook lets embedders customize\n // the public response shape while still benefiting from the\n // server-side log.\n emitRouterLog(options.logger, \"error\", {\n ...fallbackRequestFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n if (options.logger === undefined) {\n console.error(\"[mreact] startServer request failed:\", error);\n }\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n outgoing.statusCode = payload.status;\n outgoing.setHeader(\n \"content-type\",\n payload.headers?.[\"content-type\"] ?? \"text/plain; charset=utf-8\",\n );\n for (const [name, value] of Object.entries(payload.headers ?? {})) {\n if (name.toLowerCase() === \"content-type\") continue;\n outgoing.setHeader(name, value);\n }\n outgoing.end(payload.body);\n }\n });\n\n if (options.onUpgrade !== undefined) {\n server.on(\"upgrade\", options.onUpgrade);\n }\n\n await new Promise<void>((resolve) =>\n server.listen(options.port, options.hostname ?? \"127.0.0.1\", resolve),\n );\n const address = server.address();\n const port = typeof address === \"object\" && address !== null ? address.port : options.port;\n\n return {\n server,\n url: `http://${options.hostname ?? \"127.0.0.1\"}:${port}`,\n close: () =>\n new Promise<void>((resolve, reject) =>\n server.close((error) => (error ? reject(error) : resolve())),\n ),\n };\n}\n\nasync function readBuiltClientAsset(outDir: string, pathname: string): Promise<Response> {\n const clientPrefix = \"/_mreact/client/\";\n const relativePath = pathname.slice(clientPrefix.length);\n const normalized = normalize(relativePath);\n\n if (normalized.startsWith(\"..\")) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n try {\n const code = await readFile(join(outDir, \"client\", normalized), \"utf8\");\n\n return new Response(code, {\n headers: clientAssetHeaders(normalized),\n });\n } catch {\n return new Response(\"Not Found\", { status: 404 });\n }\n}\n\nasync function readBuiltPublicAsset(\n outDir: string,\n pathname: string,\n): Promise<Response | undefined> {\n const relativePath = pathname.startsWith(\"/\") ? pathname.slice(1) : pathname;\n\n if (relativePath === \"\") {\n return undefined;\n }\n\n const normalized = normalize(relativePath);\n\n if (isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\")) {\n return undefined;\n }\n\n try {\n const cacheKey = `${outDir}\\0${normalized}`;\n const cached = builtPublicAssetCache.get(cacheKey);\n\n if (cached === null) {\n return undefined;\n }\n\n if (cached !== undefined) {\n return bytesResponse(cached.bytes, {\n headers: cached.headers,\n });\n }\n\n const bytes = await readFile(join(outDir, \"client\", \"public\", normalized));\n const headers = publicAssetHeaders(normalized);\n\n builtPublicAssetCache.set(cacheKey, {\n bytes,\n headers,\n });\n\n return bytesResponse(bytes, { headers });\n } catch {\n builtPublicAssetCache.set(`${outDir}\\0${normalized}`, null);\n return undefined;\n }\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 const [serverManifestText, clientManifestText] = await Promise.all([\n readFile(join(outDir, \"server\", \"manifest.json\"), \"utf8\"),\n readFile(join(outDir, \"client\", \"manifest.json\"), \"utf8\"),\n ]);\n\n if (\n cached !== undefined &&\n cached.serverManifestText === serverManifestText &&\n cached.clientManifestText === clientManifestText\n ) {\n return cached.runtime;\n }\n\n const runtime = materializeBuiltRuntime({\n clientManifestText,\n outDir,\n runtimeDir,\n serverManifestText,\n });\n\n builtRuntimeCache.set(cacheKey, {\n clientManifestText,\n runtime,\n serverManifestText,\n });\n\n return runtime;\n}\n\nasync function materializeBuiltRuntime(options: {\n clientManifestText: string;\n outDir: string;\n runtimeDir: string;\n serverManifestText: string;\n}): Promise<BuiltRuntime> {\n const serverManifest = JSON.parse(options.serverManifestText) as BuiltServerManifest;\n const clientManifest = JSON.parse(options.clientManifestText) as {\n routes: ClientRouteManifestEntry[];\n };\n const appDir = await materializeBuiltServerApp(options.runtimeDir, serverManifest);\n const projectRoot = appDir;\n const routesDir = join(projectRoot, serverManifest.routesDir ?? \"\");\n const routes = serverManifest.routes.map((route) => ({\n ...route,\n file: join(projectRoot, route.file),\n }));\n const prerenderedRoutes = new Map(Object.entries(serverManifest.prerenderedRoutes ?? {}));\n const prerenderableRoutes = new Set(prerenderedRoutes.keys());\n const prerenderLocks = new Map<string, Promise<Response>>();\n const serverModules = new Map<string, BuiltServerModuleArtifact>(\n Object.entries(serverManifest.serverModules ?? {}).map(([file, artifact]) => [\n join(appDir, file),\n artifact,\n ]),\n );\n const serverModuleFiles = new Map(\n Object.entries(serverManifest.serverModuleFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverModuleRequestFiles = new Map(\n Object.entries(serverManifest.serverModuleRequestFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverModuleRenderFiles = new Map(\n Object.entries(serverManifest.serverModuleRenderFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverSourceFiles = new Map(\n Object.entries(serverManifest.files).map(([file, source]) => [join(appDir, file), source]),\n );\n const serverActionReferencesByFile = new Map(\n Object.entries(serverManifest.routeServerActionReferences ?? {}).map(([file, references]) => [\n join(appDir, file),\n references,\n ]),\n );\n const routeMatcher = createRouteMatcher(routes);\n const clientScripts = new Map(\n clientManifest.routes.flatMap((route) =>\n route.client && route.script !== undefined ? [[route.path, route.script]] : [],\n ),\n );\n const clientStyles = new Map(\n clientManifest.routes.flatMap((route) =>\n route.css !== undefined && route.css.length > 0 ? [[route.path, route.css]] : [],\n ),\n );\n const navigationScripts = new Map(\n clientManifest.routes.flatMap((route) =>\n route.navigation === true && route.navigationScript !== undefined\n ? [[route.path, route.navigationScript]]\n : [],\n ),\n );\n const hasMiddleware =\n serverSourceFiles.has(join(routesDir, \"middleware.ts\")) ||\n serverSourceFiles.has(join(routesDir, \"middleware.mreact.ts\"));\n const serverModuleCacheVersion = createHash(\"sha256\")\n .update(options.serverManifestText)\n .update(\"\\0\")\n .update(options.clientManifestText)\n .digest(\"hex\")\n .slice(0, 16);\n\n const allowedSourceDirs = (serverManifest.allowedSourceDirs ?? [\"\"]).map((directory) =>\n join(projectRoot, directory),\n );\n\n return {\n appDir: routesDir,\n allowedSourceDirs,\n ...(serverManifest.assetBaseUrl === undefined\n ? {}\n : { assetBaseUrl: serverManifest.assetBaseUrl }),\n clientScripts,\n clientStyles,\n hasMiddleware,\n navigationScripts,\n projectRoot,\n ...(serverManifest.publicAssetBaseUrl === undefined\n ? {}\n : { publicAssetBaseUrl: serverManifest.publicAssetBaseUrl }),\n prerenderableRoutes,\n prerenderLocks,\n prerenderedRoutes,\n routeMatcher,\n routes,\n serverActionReferencesByFile,\n ...(serverManifest.serverActionManifest === undefined\n ? {}\n : { serverActionManifest: serverManifest.serverActionManifest }),\n serverModuleArtifactLoads: new Map(),\n serverModuleFiles,\n serverModuleRenderFiles,\n serverModuleRequestFiles,\n serverModules,\n serverModuleCacheVersion,\n serverSourceFiles,\n };\n}\n\nasync function loadBuiltServerModuleArtifacts(\n runtime: BuiltRuntime,\n files: Iterable<string>,\n kind: BuiltServerModuleArtifactKind = \"all\",\n): Promise<void> {\n for (const file of files) {\n await loadBuiltServerModuleArtifact(runtime, file, kind);\n }\n}\n\ntype BuiltServerModuleArtifactKind = \"all\" | \"render\" | \"request\";\n\nasync function loadBuiltServerModuleArtifact(\n runtime: BuiltRuntime,\n file: string,\n kind: BuiltServerModuleArtifactKind = \"all\",\n): Promise<void> {\n if (kind === \"all\") {\n await loadBuiltServerModuleArtifact(runtime, file, \"request\");\n await loadBuiltServerModuleArtifact(runtime, file, \"render\");\n return;\n }\n\n const artifactPath =\n kind === \"request\"\n ? runtime.serverModuleRequestFiles.get(file) ?? runtime.serverModuleFiles.get(file)\n : runtime.serverModuleRenderFiles.get(file) ?? runtime.serverModuleFiles.get(file);\n\n if (artifactPath === undefined) {\n return;\n }\n\n const cached = runtime.serverModuleArtifactLoads.get(`${kind}\\0${file}`);\n\n if (cached !== undefined) {\n await cached;\n return;\n }\n\n const loaded = readFile(artifactPath, \"utf8\")\n .then((text) => {\n const existing = runtime.serverModules.get(file) ?? {};\n runtime.serverModules.set(\n file,\n mergeBuiltServerModuleArtifacts(\n existing,\n hydrateBuiltServerModuleArtifact(\n JSON.parse(text) as BuiltServerModuleArtifact,\n builtServerDirForArtifactPath(artifactPath),\n ),\n ),\n );\n })\n .catch((error) => {\n runtime.serverModuleArtifactLoads.delete(`${kind}\\0${file}`);\n throw error;\n });\n runtime.serverModuleArtifactLoads.set(`${kind}\\0${file}`, loaded);\n\n await loaded;\n}\n\nfunction allBuiltServerModuleFiles(runtime: BuiltRuntime): Iterable<string> {\n return new Set([\n ...runtime.serverModuleFiles.keys(),\n ...runtime.serverModuleRequestFiles.keys(),\n ...runtime.serverModuleRenderFiles.keys(),\n ]);\n}\n\nfunction builtServerDirForArtifactPath(artifactPath: string): string {\n const marker = `${sep}server-modules${sep}`;\n const index = artifactPath.lastIndexOf(marker);\n\n return index === -1 ? dirname(dirname(artifactPath)) : artifactPath.slice(0, index);\n}\n\nfunction hydrateBuiltServerModuleArtifact(\n artifact: BuiltServerModuleArtifact,\n serverDir: string,\n): BuiltServerModuleArtifact {\n return {\n ...(artifact.analysis === undefined ? {} : { analysis: artifact.analysis }),\n ...(artifact.loader === undefined\n ? {}\n : { loader: hydrateBuiltServerModuleOutput(artifact.loader, serverDir) }),\n ...(artifact.routeMetadata === undefined\n ? {}\n : { routeMetadata: hydrateBuiltServerModuleOutput(artifact.routeMetadata, serverDir) }),\n ...(artifact.request === undefined\n ? {}\n : { request: hydrateBuiltServerModuleOutput(artifact.request, serverDir) }),\n ...(artifact.stream === undefined\n ? {}\n : { stream: hydrateBuiltServerModuleOutput(artifact.stream, serverDir) }),\n ...(artifact.string === undefined\n ? {}\n : { string: hydrateBuiltServerModuleOutput(artifact.string, serverDir) }),\n };\n}\n\nfunction hydrateBuiltServerModuleOutput<T extends { moduleFile?: string | undefined }>(\n output: T,\n serverDir: string,\n): T {\n if (output.moduleFile === undefined || isAbsolute(output.moduleFile)) {\n return output;\n }\n\n return {\n ...output,\n moduleFile: join(serverDir, safeManifestFilePath(output.moduleFile)),\n };\n}\n\nfunction mergeBuiltServerModuleArtifacts(\n existing: BuiltServerModuleArtifact,\n loaded: BuiltServerModuleArtifact,\n): BuiltServerModuleArtifact {\n return {\n ...existing,\n ...loaded,\n };\n}\n\nasync function loadBuiltServerModuleArtifactsForRequest(\n runtime: BuiltRuntime,\n routeFile: string | undefined,\n options: {\n includeRender?: boolean | undefined;\n includeShells?: boolean | undefined;\n } = {},\n): Promise<void> {\n const roots = [\n join(runtime.appDir, \"middleware.ts\"),\n join(runtime.appDir, \"middleware.mreact.ts\"),\n ...(routeFile === undefined\n ? []\n : [\n routeFile,\n ...(options.includeShells === false ? [] : shellFilesForRoute(runtime, routeFile)),\n ]),\n ];\n const seen = new Set<string>();\n\n for (const file of roots) {\n await loadBuiltServerModuleArtifactClosure(runtime, file, seen, \"request\");\n }\n\n if (options.includeRender === true) {\n seen.clear();\n for (const file of roots) {\n await loadBuiltServerModuleArtifactClosure(runtime, file, seen, \"render\");\n }\n }\n}\n\nasync function loadBuiltServerModuleArtifactClosure(\n runtime: BuiltRuntime,\n file: string,\n seen: Set<string>,\n kind: BuiltServerModuleArtifactKind,\n): Promise<void> {\n if (seen.has(file)) {\n return;\n }\n seen.add(file);\n\n await loadBuiltServerModuleArtifact(runtime, file, kind);\n\n const source = runtime.serverSourceFiles.get(file);\n\n if (source === undefined) {\n return;\n }\n\n for (const specifier of localServerModuleSpecifiers(source)) {\n const resolved = resolveBuiltLocalServerSourceImport(runtime, file, specifier);\n\n if (resolved !== undefined) {\n await loadBuiltServerModuleArtifactClosure(runtime, resolved, seen, kind);\n }\n }\n}\n\nfunction localServerModuleSpecifiers(code: string): string[] {\n const specifiers = new Set<string>();\n const importPattern =\n /\\b(?:import|export)\\s+(?:type\\s+)?(?:[^\"']*?\\s+from\\s*)?[\"'](?<source>\\.{1,2}\\/[^\"']+)[\"']/g;\n\n for (const match of code.matchAll(importPattern)) {\n const source = match.groups?.source;\n\n if (source !== undefined) {\n specifiers.add(source);\n }\n }\n\n return Array.from(specifiers);\n}\n\nfunction resolveBuiltLocalServerSourceImport(\n runtime: BuiltRuntime,\n fromFile: string,\n specifier: string,\n): string | undefined {\n const base = join(dirname(fromFile), specifier);\n\n for (const candidate of localServerSourceImportCandidates(base)) {\n if (runtime.serverSourceFiles.has(candidate)) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction localServerSourceImportCandidates(base: string): string[] {\n const candidates = [base];\n\n if (base.endsWith(\".js\")) {\n const withoutJs = base.slice(0, -\".js\".length);\n candidates.push(`${withoutJs}.ts`, `${withoutJs}.tsx`, `${withoutJs}.mreact.tsx`);\n } else if (base.endsWith(\".jsx\")) {\n const withoutJsx = base.slice(0, -\".jsx\".length);\n candidates.push(`${withoutJsx}.tsx`, `${withoutJsx}.mreact.tsx`);\n } else if (base.endsWith(\".mreact\")) {\n candidates.push(`${base}.tsx`);\n } else {\n candidates.push(\n `${base}.ts`,\n `${base}.tsx`,\n `${base}.mreact.tsx`,\n join(base, \"index.ts\"),\n join(base, \"index.tsx\"),\n join(base, \"index.mreact.tsx\"),\n );\n }\n\n return candidates;\n}\n\nfunction shellFilesForRoute(runtime: BuiltRuntime, routeFile: string): string[] {\n return routeShellCandidates(runtime.appDir, routeFile)\n .map((candidate) => candidate.file)\n .filter((file) => runtime.serverSourceFiles.has(file));\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 runtime.prerenderedRoutes.set(path, stored);\n return stored;\n }\n\n const manifestEntry = runtime.prerenderedRoutes.get(path);\n\n if (manifestEntry !== undefined && store !== undefined) {\n await store.set(path, manifestEntry);\n }\n\n return manifestEntry;\n}\n\nfunction renderBuiltDynamicResponse(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): Promise<Response> {\n return renderAppRequest(builtRenderAppRequestOptions(options));\n}\n\nfunction builtRenderAppRequestOptions(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): RenderAppRequestOptions {\n const renderOptions: RenderAppRequestOptions & {\n __mreactLoadServerRenderArtifacts?: ((routeFile: string) => Promise<void>) | undefined;\n } = {\n appDir: options.runtime.appDir,\n assetBaseUrl: options.runtime.assetBaseUrl,\n clientScripts: options.runtime.clientScripts,\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 navigationScripts: options.runtime.navigationScripts,\n routeCache: options.routeCache,\n routeMatcher: options.runtime.routeMatcher,\n routes: options.runtime.routes,\n __mreactLoadServerRenderArtifacts: async (routeFile: string) => {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, routeFile, {\n includeRender: true,\n });\n },\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 ...(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 return cloneResponse(await existing);\n }\n\n const task = runPrerenderRegeneration(options, path);\n options.runtime.prerenderLocks.set(path, task);\n\n try {\n return cloneResponse(await task);\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> {\n const regenerate = async () => {\n const stored = await readPrerenderedRoute(options.runtime, path, options.prerenderStore);\n\n if (stored !== undefined) {\n return htmlResponse(stored.html, {\n headers: stored.headers,\n status: stored.status,\n });\n }\n\n const response = await renderBuiltDynamicResponse(options);\n\n return response.ok\n ? await cacheRegeneratedPrerenderedRoute(\n options.runtime,\n path,\n response,\n options.prerenderStore,\n )\n : response;\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 response: Response,\n store: AppRouterPrerenderStore | undefined,\n): Promise<Response> {\n const body = await response.text();\n const headers: Record<string, string> = {};\n\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n const entry = {\n headers,\n html: body,\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\nasync function materializeBuiltServerApp(\n runtimeDir: string,\n manifest: BuiltServerManifest,\n): Promise<string> {\n const appDir = join(runtimeDir, \"app\");\n\n await rm(appDir, { force: true, recursive: true });\n await Promise.all(\n Object.entries(manifest.files).map(async ([file, code]) => {\n const outputFile = join(appDir, safeManifestFilePath(file));\n\n await mkdir(dirname(outputFile), { recursive: true });\n await writeFile(outputFile, code);\n }),\n );\n\n return appDir;\n}\n\nfunction safeManifestFilePath(pathname: string): string {\n const normalized = normalize(pathname);\n\n if (isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\")) {\n throw new Error(`Invalid built app manifest file path: ${pathname}`);\n }\n\n return normalized;\n}\n\nfunction clientAssetHeaders(pathname: string): HeadersInit {\n if (pathname === \"manifest.json\") {\n return {\n \"cache-control\": \"no-cache\",\n \"content-type\": \"application/json; charset=utf-8\",\n };\n }\n\n return {\n \"cache-control\": \"public, max-age=31536000, immutable\",\n \"content-type\": pathname.endsWith(\".css\")\n ? \"text/css; charset=utf-8\"\n : \"text/javascript; charset=utf-8\",\n };\n}\n\nfunction publicAssetHeaders(pathname: string): HeadersInit {\n return {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": publicAssetContentType(pathname),\n };\n}\n\nfunction publicAssetContentType(pathname: string): string {\n if (pathname.endsWith(\".css\")) return \"text/css; charset=utf-8\";\n if (pathname.endsWith(\".html\")) return \"text/html; charset=utf-8\";\n if (pathname.endsWith(\".js\")) return \"text/javascript; charset=utf-8\";\n if (pathname.endsWith(\".json\")) return \"application/json; charset=utf-8\";\n if (pathname.endsWith(\".svg\")) return \"image/svg+xml\";\n if (pathname.endsWith(\".png\")) return \"image/png\";\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".ico\")) return \"image/x-icon\";\n if (pathname.endsWith(\".txt\")) return \"text/plain; charset=utf-8\";\n\n return \"application/octet-stream\";\n}\n"]}
1
+ {"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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","sourcesContent":["import { createServer, type Server } from \"node:http\";\nimport { createHash } from \"node:crypto\";\nimport { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { dirname, isAbsolute, join, normalize, sep } from \"node:path\";\nimport type {\n BuiltPrerenderedRoute,\n BuiltServerManifest,\n BuiltServerModuleArtifact,\n} from \"./build.js\";\nimport type { AppRouterCache } from \"./cache.js\";\nimport type { ClientRouteManifestEntry } from \"./client-route-inference.js\";\nimport { createRouteMatcher, type AppRoute, type RouteMatcher } from \"./routes.js\";\nimport type { AppRouterServerActionOptions } from \"./actions.js\";\nimport type { AppRouterImportPolicy } from \"./import-policy.js\";\nimport {\n preloadBuiltRequestModules,\n renderAppRequest,\n resolveAppRouterMiddleware,\n type AppRouterRenderPreload,\n type AppRouterResponseHook,\n type RenderAppRequestOptions,\n} from \"./render.js\";\nimport type { RouterInstrumentation } from \"./trace.js\";\nimport { bytesResponse, htmlResponse, nodeRequestToWebRequest, sendResponse } from \"./http.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n nodeRequestPath,\n requestLogFields,\n type AppRouterLogger,\n} from \"./logger.js\";\nimport { builtAppRuntimePreloadPlan } from \"./preload-policy.js\";\nimport { routeShellCandidates } from \"./route-shells.js\";\nimport { normalizeRoutePath } from \"./route-path.js\";\nimport type { HttpUpgradeHandler } from \"./upgrade.js\";\n\ninterface BuiltRuntime {\n appDir: string;\n allowedSourceDirs: readonly string[];\n assetBaseUrl?: string | undefined;\n clientScripts: ReadonlyMap<string, string>;\n clientStyles: ReadonlyMap<string, readonly string[]>;\n hasMiddleware: boolean;\n navigationScripts: ReadonlyMap<string, string>;\n projectRoot: string;\n publicAssetBaseUrl?: string | undefined;\n prerenderableRoutes: ReadonlySet<string>;\n prerenderLocks: Map<string, Promise<Response>>;\n prerenderedRoutes: Map<string, BuiltPrerenderedRoute>;\n routeMatcher: RouteMatcher;\n routes: readonly AppRoute[];\n serverActionReferencesByFile: ReadonlyMap<\n string,\n readonly {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n moduleId: string;\n exportName: string;\n inferred: boolean;\n sourceHash: string;\n start: number;\n }[]\n >;\n serverActionManifest?: readonly { moduleId: string; exportName: string; inferred?: boolean }[] | undefined;\n serverModuleArtifactLoads: Map<string, Promise<void>>;\n serverModuleFiles: ReadonlyMap<string, string>;\n serverModuleRenderFiles: ReadonlyMap<string, string>;\n serverModuleRequestFiles: ReadonlyMap<string, string>;\n serverModules: Map<string, BuiltServerModuleArtifact>;\n serverModuleCacheVersion: string;\n serverSourceFiles: ReadonlyMap<string, string>;\n}\n\ninterface BuiltRuntimeCacheEntry {\n clientManifestText: string;\n runtime: Promise<BuiltRuntime>;\n serverManifestText: string;\n}\n\nconst builtRuntimeCache = new Map<string, BuiltRuntimeCacheEntry>();\nconst builtPublicAssetCache = new Map<string, BuiltPublicAsset>();\n\ninterface BuiltPublicAsset {\n bytes: Uint8Array;\n headers: HeadersInit;\n}\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\";\nexport type RequestHostPolicy = \"strict\" | \"trusted-proxy\";\n\nlet warnedImplicitHostTrust = false;\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\nexport type BuiltAppRuntimePreloadMode =\n | \"all\"\n | \"hot-route-requests\"\n | \"hot-routes\"\n | \"middleware\"\n | \"none\";\n\nexport interface BuiltAppRuntimePreloadStrategy {\n mode: BuiltAppRuntimePreloadMode;\n routes?: readonly string[] | undefined;\n}\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\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\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\n return {\n preload(preload) {\n return preloadBuiltAppRuntimeWithRuntime({\n importPolicy: options.importPolicy,\n preload,\n runtime,\n });\n },\n async render(request, renderOptions = {}) {\n const response = await renderBuiltAppRequestWithRuntime({\n ...renderOptions,\n importPolicy: renderOptions.importPolicy ?? options.importPolicy,\n outDir: options.outDir,\n request,\n runtime,\n });\n\n return applyBuiltAppResponseHook(response, {\n onResponse: renderOptions.onResponse,\n request,\n });\n },\n };\n}\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: 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 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\nexport async function renderBuiltAppRequest(\n options: RenderBuiltAppRequestOptions,\n): Promise<Response> {\n const response = await renderBuiltAppRequestWithRuntime({\n ...options,\n runtime: await readBuiltRuntime({\n outDir: options.outDir,\n immutable: options.immutableRuntime,\n runtimeDir: options.runtimeDir,\n }),\n });\n\n return applyBuiltAppResponseHook(response, options);\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 if (url.pathname.startsWith(\"/_mreact/client/\")) {\n return readBuiltClientAsset(options.outDir, url.pathname);\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 if (options.request.method === \"GET\" || options.request.method === \"HEAD\") {\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\n if (prerendered !== undefined) {\n if (options.request.method === \"HEAD\") {\n return new Response(null, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\n }\n return htmlResponse(prerendered.html, {\n headers: prerendered.headers,\n status: prerendered.status,\n });\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 request = middlewareResult.request;\n normalizedPath = normalizeRoutePath(new URL(request.url).pathname);\n matched = options.runtime.routeMatcher.match(normalizedPath);\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({ ...options, request });\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\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): Promise<Response> {\n const hooked = await options.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\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 const server = createServer(async (incoming, outgoing) => {\n const startedAt = logNow();\n const fallbackRequestFields = {\n method: incoming.method ?? \"GET\",\n path: nodeRequestPath(incoming.url),\n runtime: \"node\" as const,\n };\n\n try {\n const fallbackHost = `${options.hostname ?? \"127.0.0.1\"}:${options.port}`;\n const host = resolveRequestHost({\n allowedHosts: options.allowedHosts,\n fallbackHost,\n hostPolicy: options.hostPolicy,\n rawHost: incoming.headers.host,\n });\n const origin = `http://${host}`;\n const request = nodeRequestToWebRequest(incoming, origin);\n const logFields = requestLogFields(request, \"node\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n const response = await 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 emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n\n await sendResponse(outgoing, response);\n } catch (error) {\n // Log the full stack to stderr for operator visibility; never\n // place it in the response body where attackers can scrape it\n // (Issue 071). The errorHandler hook lets embedders customize\n // the public response shape while still benefiting from the\n // server-side log.\n emitRouterLog(options.logger, \"error\", {\n ...fallbackRequestFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n if (options.logger === undefined) {\n console.error(\"[mreact] startServer request failed:\", error);\n }\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n outgoing.statusCode = payload.status;\n outgoing.setHeader(\n \"content-type\",\n payload.headers?.[\"content-type\"] ?? \"text/plain; charset=utf-8\",\n );\n for (const [name, value] of Object.entries(payload.headers ?? {})) {\n if (name.toLowerCase() === \"content-type\") continue;\n outgoing.setHeader(name, value);\n }\n outgoing.end(payload.body);\n }\n });\n\n if (options.onUpgrade !== undefined) {\n server.on(\"upgrade\", options.onUpgrade);\n }\n\n await new Promise<void>((resolve) =>\n server.listen(options.port, options.hostname ?? \"127.0.0.1\", resolve),\n );\n const address = server.address();\n const port = typeof address === \"object\" && address !== null ? address.port : options.port;\n\n return {\n server,\n url: `http://${options.hostname ?? \"127.0.0.1\"}:${port}`,\n close: () =>\n new Promise<void>((resolve, reject) =>\n server.close((error) => (error ? reject(error) : resolve())),\n ),\n };\n}\n\nasync function readBuiltClientAsset(outDir: string, pathname: string): Promise<Response> {\n const clientPrefix = \"/_mreact/client/\";\n const relativePath = pathname.slice(clientPrefix.length);\n const normalized = normalize(relativePath);\n\n if (normalized.startsWith(\"..\")) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n try {\n const code = await readFile(join(outDir, \"client\", normalized), \"utf8\");\n\n return new Response(code, {\n headers: clientAssetHeaders(normalized),\n });\n } catch {\n return new Response(\"Not Found\", { status: 404 });\n }\n}\n\nasync function readBuiltPublicAsset(\n outDir: string,\n pathname: string,\n): Promise<Response | undefined> {\n const relativePath = pathname.startsWith(\"/\") ? pathname.slice(1) : pathname;\n\n if (relativePath === \"\") {\n return undefined;\n }\n\n const normalized = normalize(relativePath);\n\n if (isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\")) {\n return undefined;\n }\n\n try {\n const cacheKey = `${outDir}\\0${normalized}`;\n const cached = builtPublicAssetCache.get(cacheKey);\n\n if (cached !== undefined) {\n return bytesResponse(cached.bytes, {\n headers: cached.headers,\n });\n }\n\n const bytes = await readFile(join(outDir, \"client\", \"public\", normalized));\n const headers = publicAssetHeaders(normalized);\n\n builtPublicAssetCache.set(cacheKey, {\n bytes,\n headers,\n });\n\n return bytesResponse(bytes, { headers });\n } catch {\n return undefined;\n }\n}\n\nexport const __readBuiltPublicAssetForTest = readBuiltPublicAsset;\n\nexport function __clearBuiltPublicAssetCacheForTest(): void {\n builtPublicAssetCache.clear();\n}\n\nexport function __getBuiltPublicAssetCacheSizeForTest(): number {\n return builtPublicAssetCache.size;\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 const [serverManifestText, clientManifestText] = await Promise.all([\n readFile(join(outDir, \"server\", \"manifest.json\"), \"utf8\"),\n readFile(join(outDir, \"client\", \"manifest.json\"), \"utf8\"),\n ]);\n\n if (\n cached !== undefined &&\n cached.serverManifestText === serverManifestText &&\n cached.clientManifestText === clientManifestText\n ) {\n return cached.runtime;\n }\n\n const runtime = materializeBuiltRuntime({\n clientManifestText,\n outDir,\n runtimeDir,\n serverManifestText,\n });\n\n builtRuntimeCache.set(cacheKey, {\n clientManifestText,\n runtime,\n serverManifestText,\n });\n\n return runtime;\n}\n\nasync function materializeBuiltRuntime(options: {\n clientManifestText: string;\n outDir: string;\n runtimeDir: string;\n serverManifestText: string;\n}): Promise<BuiltRuntime> {\n const serverManifest = JSON.parse(options.serverManifestText) as BuiltServerManifest;\n const clientManifest = JSON.parse(options.clientManifestText) as {\n routes: ClientRouteManifestEntry[];\n };\n const appDir = await materializeBuiltServerApp(options.runtimeDir, serverManifest);\n const projectRoot = appDir;\n const routesDir = join(projectRoot, serverManifest.routesDir ?? \"\");\n const routes = serverManifest.routes.map((route) => ({\n ...route,\n file: join(projectRoot, route.file),\n }));\n const prerenderedRoutes = new Map(Object.entries(serverManifest.prerenderedRoutes ?? {}));\n const prerenderableRoutes = new Set(prerenderedRoutes.keys());\n const prerenderLocks = new Map<string, Promise<Response>>();\n const serverModules = new Map<string, BuiltServerModuleArtifact>(\n Object.entries(serverManifest.serverModules ?? {}).map(([file, artifact]) => [\n join(appDir, file),\n artifact,\n ]),\n );\n const serverModuleFiles = new Map(\n Object.entries(serverManifest.serverModuleFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverModuleRequestFiles = new Map(\n Object.entries(serverManifest.serverModuleRequestFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverModuleRenderFiles = new Map(\n Object.entries(serverManifest.serverModuleRenderFiles ?? {}).map(([file, artifactFile]) => [\n join(appDir, file),\n join(options.outDir, \"server\", safeManifestFilePath(artifactFile)),\n ]),\n );\n const serverSourceFiles = new Map(\n Object.entries(serverManifest.files).map(([file, source]) => [join(appDir, file), source]),\n );\n const serverActionReferencesByFile = new Map(\n Object.entries(serverManifest.routeServerActionReferences ?? {}).map(([file, references]) => [\n join(appDir, file),\n references,\n ]),\n );\n const routeMatcher = createRouteMatcher(routes);\n const clientScripts = new Map(\n clientManifest.routes.flatMap((route) =>\n route.client && route.script !== undefined ? [[route.path, route.script]] : [],\n ),\n );\n const clientStyles = new Map(\n clientManifest.routes.flatMap((route) =>\n route.css !== undefined && route.css.length > 0 ? [[route.path, route.css]] : [],\n ),\n );\n const navigationScripts = new Map(\n clientManifest.routes.flatMap((route) =>\n route.navigation === true && route.navigationScript !== undefined\n ? [[route.path, route.navigationScript]]\n : [],\n ),\n );\n const hasMiddleware =\n serverSourceFiles.has(join(routesDir, \"middleware.ts\")) ||\n serverSourceFiles.has(join(routesDir, \"middleware.mreact.ts\"));\n const serverModuleCacheVersion = createHash(\"sha256\")\n .update(options.serverManifestText)\n .update(\"\\0\")\n .update(options.clientManifestText)\n .digest(\"hex\")\n .slice(0, 16);\n\n const allowedSourceDirs = (serverManifest.allowedSourceDirs ?? [\"\"]).map((directory) =>\n join(projectRoot, directory),\n );\n\n return {\n appDir: routesDir,\n allowedSourceDirs,\n ...(serverManifest.assetBaseUrl === undefined\n ? {}\n : { assetBaseUrl: serverManifest.assetBaseUrl }),\n clientScripts,\n clientStyles,\n hasMiddleware,\n navigationScripts,\n projectRoot,\n ...(serverManifest.publicAssetBaseUrl === undefined\n ? {}\n : { publicAssetBaseUrl: serverManifest.publicAssetBaseUrl }),\n prerenderableRoutes,\n prerenderLocks,\n prerenderedRoutes,\n routeMatcher,\n routes,\n serverActionReferencesByFile,\n ...(serverManifest.serverActionManifest === undefined\n ? {}\n : { serverActionManifest: serverManifest.serverActionManifest }),\n serverModuleArtifactLoads: new Map(),\n serverModuleFiles,\n serverModuleRenderFiles,\n serverModuleRequestFiles,\n serverModules,\n serverModuleCacheVersion,\n serverSourceFiles,\n };\n}\n\nasync function loadBuiltServerModuleArtifacts(\n runtime: BuiltRuntime,\n files: Iterable<string>,\n kind: BuiltServerModuleArtifactKind = \"all\",\n): Promise<void> {\n for (const file of files) {\n await loadBuiltServerModuleArtifact(runtime, file, kind);\n }\n}\n\ntype BuiltServerModuleArtifactKind = \"all\" | \"render\" | \"request\";\n\nasync function loadBuiltServerModuleArtifact(\n runtime: BuiltRuntime,\n file: string,\n kind: BuiltServerModuleArtifactKind = \"all\",\n): Promise<void> {\n if (kind === \"all\") {\n await loadBuiltServerModuleArtifact(runtime, file, \"request\");\n await loadBuiltServerModuleArtifact(runtime, file, \"render\");\n return;\n }\n\n const artifactPath =\n kind === \"request\"\n ? runtime.serverModuleRequestFiles.get(file) ?? runtime.serverModuleFiles.get(file)\n : runtime.serverModuleRenderFiles.get(file) ?? runtime.serverModuleFiles.get(file);\n\n if (artifactPath === undefined) {\n return;\n }\n\n const cached = runtime.serverModuleArtifactLoads.get(`${kind}\\0${file}`);\n\n if (cached !== undefined) {\n await cached;\n return;\n }\n\n const loaded = readFile(artifactPath, \"utf8\")\n .then((text) => {\n const existing = runtime.serverModules.get(file) ?? {};\n runtime.serverModules.set(\n file,\n mergeBuiltServerModuleArtifacts(\n existing,\n hydrateBuiltServerModuleArtifact(\n JSON.parse(text) as BuiltServerModuleArtifact,\n builtServerDirForArtifactPath(artifactPath),\n ),\n ),\n );\n })\n .catch((error) => {\n runtime.serverModuleArtifactLoads.delete(`${kind}\\0${file}`);\n throw error;\n });\n runtime.serverModuleArtifactLoads.set(`${kind}\\0${file}`, loaded);\n\n await loaded;\n}\n\nfunction allBuiltServerModuleFiles(runtime: BuiltRuntime): Iterable<string> {\n return new Set([\n ...runtime.serverModuleFiles.keys(),\n ...runtime.serverModuleRequestFiles.keys(),\n ...runtime.serverModuleRenderFiles.keys(),\n ]);\n}\n\nfunction builtServerDirForArtifactPath(artifactPath: string): string {\n const marker = `${sep}server-modules${sep}`;\n const index = artifactPath.lastIndexOf(marker);\n\n return index === -1 ? dirname(dirname(artifactPath)) : artifactPath.slice(0, index);\n}\n\nfunction hydrateBuiltServerModuleArtifact(\n artifact: BuiltServerModuleArtifact,\n serverDir: string,\n): BuiltServerModuleArtifact {\n return {\n ...(artifact.analysis === undefined ? {} : { analysis: artifact.analysis }),\n ...(artifact.loader === undefined\n ? {}\n : { loader: hydrateBuiltServerModuleOutput(artifact.loader, serverDir) }),\n ...(artifact.routeMetadata === undefined\n ? {}\n : { routeMetadata: hydrateBuiltServerModuleOutput(artifact.routeMetadata, serverDir) }),\n ...(artifact.request === undefined\n ? {}\n : { request: hydrateBuiltServerModuleOutput(artifact.request, serverDir) }),\n ...(artifact.stream === undefined\n ? {}\n : { stream: hydrateBuiltServerModuleOutput(artifact.stream, serverDir) }),\n ...(artifact.string === undefined\n ? {}\n : { string: hydrateBuiltServerModuleOutput(artifact.string, serverDir) }),\n };\n}\n\nfunction hydrateBuiltServerModuleOutput<T extends { moduleFile?: string | undefined }>(\n output: T,\n serverDir: string,\n): T {\n if (output.moduleFile === undefined || isAbsolute(output.moduleFile)) {\n return output;\n }\n\n return {\n ...output,\n moduleFile: join(serverDir, safeManifestFilePath(output.moduleFile)),\n };\n}\n\nfunction mergeBuiltServerModuleArtifacts(\n existing: BuiltServerModuleArtifact,\n loaded: BuiltServerModuleArtifact,\n): BuiltServerModuleArtifact {\n return {\n ...existing,\n ...loaded,\n };\n}\n\nasync function loadBuiltServerModuleArtifactsForRequest(\n runtime: BuiltRuntime,\n routeFile: string | undefined,\n options: {\n includeRender?: boolean | undefined;\n includeShells?: boolean | undefined;\n } = {},\n): Promise<void> {\n const roots = [\n join(runtime.appDir, \"middleware.ts\"),\n join(runtime.appDir, \"middleware.mreact.ts\"),\n ...(routeFile === undefined\n ? []\n : [\n routeFile,\n ...(options.includeShells === false ? [] : shellFilesForRoute(runtime, routeFile)),\n ]),\n ];\n const seen = new Set<string>();\n\n for (const file of roots) {\n await loadBuiltServerModuleArtifactClosure(runtime, file, seen, \"request\");\n }\n\n if (options.includeRender === true) {\n seen.clear();\n for (const file of roots) {\n await loadBuiltServerModuleArtifactClosure(runtime, file, seen, \"render\");\n }\n }\n}\n\nasync function loadBuiltServerModuleArtifactClosure(\n runtime: BuiltRuntime,\n file: string,\n seen: Set<string>,\n kind: BuiltServerModuleArtifactKind,\n): Promise<void> {\n if (seen.has(file)) {\n return;\n }\n seen.add(file);\n\n await loadBuiltServerModuleArtifact(runtime, file, kind);\n\n const source = runtime.serverSourceFiles.get(file);\n\n if (source === undefined) {\n return;\n }\n\n for (const specifier of localServerModuleSpecifiers(source)) {\n const resolved = resolveBuiltLocalServerSourceImport(runtime, file, specifier);\n\n if (resolved !== undefined) {\n await loadBuiltServerModuleArtifactClosure(runtime, resolved, seen, kind);\n }\n }\n}\n\nfunction localServerModuleSpecifiers(code: string): string[] {\n const specifiers = new Set<string>();\n const importPattern =\n /\\b(?:import|export)\\s+(?:type\\s+)?(?:[^\"']*?\\s+from\\s*)?[\"'](?<source>\\.{1,2}\\/[^\"']+)[\"']/g;\n\n for (const match of code.matchAll(importPattern)) {\n const source = match.groups?.source;\n\n if (source !== undefined) {\n specifiers.add(source);\n }\n }\n\n return Array.from(specifiers);\n}\n\nfunction resolveBuiltLocalServerSourceImport(\n runtime: BuiltRuntime,\n fromFile: string,\n specifier: string,\n): string | undefined {\n const base = join(dirname(fromFile), specifier);\n\n for (const candidate of localServerSourceImportCandidates(base)) {\n if (runtime.serverSourceFiles.has(candidate)) {\n return candidate;\n }\n }\n\n return undefined;\n}\n\nfunction localServerSourceImportCandidates(base: string): string[] {\n const candidates = [base];\n\n if (base.endsWith(\".js\")) {\n const withoutJs = base.slice(0, -\".js\".length);\n candidates.push(`${withoutJs}.ts`, `${withoutJs}.tsx`, `${withoutJs}.mreact.tsx`);\n } else if (base.endsWith(\".jsx\")) {\n const withoutJsx = base.slice(0, -\".jsx\".length);\n candidates.push(`${withoutJsx}.tsx`, `${withoutJsx}.mreact.tsx`);\n } else if (base.endsWith(\".mreact\")) {\n candidates.push(`${base}.tsx`);\n } else {\n candidates.push(\n `${base}.ts`,\n `${base}.tsx`,\n `${base}.mreact.tsx`,\n join(base, \"index.ts\"),\n join(base, \"index.tsx\"),\n join(base, \"index.mreact.tsx\"),\n );\n }\n\n return candidates;\n}\n\nfunction shellFilesForRoute(runtime: BuiltRuntime, routeFile: string): string[] {\n return routeShellCandidates(runtime.appDir, routeFile)\n .map((candidate) => candidate.file)\n .filter((file) => runtime.serverSourceFiles.has(file));\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 runtime.prerenderedRoutes.set(path, stored);\n return stored;\n }\n\n const manifestEntry = runtime.prerenderedRoutes.get(path);\n\n if (manifestEntry !== undefined && store !== undefined) {\n await store.set(path, manifestEntry);\n }\n\n return manifestEntry;\n}\n\nfunction renderBuiltDynamicResponse(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): Promise<Response> {\n return renderAppRequest(builtRenderAppRequestOptions(options));\n}\n\nfunction builtRenderAppRequestOptions(\n options: RenderBuiltAppRequestOptions & { runtime: BuiltRuntime },\n): RenderAppRequestOptions {\n const renderOptions: RenderAppRequestOptions & {\n __mreactLoadServerRenderArtifacts?: ((routeFile: string) => Promise<void>) | undefined;\n } = {\n appDir: options.runtime.appDir,\n assetBaseUrl: options.runtime.assetBaseUrl,\n clientScripts: options.runtime.clientScripts,\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 navigationScripts: options.runtime.navigationScripts,\n routeCache: options.routeCache,\n routeMatcher: options.runtime.routeMatcher,\n routes: options.runtime.routes,\n __mreactLoadServerRenderArtifacts: async (routeFile: string) => {\n await loadBuiltServerModuleArtifactsForRequest(options.runtime, routeFile, {\n includeRender: true,\n });\n },\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 ...(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 return cloneResponse(await existing);\n }\n\n const task = runPrerenderRegeneration(options, path);\n options.runtime.prerenderLocks.set(path, task);\n\n try {\n return cloneResponse(await task);\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> {\n const regenerate = async () => {\n const stored = await readPrerenderedRoute(options.runtime, path, options.prerenderStore);\n\n if (stored !== undefined) {\n return htmlResponse(stored.html, {\n headers: stored.headers,\n status: stored.status,\n });\n }\n\n const response = await renderBuiltDynamicResponse(options);\n\n return response.ok\n ? await cacheRegeneratedPrerenderedRoute(\n options.runtime,\n path,\n response,\n options.prerenderStore,\n )\n : response;\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 response: Response,\n store: AppRouterPrerenderStore | undefined,\n): Promise<Response> {\n const body = await response.text();\n const headers: Record<string, string> = {};\n\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n const entry = {\n headers,\n html: body,\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\nasync function materializeBuiltServerApp(\n runtimeDir: string,\n manifest: BuiltServerManifest,\n): Promise<string> {\n const appDir = join(runtimeDir, \"app\");\n\n await rm(appDir, { force: true, recursive: true });\n await Promise.all(\n Object.entries(manifest.files).map(async ([file, code]) => {\n const outputFile = join(appDir, safeManifestFilePath(file));\n\n await mkdir(dirname(outputFile), { recursive: true });\n await writeFile(outputFile, code);\n }),\n );\n\n return appDir;\n}\n\nfunction safeManifestFilePath(pathname: string): string {\n const normalized = normalize(pathname);\n\n if (isAbsolute(normalized) || normalized === \"..\" || normalized.startsWith(\"../\")) {\n throw new Error(`Invalid built app manifest file path: ${pathname}`);\n }\n\n return normalized;\n}\n\nfunction clientAssetHeaders(pathname: string): HeadersInit {\n if (pathname === \"manifest.json\") {\n return {\n \"cache-control\": \"no-cache\",\n \"content-type\": \"application/json; charset=utf-8\",\n };\n }\n\n return {\n \"cache-control\": \"public, max-age=31536000, immutable\",\n \"content-type\": pathname.endsWith(\".css\")\n ? \"text/css; charset=utf-8\"\n : \"text/javascript; charset=utf-8\",\n };\n}\n\nfunction publicAssetHeaders(pathname: string): HeadersInit {\n return {\n \"cache-control\": \"public, max-age=3600\",\n \"content-type\": publicAssetContentType(pathname),\n };\n}\n\nfunction publicAssetContentType(pathname: string): string {\n if (pathname.endsWith(\".css\")) return \"text/css; charset=utf-8\";\n if (pathname.endsWith(\".html\")) return \"text/html; charset=utf-8\";\n if (pathname.endsWith(\".js\")) return \"text/javascript; charset=utf-8\";\n if (pathname.endsWith(\".json\")) return \"application/json; charset=utf-8\";\n if (pathname.endsWith(\".svg\")) return \"image/svg+xml\";\n if (pathname.endsWith(\".png\")) return \"image/png\";\n if (pathname.endsWith(\".jpg\") || pathname.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (pathname.endsWith(\".webp\")) return \"image/webp\";\n if (pathname.endsWith(\".ico\")) return \"image/x-icon\";\n if (pathname.endsWith(\".txt\")) return \"text/plain; charset=utf-8\";\n\n return \"application/octet-stream\";\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reckona/mreact-router",
3
- "version": "0.0.97",
3
+ "version": "0.0.98",
4
4
  "description": "File-system app router, SSR, actions, and deployment adapters for mreact.",
5
5
  "keywords": [
6
6
  "jsx",
@@ -105,20 +105,20 @@
105
105
  },
106
106
  "dependencies": {
107
107
  "typescript": "^6.0.3",
108
- "@reckona/mreact": "0.0.97",
109
- "@reckona/mreact-compiler": "0.0.97",
110
- "@reckona/mreact-query": "0.0.97",
111
- "@reckona/mreact-devtools": "0.0.97",
112
- "@reckona/mreact-reactive-core": "0.0.97",
113
- "@reckona/mreact-compat": "0.0.97",
114
- "@reckona/mreact-reactive-dom": "0.0.97",
115
- "@reckona/mreact-shared": "0.0.97",
116
- "@reckona/mreact-server": "0.0.97"
108
+ "@reckona/mreact": "0.0.98",
109
+ "@reckona/mreact-compat": "0.0.98",
110
+ "@reckona/mreact-devtools": "0.0.98",
111
+ "@reckona/mreact-query": "0.0.98",
112
+ "@reckona/mreact-compiler": "0.0.98",
113
+ "@reckona/mreact-reactive-core": "0.0.98",
114
+ "@reckona/mreact-reactive-dom": "0.0.98",
115
+ "@reckona/mreact-server": "0.0.98",
116
+ "@reckona/mreact-shared": "0.0.98"
117
117
  },
118
118
  "peerDependencies": {
119
119
  "vite": ">=8 <9"
120
120
  },
121
121
  "optionalDependencies": {
122
- "@reckona/mreact-router-native": "0.0.97"
122
+ "@reckona/mreact-router-native": "0.0.98"
123
123
  }
124
124
  }
package/src/actions.ts CHANGED
@@ -18,6 +18,7 @@ import { bundleRouterModule, type RouterCompatBuildApi } from "./bundle-pipeline
18
18
  import { type AppRouterCache, withRouteCacheContext } from "./cache.js";
19
19
  import { fileImportMetaUrlPlugin, importAppRouterSourceModule } from "./module-runner.js";
20
20
  import { createAppRouterImportPolicyPlugin, type AppRouterImportPolicy } from "./import-policy.js";
21
+ import { cookies, type RequestCookies } from "./navigation.js";
21
22
  export {
22
23
  createFormCsrfToken,
23
24
  formCsrfCookie,
@@ -42,7 +43,7 @@ const formFieldModuleId = "__mreact_module_id";
42
43
  const formFieldExportName = "__mreact_export_name";
43
44
  const formFieldNonce = "__mreact_action_nonce";
44
45
  const formFieldActionToken = "__mreact_action_token";
45
- const actionTokenSecret = process.env.MREACT_SERVER_ACTION_SECRET ?? randomBytes(32).toString("base64url");
46
+ const actionTokenSecret = process.env.MREACT_SERVER_ACTION_SECRET ?? defaultActionTokenSecret();
46
47
  // Bounded default replay store for form-action nonces. The previous
47
48
  // implementation was an unbounded Set that grew with every successful
48
49
  // submission (Issue 069). Production callers should still pass a shared
@@ -65,6 +66,23 @@ const DEFAULT_REPLAY_MAX_ENTRIES = 50_000;
65
66
  const DEFAULT_ACTION_BODY_MAX_BYTES = 10 * 1024 * 1024;
66
67
  let warnedUnrestrictedServerActions = false;
67
68
 
69
+ export interface ServerActionContext {
70
+ clientIp?: string | undefined;
71
+ cookies: RequestCookies;
72
+ headers: Headers;
73
+ request: Request;
74
+ }
75
+
76
+ function defaultActionTokenSecret(): string {
77
+ if (isProductionEnvironment()) {
78
+ console.warn(
79
+ "mreact-router: MREACT_SERVER_ACTION_SECRET is not set. Inferred server action tokens use a per-process secret and may fail across multiple production instances.",
80
+ );
81
+ }
82
+
83
+ return randomBytes(32).toString("base64url");
84
+ }
85
+
68
86
  class BoundedReplayStore {
69
87
  private readonly entries = new Map<string, number>();
70
88
 
@@ -431,7 +449,7 @@ async function dispatchServerActionRequestWithoutCacheContext(options: {
431
449
  }
432
450
 
433
451
  try {
434
- const value = await action(actionFormData);
452
+ const value = await action(actionFormData, createServerActionContext(options.request));
435
453
 
436
454
  if (value instanceof Response) {
437
455
  return value;
@@ -450,6 +468,28 @@ async function dispatchServerActionRequestWithoutCacheContext(options: {
450
468
  }
451
469
  }
452
470
 
471
+ function createServerActionContext(request: Request): ServerActionContext {
472
+ const clientIp = clientIpFromRequest(request);
473
+
474
+ return {
475
+ ...(clientIp === undefined ? {} : { clientIp }),
476
+ cookies: cookies(request),
477
+ headers: request.headers,
478
+ request,
479
+ };
480
+ }
481
+
482
+ function clientIpFromRequest(request: Request): string | undefined {
483
+ const forwarded = request.headers.get("x-forwarded-for")?.split(",")[0]?.trim();
484
+
485
+ if (forwarded !== undefined && forwarded !== "") {
486
+ return forwarded;
487
+ }
488
+
489
+ const realIp = request.headers.get("x-real-ip")?.trim();
490
+ return realIp === "" ? undefined : realIp;
491
+ }
492
+
453
493
  function validateServerActionBodySize(
454
494
  request: Request,
455
495
  maxBodyBytes: number,
@@ -232,16 +232,19 @@ function createAwsLambdaRequestHandlerFromRuntime(
232
232
  const payload = options.errorHandler
233
233
  ? options.errorHandler(error)
234
234
  : { body: "Internal Server Error", status: 500 };
235
+ const response = await applyAwsLambdaResponseHook(
236
+ new Response(payload.body, {
237
+ headers: {
238
+ "content-type": "text/plain; charset=utf-8",
239
+ ...payload.headers,
240
+ },
241
+ status: payload.status,
242
+ }),
243
+ options,
244
+ request,
245
+ );
235
246
 
236
- return {
237
- body: payload.body,
238
- headers: {
239
- "content-type": "text/plain; charset=utf-8",
240
- ...payload.headers,
241
- },
242
- isBase64Encoded: false,
243
- statusCode: payload.status,
244
- };
247
+ return await responseToLambdaResult(response, phases);
245
248
  }
246
249
  };
247
250
  }
@@ -496,19 +499,33 @@ function createAwsLambdaStreamingRequestHandlerFromRuntime<TContext = unknown>(
496
499
  const payload = options.errorHandler
497
500
  ? options.errorHandler(error)
498
501
  : { body: "Internal Server Error", status: 500 };
499
- const response = new Response(payload.body, {
500
- headers: {
501
- "content-type": "text/plain; charset=utf-8",
502
- ...payload.headers,
503
- },
504
- status: payload.status,
505
- });
502
+ const response = await applyAwsLambdaResponseHook(
503
+ new Response(payload.body, {
504
+ headers: {
505
+ "content-type": "text/plain; charset=utf-8",
506
+ ...payload.headers,
507
+ },
508
+ status: payload.status,
509
+ }),
510
+ options,
511
+ request,
512
+ );
506
513
 
507
514
  await streamResponseToLambda(response, responseStream, runtime, phases);
508
515
  }
509
516
  });
510
517
  }
511
518
 
519
+ async function applyAwsLambdaResponseHook(
520
+ response: Response,
521
+ options: Pick<AwsLambdaRequestHandlerOptions, "onResponse">,
522
+ request: Request,
523
+ ): Promise<Response> {
524
+ const hooked = await options.onResponse?.(response, { request });
525
+
526
+ return hooked instanceof Response ? hooked : response;
527
+ }
528
+
512
529
  async function prepareAwsLambdaRuntimeDir(options: {
513
530
  outDir: string;
514
531
  runtimeDir?: string | undefined;