@reckona/mreact-router 0.0.81 → 0.0.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/adapters/aws-lambda.d.ts.map +1 -1
- package/dist/adapters/aws-lambda.js +17 -22
- package/dist/adapters/aws-lambda.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +3 -1
- package/dist/build.js.map +1 -1
- package/dist/client-route-inference.d.ts +2 -0
- package/dist/client-route-inference.d.ts.map +1 -0
- package/dist/client-route-inference.js +2 -0
- package/dist/client-route-inference.js.map +1 -0
- package/dist/client.d.ts +2 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +89 -24
- package/dist/client.js.map +1 -1
- package/dist/layout-composer.d.ts +24 -0
- package/dist/layout-composer.d.ts.map +1 -0
- package/dist/layout-composer.js +83 -0
- package/dist/layout-composer.js.map +1 -0
- package/dist/metadata.d.ts +9 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +419 -0
- package/dist/metadata.js.map +1 -0
- package/dist/middleware.d.ts +22 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +94 -0
- package/dist/middleware.js.map +1 -0
- package/dist/module-runner.d.ts +2 -2
- package/dist/module-runner.d.ts.map +1 -1
- package/dist/module-runner.js +1 -1
- package/dist/module-runner.js.map +1 -1
- package/dist/navigation-runtime.d.ts +2 -0
- package/dist/navigation-runtime.d.ts.map +1 -0
- package/dist/navigation-runtime.js +2 -0
- package/dist/navigation-runtime.js.map +1 -0
- package/dist/preload-policy.d.ts +24 -0
- package/dist/preload-policy.d.ts.map +1 -0
- package/dist/preload-policy.js +45 -0
- package/dist/preload-policy.js.map +1 -0
- package/dist/render.d.ts +1 -3
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +32 -676
- package/dist/render.js.map +1 -1
- package/dist/route-hydration-contract.d.ts +11 -0
- package/dist/route-hydration-contract.d.ts.map +1 -0
- package/dist/route-hydration-contract.js +21 -0
- package/dist/route-hydration-contract.js.map +1 -0
- package/dist/route-module-loader.d.ts +10 -0
- package/dist/route-module-loader.d.ts.map +1 -0
- package/dist/route-module-loader.js +61 -0
- package/dist/route-module-loader.js.map +1 -0
- package/dist/routes.js +6 -0
- package/dist/routes.js.map +1 -1
- package/dist/serve.d.ts +13 -0
- package/dist/serve.d.ts.map +1 -1
- package/dist/serve.js +63 -28
- package/dist/serve.js.map +1 -1
- package/dist/server-action-inference.d.ts.map +1 -1
- package/dist/server-action-inference.js +37 -1
- package/dist/server-action-inference.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +2 -1
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/adapters/aws-lambda.ts +21 -28
- package/src/build.ts +9 -6
- package/src/client-route-inference.ts +18 -0
- package/src/client.ts +124 -24
- package/src/layout-composer.ts +142 -0
- package/src/metadata.ts +578 -0
- package/src/middleware.ts +153 -0
- package/src/module-runner.ts +3 -2
- package/src/navigation-runtime.ts +16 -0
- package/src/preload-policy.ts +89 -0
- package/src/render.ts +75 -986
- package/src/route-hydration-contract.ts +22 -0
- package/src/route-module-loader.ts +95 -0
- package/src/routes.ts +8 -0
- package/src/serve.ts +110 -29
- package/src/server-action-inference.ts +49 -0
- package/src/vite.ts +6 -4
package/README.md
CHANGED
|
@@ -109,6 +109,8 @@ client-only code. Navigation observers are available from
|
|
|
109
109
|
|
|
110
110
|
Route-owned client data loading is inferred when the page render path reaches `cell()` state or a same-module browser-only helper, even if the initial server HTML has no event handler. Use route-level `"use client";` as an escape hatch when the client work is hidden behind dynamic dispatch, a registry, or another pattern the static analyzer cannot follow; otherwise a page that only renders passive SSR output may remain server-only and no `/_mreact/client/routes/...` script is emitted.
|
|
111
111
|
|
|
112
|
+
Client boundary inference follows rendered app-local imports through direct JSX, JSX member roots, simple aliases, and barrel re-exports, including renamed specifiers such as `export { Counter as Widget } from "./Counter"`.
|
|
113
|
+
|
|
112
114
|
Inferred form actions are bound to the rendered form with a hidden token derived from the CSRF token and form nonce. Single-process deployments use an automatically generated process secret; multi-instance deployments should set the same `MREACT_SERVER_ACTION_SECRET` value on every instance so forms rendered by one instance can be submitted to another.
|
|
113
115
|
|
|
114
116
|
Plain `multipart/form-data` route handlers do not automatically run the server-action CSRF guard. For cookie-authenticated upload forms that post directly to `route.ts`, render a hidden field named `formCsrfFieldName`, set `formCsrfCookie(token)` for the same token, and either call `validateFormCsrf(request, formData)` for small buffered forms or read the CSRF field with `parseMultipartStream()` before consuming a large file part. `request.formData()` buffers multipart file parts in memory; `parseMultipartStream(request, { fields })` keeps file parts as `ReadableStream<Uint8Array>` values with per-part and total byte limits. Workers APIs such as R2 require known-length streams, so `part.fixedLengthStream(length).readable` is only valid when the multipart part carries a `Content-Length` header or the handler can pass the exact byte length; otherwise use a bounded `arrayBuffer()` fallback for R2. Put the CSRF field before the file field when you want early rejection without reading the file body.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-lambda.d.ts","sourceRoot":"","sources":["../../src/adapters/aws-lambda.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"aws-lambda.d.ts","sourceRoot":"","sources":["../../src/adapters/aws-lambda.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,9 @@ import { createHash } from "node:crypto";
|
|
|
3
3
|
import { access, lstat, mkdir, readFile, readlink, symlink } from "node:fs/promises";
|
|
4
4
|
import { tmpdir } from "node:os";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
|
+
import { normalizeBuiltAppRuntimePreloadStrategy, } from "../preload-policy.js";
|
|
6
7
|
import { emitRouterLog, logDurationMs, logError, logNow, requestLogFields, } from "../logger.js";
|
|
7
|
-
import {
|
|
8
|
+
import { createBuiltRequestRuntime, preloadBuiltAppRuntime, resolveRequestHost, warnIfImplicitHostTrust, } from "../serve.js";
|
|
8
9
|
export function createAwsLambdaRequestHandler(options) {
|
|
9
10
|
warnIfImplicitHostTrust(options);
|
|
10
11
|
const runtimeDirPromise = prepareAwsLambdaRuntimeDir(options);
|
|
@@ -37,18 +38,20 @@ function createAwsLambdaRequestHandlerFromRuntime(options, runtimeDirPromise, ru
|
|
|
37
38
|
await waitForAwsLambdaRuntimePreload(options, runtimePreloadPromise, phases, defaultPreloadMode);
|
|
38
39
|
const importPolicy = await resolveAwsLambdaImportPolicy(options);
|
|
39
40
|
const renderStartedAt = phaseStartedAt(phases);
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
outDir: options.outDir,
|
|
41
|
+
const builtRuntime = await createBuiltRequestRuntime({
|
|
42
|
+
immutableRuntime: true,
|
|
43
43
|
importPolicy,
|
|
44
|
+
outDir: options.outDir,
|
|
45
|
+
runtimeDir,
|
|
46
|
+
});
|
|
47
|
+
const preload = awsLambdaRenderPreload(options, runtimePreloadPromise, defaultPreloadMode);
|
|
48
|
+
const response = await builtRuntime.render(request, {
|
|
44
49
|
instrumentation: options.instrumentation,
|
|
45
50
|
logger: awsLambdaRenderLogger(options),
|
|
46
51
|
onResponse: options.onResponse,
|
|
47
52
|
...(preload === undefined ? {} : { preload }),
|
|
48
53
|
prerenderStore: options.prerenderStore,
|
|
49
|
-
request,
|
|
50
54
|
routeCache: options.routeCache,
|
|
51
|
-
runtimeDir,
|
|
52
55
|
serverActions: options.serverActions,
|
|
53
56
|
...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),
|
|
54
57
|
});
|
|
@@ -189,17 +192,7 @@ async function readGeneratedAwsLambdaImportPolicyInner(outDir) {
|
|
|
189
192
|
};
|
|
190
193
|
}
|
|
191
194
|
function normalizeAwsLambdaPreload(strategy, defaultMode = "all") {
|
|
192
|
-
|
|
193
|
-
return { mode: defaultMode, wait: "background" };
|
|
194
|
-
}
|
|
195
|
-
if (typeof strategy === "string") {
|
|
196
|
-
return { mode: strategy, wait: "background" };
|
|
197
|
-
}
|
|
198
|
-
return {
|
|
199
|
-
mode: strategy.mode,
|
|
200
|
-
...(strategy.routes === undefined ? {} : { routes: strategy.routes }),
|
|
201
|
-
wait: strategy.wait ?? "background",
|
|
202
|
-
};
|
|
195
|
+
return normalizeBuiltAppRuntimePreloadStrategy(strategy, defaultMode);
|
|
203
196
|
}
|
|
204
197
|
function createAwsLambdaStreamingRequestHandlerFromRuntime(options, runtime, runtimeDirPromise, runtimePreloadPromise, defaultPreloadMode = "all") {
|
|
205
198
|
return runtime.streamifyResponse(async (event, responseStream, _context) => {
|
|
@@ -220,18 +213,20 @@ function createAwsLambdaStreamingRequestHandlerFromRuntime(options, runtime, run
|
|
|
220
213
|
await waitForAwsLambdaRuntimePreload(options, runtimePreloadPromise, phases, defaultPreloadMode);
|
|
221
214
|
const importPolicy = await resolveAwsLambdaImportPolicy(options);
|
|
222
215
|
const renderStartedAt = phaseStartedAt(phases);
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
outDir: options.outDir,
|
|
216
|
+
const builtRuntime = await createBuiltRequestRuntime({
|
|
217
|
+
immutableRuntime: true,
|
|
226
218
|
importPolicy,
|
|
219
|
+
outDir: options.outDir,
|
|
220
|
+
runtimeDir,
|
|
221
|
+
});
|
|
222
|
+
const preload = awsLambdaRenderPreload(options, runtimePreloadPromise, defaultPreloadMode);
|
|
223
|
+
const response = await builtRuntime.render(request, {
|
|
227
224
|
instrumentation: options.instrumentation,
|
|
228
225
|
logger: awsLambdaRenderLogger(options),
|
|
229
226
|
onResponse: options.onResponse,
|
|
230
227
|
...(preload === undefined ? {} : { preload }),
|
|
231
228
|
prerenderStore: options.prerenderStore,
|
|
232
|
-
request,
|
|
233
229
|
routeCache: options.routeCache,
|
|
234
|
-
runtimeDir,
|
|
235
230
|
serverActions: options.serverActions,
|
|
236
231
|
...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),
|
|
237
232
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aws-lambda.js","sourceRoot":"","sources":["../../src/adapters/aws-lambda.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nimport { access, lstat, mkdir, readFile, readlink, symlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { AppRouterServerActionOptions } from \"../actions.js\";\nimport type { AppRouterCache } from \"../cache.js\";\nimport type { AppRouterImportPolicy } from \"../import-policy.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n requestLogFields,\n type AppRouterLogger,\n type RouterRequestLogFields,\n} from \"../logger.js\";\nimport type { AppRouterResponseHook } from \"../render.js\";\nimport type { RouterInstrumentation } from \"../trace.js\";\n\nexport type { RouterInstrumentation } from \"../trace.js\";\nexport type { AppRouterImportPolicy } from \"../import-policy.js\";\nimport {\n preloadBuiltAppRuntime,\n renderBuiltAppRequest,\n resolveRequestHost,\n warnIfImplicitHostTrust,\n type BuiltAppRuntimePreloadStrategy,\n type AppRouterPrerenderStore,\n type RequestHostPolicy,\n type ResponseSinkStrategy,\n} from \"../serve.js\";\n\nexport interface AwsLambdaHttpEventV2 {\n body?: string | undefined;\n cookies?: string[] | undefined;\n headers?: Record<string, string | undefined> | undefined;\n isBase64Encoded?: boolean | undefined;\n rawPath?: string | undefined;\n rawQueryString?: string | undefined;\n requestContext?: {\n http?: {\n method?: string | undefined;\n protocol?: string | undefined;\n } | undefined;\n } | undefined;\n version?: \"2.0\" | string | undefined;\n}\n\nexport interface AwsLambdaHttpResultV2 {\n body: string;\n cookies?: string[] | undefined;\n headers?: Record<string, string> | undefined;\n isBase64Encoded: boolean;\n statusCode: number;\n}\n\nexport interface AwsLambdaStreamingResponseMetadata {\n cookies?: string[] | undefined;\n headers: Record<string, string>;\n statusCode: number;\n}\n\nexport interface AwsLambdaStreamingResponseStream {\n destroy?: ((error?: unknown) => void) | undefined;\n end(): void;\n once?: ((event: \"drain\", listener: () => void) => unknown) | undefined;\n write(chunk: string | Uint8Array): boolean;\n}\n\nexport interface AwsLambdaRequestHandlerOptions {\n allowedHosts?: readonly string[] | undefined;\n errorHandler?:\n | ((error: unknown) => {\n body: string;\n headers?: Record<string, string>;\n status: number;\n })\n | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n hostname?: string | undefined;\n importPolicy?: AwsLambdaImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n outDir: string;\n preload?: AwsLambdaPreloadStrategy | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n routeCache?: AppRouterCache | undefined;\n runtimeDir?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy | undefined;\n timings?: boolean | undefined;\n trustForwardedProto?: boolean | undefined;\n}\n\nexport type AwsLambdaImportPolicy =\n | AppRouterImportPolicy\n | \"generated\"\n | { fromManifest: true };\n\nexport type AwsLambdaPreloadStrategy =\n | \"all\"\n | \"hot-route-requests\"\n | \"middleware\"\n | \"none\"\n | {\n mode: \"all\" | \"hot-route-requests\" | \"hot-routes\" | \"middleware\" | \"none\";\n routes?: readonly string[] | undefined;\n wait?: \"background\" | \"before-render\" | \"first-request\" | undefined;\n };\n\ntype NormalizedAwsLambdaPreloadStrategy = BuiltAppRuntimePreloadStrategy & {\n wait: \"background\" | \"before-render\" | \"first-request\";\n};\n\ntype AwsLambdaDefaultPreloadMode = \"all\" | \"middleware\";\n\nexport type AwsLambdaRequestHandler = (\n event: AwsLambdaHttpEventV2,\n) => Promise<AwsLambdaHttpResultV2>;\n\nexport type AwsLambdaStreamingRequestHandler<TContext = unknown> = (\n event: AwsLambdaHttpEventV2,\n responseStream: AwsLambdaStreamingResponseStream,\n context: TContext,\n) => Promise<void>;\n\nexport function createAwsLambdaRequestHandler(\n options: AwsLambdaRequestHandlerOptions,\n): AwsLambdaRequestHandler {\n warnIfImplicitHostTrust(options);\n const runtimeDirPromise = prepareAwsLambdaRuntimeDir(options);\n const runtimePreloadPromise = startAwsLambdaRuntimePreload(\n options,\n runtimeDirPromise,\n \"middleware\",\n );\n void runtimePreloadPromise?.catch(() => {});\n\n return createAwsLambdaRequestHandlerFromRuntime(\n options,\n runtimeDirPromise,\n runtimePreloadPromise,\n \"middleware\",\n );\n}\n\nexport async function createPreloadedAwsLambdaRequestHandler(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AwsLambdaRequestHandler> {\n warnIfImplicitHostTrust(options);\n const runtimeDir = await prepareAwsLambdaRuntimeDir(options);\n await preloadAwsLambdaRuntime(options, runtimeDir);\n\n return createAwsLambdaRequestHandlerFromRuntime(options, Promise.resolve(runtimeDir));\n}\n\nfunction createAwsLambdaRequestHandlerFromRuntime(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDirPromise: Promise<string>,\n runtimePreloadPromise?: Promise<void> | undefined,\n defaultPreloadMode: AwsLambdaDefaultPreloadMode = \"all\",\n): AwsLambdaRequestHandler {\n return async (event) => {\n const startedAt = logNow();\n const phases = createAwsLambdaTimingPhases(options);\n const eventToRequestStartedAt = phaseStartedAt(phases);\n const request = eventToRequest(event, options);\n finishPhase(phases, eventToRequestStartedAt, \"eventToRequestMs\");\n const logFields = requestLogFields(request, \"aws-lambda\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n\n try {\n const runtimeDirStartedAt = phaseStartedAt(phases);\n const runtimeDir = await runtimeDirPromise;\n finishPhase(phases, runtimeDirStartedAt, \"runtimeDirMs\");\n await waitForAwsLambdaRuntimePreload(\n options,\n runtimePreloadPromise,\n phases,\n defaultPreloadMode,\n );\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n const renderStartedAt = phaseStartedAt(phases);\n const preload = awsLambdaRenderPreload(\n options,\n runtimePreloadPromise,\n defaultPreloadMode,\n );\n const response = await renderBuiltAppRequest({\n outDir: options.outDir,\n importPolicy,\n instrumentation: options.instrumentation,\n logger: awsLambdaRenderLogger(options),\n onResponse: options.onResponse,\n ...(preload === undefined ? {} : { preload }),\n prerenderStore: options.prerenderStore,\n request,\n routeCache: options.routeCache,\n runtimeDir,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n });\n finishPhase(phases, renderStartedAt, \"renderMs\");\n const responseSerializationStartedAt = phaseStartedAt(phases);\n const result = await responseToLambdaResult(response, phases);\n finishPhase(phases, responseSerializationStartedAt, \"responseSerializationMs\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: result.statusCode,\n type: \"router:request:end\",\n });\n emitAwsLambdaTiming(options, logFields, result.statusCode, startedAt, phases);\n\n return result;\n } catch (error) {\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n\n return {\n body: payload.body,\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n ...payload.headers,\n },\n isBase64Encoded: false,\n statusCode: payload.status,\n };\n }\n };\n}\n\nexport function createAwsLambdaStreamingRequestHandler<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n): AwsLambdaStreamingRequestHandler<TContext> {\n warnIfImplicitHostTrust(options);\n const runtime = awsLambdaRuntime();\n const runtimeDirPromise = prepareAwsLambdaRuntimeDir(options);\n const runtimePreloadPromise = startAwsLambdaRuntimePreload(\n options,\n runtimeDirPromise,\n \"middleware\",\n );\n void runtimePreloadPromise?.catch(() => {});\n\n return createAwsLambdaStreamingRequestHandlerFromRuntime(\n options,\n runtime,\n runtimeDirPromise,\n runtimePreloadPromise,\n \"middleware\",\n );\n}\n\nexport async function createPreloadedAwsLambdaStreamingRequestHandler<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AwsLambdaStreamingRequestHandler<TContext>> {\n warnIfImplicitHostTrust(options);\n const runtime = awsLambdaRuntime();\n const runtimeDir = await prepareAwsLambdaRuntimeDir(options);\n await preloadAwsLambdaRuntime(options, runtimeDir);\n\n return createAwsLambdaStreamingRequestHandlerFromRuntime<TContext>(\n options,\n runtime,\n Promise.resolve(runtimeDir),\n );\n}\n\nfunction startAwsLambdaRuntimePreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDirPromise: Promise<string>,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): Promise<void> | undefined {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.mode === \"none\") {\n return undefined;\n }\n\n return runtimeDirPromise.then((runtimeDir) =>\n preloadAwsLambdaRuntime(options, runtimeDir, defaultMode),\n );\n}\n\nasync function preloadAwsLambdaRuntime(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDir: string,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): Promise<void> {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.mode === \"none\") {\n return;\n }\n\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n await preloadBuiltAppRuntime({\n importPolicy,\n outDir: options.outDir,\n preload,\n runtimeDir,\n });\n}\n\nasync function waitForAwsLambdaRuntimePreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimePreloadPromise: Promise<void> | undefined,\n phases: Record<string, number> | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode,\n): Promise<void> {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.wait !== \"first-request\" || runtimePreloadPromise === undefined) {\n return;\n }\n\n const preloadWaitStartedAt = phaseStartedAt(phases);\n try {\n await runtimePreloadPromise;\n } finally {\n finishPhase(phases, preloadWaitStartedAt, \"preloadWaitMs\");\n }\n}\n\nfunction awsLambdaRenderPreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimePreloadPromise: Promise<void> | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode,\n): { promise: Promise<void>; wait: \"before-render\" } | undefined {\n if (\n runtimePreloadPromise === undefined ||\n normalizeAwsLambdaPreload(options.preload, defaultMode).wait !== \"before-render\"\n ) {\n return undefined;\n }\n\n return {\n promise: runtimePreloadPromise,\n wait: \"before-render\",\n };\n}\n\nconst generatedImportPolicyCache = new Map<string, Promise<AppRouterImportPolicy>>();\n\nasync function resolveAwsLambdaImportPolicy(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AppRouterImportPolicy | undefined> {\n const policy = options.importPolicy;\n\n if (policy === undefined) {\n return undefined;\n }\n\n if (policy === \"generated\") {\n return await readGeneratedAwsLambdaImportPolicy(options.outDir);\n }\n\n if (isGeneratedAwsLambdaImportPolicyReference(policy) && policy.fromManifest === true) {\n return await readGeneratedAwsLambdaImportPolicy(options.outDir);\n }\n\n const configuredPolicy = policy as AppRouterImportPolicy;\n return {\n ...(configuredPolicy.allowedPackages === undefined\n ? {}\n : { allowedPackages: configuredPolicy.allowedPackages }),\n ...(configuredPolicy.allowedSourceDirs === undefined\n ? {}\n : { allowedSourceDirs: configuredPolicy.allowedSourceDirs }),\n ...(configuredPolicy.projectRoot === undefined\n ? {}\n : { projectRoot: configuredPolicy.projectRoot }),\n };\n}\n\nfunction isGeneratedAwsLambdaImportPolicyReference(\n policy: AwsLambdaImportPolicy,\n): policy is { fromManifest: true } {\n return typeof policy === \"object\" && policy !== null && \"fromManifest\" in policy;\n}\n\nasync function readGeneratedAwsLambdaImportPolicy(outDir: string): Promise<AppRouterImportPolicy> {\n const cached = generatedImportPolicyCache.get(outDir);\n if (cached !== undefined) {\n return await cached;\n }\n\n const promise = readGeneratedAwsLambdaImportPolicyInner(outDir);\n generatedImportPolicyCache.set(outDir, promise);\n\n return await promise;\n}\n\nasync function readGeneratedAwsLambdaImportPolicyInner(outDir: string): Promise<AppRouterImportPolicy> {\n const policy = JSON.parse(await readFile(join(outDir, \"server\", \"import-policy.json\"), \"utf8\")) as {\n runtimePackages?: readonly string[] | undefined;\n };\n\n return {\n allowedPackages: policy.runtimePackages ?? [],\n };\n}\n\nfunction normalizeAwsLambdaPreload(\n strategy: AwsLambdaPreloadStrategy | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): NormalizedAwsLambdaPreloadStrategy {\n if (strategy === undefined) {\n return { mode: defaultMode, wait: \"background\" };\n }\n\n if (typeof strategy === \"string\") {\n return { mode: strategy, wait: \"background\" };\n }\n\n return {\n mode: strategy.mode,\n ...(strategy.routes === undefined ? {} : { routes: strategy.routes }),\n wait: strategy.wait ?? \"background\",\n };\n}\n\nfunction createAwsLambdaStreamingRequestHandlerFromRuntime<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n runtime: AwsLambdaRuntime,\n runtimeDirPromise: Promise<string>,\n runtimePreloadPromise?: Promise<void> | undefined,\n defaultPreloadMode: AwsLambdaDefaultPreloadMode = \"all\",\n): AwsLambdaStreamingRequestHandler<TContext> {\n return runtime.streamifyResponse(async (event, responseStream, _context) => {\n const startedAt = logNow();\n const phases = createAwsLambdaTimingPhases(options);\n const eventToRequestStartedAt = phaseStartedAt(phases);\n const request = eventToRequest(event, options);\n finishPhase(phases, eventToRequestStartedAt, \"eventToRequestMs\");\n const logFields = requestLogFields(request, \"aws-lambda\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n\n try {\n const runtimeDirStartedAt = phaseStartedAt(phases);\n const runtimeDir = await runtimeDirPromise;\n finishPhase(phases, runtimeDirStartedAt, \"runtimeDirMs\");\n await waitForAwsLambdaRuntimePreload(\n options,\n runtimePreloadPromise,\n phases,\n defaultPreloadMode,\n );\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n const renderStartedAt = phaseStartedAt(phases);\n const preload = awsLambdaRenderPreload(\n options,\n runtimePreloadPromise,\n defaultPreloadMode,\n );\n const response = await renderBuiltAppRequest({\n outDir: options.outDir,\n importPolicy,\n instrumentation: options.instrumentation,\n logger: awsLambdaRenderLogger(options),\n onResponse: options.onResponse,\n ...(preload === undefined ? {} : { preload }),\n prerenderStore: options.prerenderStore,\n request,\n routeCache: options.routeCache,\n runtimeDir,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n });\n finishPhase(phases, renderStartedAt, \"renderMs\");\n const responseStreamingStartedAt = phaseStartedAt(phases);\n await streamResponseToLambda(response, responseStream, runtime, phases);\n finishPhase(phases, responseStreamingStartedAt, \"responseStreamingMs\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n emitAwsLambdaTiming(options, logFields, response.status, startedAt, phases);\n } catch (error) {\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n const response = new Response(payload.body, {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n ...payload.headers,\n },\n status: payload.status,\n });\n\n await streamResponseToLambda(response, responseStream, runtime, phases);\n }\n });\n}\n\nasync function prepareAwsLambdaRuntimeDir(options: {\n outDir: string;\n runtimeDir?: string | undefined;\n}): Promise<string> {\n const runtimeDir = options.runtimeDir ?? defaultAwsLambdaRuntimeDir(options.outDir);\n\n await mkdir(runtimeDir, { recursive: true });\n await linkAwsLambdaNodeModules({\n outDir: options.outDir,\n runtimeDir,\n });\n\n return runtimeDir;\n}\n\nasync function linkAwsLambdaNodeModules(options: {\n outDir: string;\n runtimeDir: string;\n}): Promise<void> {\n const source = join(dirname(options.outDir), \"node_modules\");\n const target = join(options.runtimeDir, \"node_modules\");\n\n try {\n await access(source);\n } catch {\n return;\n }\n\n try {\n const stats = await lstat(target);\n\n if (!stats.isSymbolicLink()) {\n return;\n }\n\n if ((await readlink(target)) === source) {\n return;\n }\n\n return;\n } catch {\n // Missing target: create it below.\n }\n\n try {\n await symlink(source, target, \"dir\");\n } catch (error) {\n if (!isNodeErrorCode(error, \"EEXIST\")) {\n throw error;\n }\n }\n}\n\nfunction defaultAwsLambdaRuntimeDir(outDir: string): string {\n return join(tmpdir(), \"mreact-router\", hashText(outDir), \"runtime\");\n}\n\nfunction hashText(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 16);\n}\n\nfunction isNodeErrorCode(error: unknown, code: string): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === code\n );\n}\n\nfunction eventToRequest(\n event: AwsLambdaHttpEventV2,\n options: AwsLambdaRequestHandlerOptions,\n): Request {\n const headers = eventHeaders(event);\n const rawHost = lambdaRequestHost(headers, options);\n const host = resolveRequestHost({\n allowedHosts: options.allowedHosts,\n fallbackHost: options.hostname ?? \"lambda.local\",\n hostPolicy: lambdaHostPolicy(options),\n rawHost: rawHost ?? undefined,\n });\n const protocol = lambdaRequestProtocol(event, headers, options);\n const rawPath = event.rawPath === undefined || event.rawPath === \"\" ? \"/\" : event.rawPath;\n const rawQueryString =\n event.rawQueryString === undefined || event.rawQueryString === \"\"\n ? \"\"\n : `?${event.rawQueryString}`;\n const method = event.requestContext?.http?.method ?? \"GET\";\n const init: RequestInit = {\n headers,\n method,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && event.body !== undefined) {\n init.body =\n event.isBase64Encoded === true ? Buffer.from(event.body, \"base64\") : event.body;\n }\n\n return new Request(`${protocol}://${host}${rawPath}${rawQueryString}`, init);\n}\n\nfunction lambdaRequestHost(\n headers: Headers,\n options: AwsLambdaRequestHandlerOptions,\n): string | null {\n if (options.hostPolicy === \"trusted-proxy\") {\n return firstForwardedValue(headers.get(\"x-forwarded-host\")) ?? headers.get(\"host\");\n }\n\n return headers.get(\"host\");\n}\n\nfunction lambdaHostPolicy(\n options: AwsLambdaRequestHandlerOptions,\n): RequestHostPolicy | undefined {\n return options.hostPolicy ?? (process.env.NODE_ENV === \"production\" ? \"strict\" : undefined);\n}\n\nfunction lambdaRequestProtocol(\n event: AwsLambdaHttpEventV2,\n headers: Headers,\n options: AwsLambdaRequestHandlerOptions,\n): \"http\" | \"https\" {\n if (options.trustForwardedProto === true) {\n return normalizeRequestProtocol(firstForwardedValue(headers.get(\"x-forwarded-proto\")));\n }\n\n return normalizeRequestProtocol(event.requestContext?.http?.protocol);\n}\n\nfunction normalizeRequestProtocol(value: string | undefined): \"http\" | \"https\" {\n if (value === undefined || value === \"\") {\n return \"https\";\n }\n\n const normalized = value.toLowerCase();\n return normalized === \"http\" || normalized.startsWith(\"http/\") ? \"http\" : \"https\";\n}\n\nfunction eventHeaders(event: AwsLambdaHttpEventV2): Headers {\n const headers = new Headers();\n\n for (const [name, value] of Object.entries(event.headers ?? {})) {\n if (value !== undefined) {\n headers.set(name, value);\n }\n }\n\n if (event.cookies !== undefined && event.cookies.length > 0 && !headers.has(\"cookie\")) {\n headers.set(\"cookie\", event.cookies.join(\"; \"));\n }\n\n return headers;\n}\n\nasync function responseToLambdaResult(\n response: Response,\n phases?: Record<string, number> | undefined,\n): Promise<AwsLambdaHttpResultV2> {\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n if (key !== \"set-cookie\") {\n headers[key] = value;\n }\n });\n\n const cookies = responseCookies(response.headers);\n\n if (response.body === null) {\n return {\n body: \"\",\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n isBase64Encoded: false,\n statusCode: response.status,\n };\n }\n\n const streamDrainStartedAt = phaseStartedAt(phases);\n const bytes = await drainBufferedResponseBody(response.body, phases);\n addPhaseDuration(phases, streamDrainStartedAt, \"streamDrainMs\");\n\n const bodyEncodeStartedAt = phaseStartedAt(phases);\n const contentType = response.headers.get(\"content-type\");\n const text = isTextContentType(contentType);\n const result = {\n body: text ? bytes.toString(\"utf8\") : bytes.toString(\"base64\"),\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n isBase64Encoded: !text,\n statusCode: response.status,\n };\n addPhaseDuration(phases, bodyEncodeStartedAt, \"bodyEncodeMs\");\n\n return result;\n}\n\nasync function drainBufferedResponseBody(\n body: ReadableStream<Uint8Array>,\n phases?: Record<string, number> | undefined,\n): Promise<Buffer> {\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let byteLength = 0;\n\n while (true) {\n const readStartedAt = phaseStartedAt(phases);\n const result = await reader.read();\n addPhaseDuration(phases, readStartedAt, \"streamReadMs\");\n\n if (result.done) {\n break;\n }\n\n chunks.push(result.value);\n byteLength += result.value.byteLength;\n }\n\n const concatStartedAt = phaseStartedAt(phases);\n const bytes = concatUint8ArrayChunks(chunks, byteLength);\n addPhaseDuration(phases, concatStartedAt, \"streamConcatMs\");\n\n return bytes;\n}\n\nfunction concatUint8ArrayChunks(chunks: readonly Uint8Array[], byteLength: number): Buffer {\n if (chunks.length === 0 || byteLength === 0) {\n return Buffer.alloc(0);\n }\n\n if (chunks.length === 1) {\n const [chunk] = chunks;\n if (chunk === undefined) {\n return Buffer.alloc(0);\n }\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n const bytes = Buffer.allocUnsafe(byteLength);\n let offset = 0;\n\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return bytes;\n}\n\nfunction createAwsLambdaTimingPhases(\n options: AwsLambdaRequestHandlerOptions,\n): Record<string, number> | undefined {\n return options.timings === true ? {} : undefined;\n}\n\nfunction awsLambdaRenderLogger(\n options: AwsLambdaRequestHandlerOptions,\n): AppRouterLogger | undefined {\n return options.timings === true ? options.logger : undefined;\n}\n\nfunction phaseStartedAt(phases: Record<string, number> | undefined): number | undefined {\n return phases === undefined ? undefined : logNow();\n}\n\nfunction finishPhase(\n phases: Record<string, number> | undefined,\n startedAt: number | undefined,\n name: string,\n): void {\n if (phases !== undefined && startedAt !== undefined) {\n phases[name] = logDurationMs(startedAt);\n }\n}\n\nfunction addPhaseDuration(\n phases: Record<string, number> | undefined,\n startedAt: number | undefined,\n name: string,\n): void {\n if (phases !== undefined && startedAt !== undefined) {\n phases[name] = (phases[name] ?? 0) + logDurationMs(startedAt);\n }\n}\n\nfunction emitAwsLambdaTiming(\n options: AwsLambdaRequestHandlerOptions,\n logFields: RouterRequestLogFields,\n status: number,\n startedAt: number,\n phases: Record<string, number> | undefined,\n): void {\n if (phases === undefined) {\n return;\n }\n\n emitRouterLog(options.logger, \"debug\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n phases,\n status,\n type: \"router:request:timing\",\n });\n}\n\nasync function streamResponseToLambda(\n response: Response,\n responseStream: AwsLambdaStreamingResponseStream,\n runtime: AwsLambdaRuntime,\n phases?: Record<string, number> | undefined,\n): Promise<void> {\n const stream = runtime.HttpResponseStream.from(\n responseStream,\n responseStreamingMetadata(response),\n );\n\n try {\n if (response.body === null) {\n stream.end();\n return;\n }\n\n const reader = response.body.getReader();\n\n while (true) {\n const streamWaitStartedAt = phaseStartedAt(phases);\n const result = await reader.read();\n addPhaseDuration(phases, streamWaitStartedAt, \"streamWaitMs\");\n\n if (result.done) {\n break;\n }\n\n const streamWriteStartedAt = phaseStartedAt(phases);\n await writeStreamingChunk(stream, result.value);\n addPhaseDuration(phases, streamWriteStartedAt, \"streamWriteMs\");\n }\n\n stream.end();\n } catch (error) {\n if (typeof stream.destroy === \"function\") {\n stream.destroy(error);\n return;\n }\n\n throw error;\n }\n}\n\nfunction responseStreamingMetadata(\n response: Response,\n): AwsLambdaStreamingResponseMetadata {\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n if (key !== \"set-cookie\") {\n headers[key] = value;\n }\n });\n\n const cookies = responseCookies(response.headers);\n\n return {\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n statusCode: response.status,\n };\n}\n\nasync function writeStreamingChunk(\n stream: AwsLambdaStreamingResponseStream,\n chunk: Uint8Array,\n): Promise<void> {\n if (stream.write(chunk) !== false) {\n return;\n }\n\n if (typeof stream.once !== \"function\") {\n return;\n }\n\n await new Promise<void>((resolve) => {\n stream.once?.(\"drain\", resolve);\n });\n}\n\ninterface AwsLambdaRuntime {\n HttpResponseStream: {\n from(\n responseStream: AwsLambdaStreamingResponseStream,\n metadata: AwsLambdaStreamingResponseMetadata,\n ): AwsLambdaStreamingResponseStream;\n };\n streamifyResponse<TContext>(\n handler: AwsLambdaStreamingRequestHandler<TContext>,\n ): AwsLambdaStreamingRequestHandler<TContext>;\n}\n\nfunction awsLambdaRuntime(): AwsLambdaRuntime {\n const runtime = (globalThis as { awslambda?: Partial<AwsLambdaRuntime> | undefined })\n .awslambda;\n\n if (\n typeof runtime?.streamifyResponse !== \"function\" ||\n typeof runtime.HttpResponseStream?.from !== \"function\"\n ) {\n throw new Error(\n \"AWS Lambda response streaming requires the Node.js Lambda runtime awslambda.streamifyResponse() and awslambda.HttpResponseStream.from().\",\n );\n }\n\n return runtime as AwsLambdaRuntime;\n}\n\nfunction firstForwardedValue(value: string | null): string | undefined {\n const first = value?.split(\",\")[0]?.trim();\n return first === undefined || first === \"\" ? undefined : first;\n}\n\nfunction responseCookies(headers: Headers): string[] {\n const maybeHeaders = headers as Headers & { getSetCookie?: () => string[] };\n if (typeof maybeHeaders.getSetCookie === \"function\") {\n return maybeHeaders.getSetCookie();\n }\n\n const raw = headers.get(\"set-cookie\");\n return raw === null ? [] : splitSetCookieHeader(raw);\n}\n\nfunction splitSetCookieHeader(header: string): string[] {\n const cookies: string[] = [];\n let start = 0;\n let inExpires = false;\n\n for (let index = 0; index < header.length; index += 1) {\n const remaining = header.slice(index).toLowerCase();\n if (remaining.startsWith(\"expires=\")) {\n inExpires = true;\n index += \"expires=\".length - 1;\n continue;\n }\n\n const char = header[index];\n if (char === \";\") {\n inExpires = false;\n continue;\n }\n\n if (char === \",\" && !inExpires) {\n cookies.push(header.slice(start, index).trim());\n start = index + 1;\n }\n }\n\n cookies.push(header.slice(start).trim());\n return cookies.filter((cookie) => cookie.length > 0);\n}\n\nfunction isTextContentType(contentType: string | null): boolean {\n if (contentType === null) {\n return true;\n }\n\n const type = contentType.toLowerCase().split(\";\")[0]?.trim() ?? \"\";\n return (\n type.startsWith(\"text/\") ||\n type === \"application/json\" ||\n type === \"application/javascript\" ||\n type === \"application/x-javascript\" ||\n type === \"application/xml\" ||\n type === \"application/x-www-form-urlencoded\" ||\n type.endsWith(\"+json\") ||\n type.endsWith(\"+xml\")\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"aws-lambda.js","sourceRoot":"","sources":["../../src/adapters/aws-lambda.ts"],"names":[],"mappings":"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","sourcesContent":["import { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nimport { access, lstat, mkdir, readFile, readlink, symlink } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport type { AppRouterServerActionOptions } from \"../actions.js\";\nimport type { AppRouterCache } from \"../cache.js\";\nimport type { AppRouterImportPolicy } from \"../import-policy.js\";\nimport {\n normalizeBuiltAppRuntimePreloadStrategy,\n type NormalizedBuiltAppRuntimePreloadStrategy,\n} from \"../preload-policy.js\";\nimport {\n emitRouterLog,\n logDurationMs,\n logError,\n logNow,\n requestLogFields,\n type AppRouterLogger,\n type RouterRequestLogFields,\n} from \"../logger.js\";\nimport type { AppRouterResponseHook } from \"../render.js\";\nimport type { RouterInstrumentation } from \"../trace.js\";\n\nexport type { RouterInstrumentation } from \"../trace.js\";\nexport type { AppRouterImportPolicy } from \"../import-policy.js\";\nimport {\n createBuiltRequestRuntime,\n preloadBuiltAppRuntime,\n resolveRequestHost,\n warnIfImplicitHostTrust,\n type AppRouterPrerenderStore,\n type RequestHostPolicy,\n type ResponseSinkStrategy,\n} from \"../serve.js\";\n\nexport interface AwsLambdaHttpEventV2 {\n body?: string | undefined;\n cookies?: string[] | undefined;\n headers?: Record<string, string | undefined> | undefined;\n isBase64Encoded?: boolean | undefined;\n rawPath?: string | undefined;\n rawQueryString?: string | undefined;\n requestContext?: {\n http?: {\n method?: string | undefined;\n protocol?: string | undefined;\n } | undefined;\n } | undefined;\n version?: \"2.0\" | string | undefined;\n}\n\nexport interface AwsLambdaHttpResultV2 {\n body: string;\n cookies?: string[] | undefined;\n headers?: Record<string, string> | undefined;\n isBase64Encoded: boolean;\n statusCode: number;\n}\n\nexport interface AwsLambdaStreamingResponseMetadata {\n cookies?: string[] | undefined;\n headers: Record<string, string>;\n statusCode: number;\n}\n\nexport interface AwsLambdaStreamingResponseStream {\n destroy?: ((error?: unknown) => void) | undefined;\n end(): void;\n once?: ((event: \"drain\", listener: () => void) => unknown) | undefined;\n write(chunk: string | Uint8Array): boolean;\n}\n\nexport interface AwsLambdaRequestHandlerOptions {\n allowedHosts?: readonly string[] | undefined;\n errorHandler?:\n | ((error: unknown) => {\n body: string;\n headers?: Record<string, string>;\n status: number;\n })\n | undefined;\n hostPolicy?: RequestHostPolicy | undefined;\n hostname?: string | undefined;\n importPolicy?: AwsLambdaImportPolicy | undefined;\n instrumentation?: RouterInstrumentation | undefined;\n logger?: AppRouterLogger | undefined;\n onResponse?: AppRouterResponseHook | undefined;\n outDir: string;\n preload?: AwsLambdaPreloadStrategy | undefined;\n prerenderStore?: AppRouterPrerenderStore | undefined;\n routeCache?: AppRouterCache | undefined;\n runtimeDir?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n sinkStrategy?: ResponseSinkStrategy | undefined;\n timings?: boolean | undefined;\n trustForwardedProto?: boolean | undefined;\n}\n\nexport type AwsLambdaImportPolicy =\n | AppRouterImportPolicy\n | \"generated\"\n | { fromManifest: true };\n\nexport type AwsLambdaPreloadStrategy =\n | \"all\"\n | \"hot-route-requests\"\n | \"middleware\"\n | \"none\"\n | {\n mode: \"all\" | \"hot-route-requests\" | \"hot-routes\" | \"middleware\" | \"none\";\n routes?: readonly string[] | undefined;\n wait?: \"background\" | \"before-render\" | \"first-request\" | undefined;\n };\n\ntype NormalizedAwsLambdaPreloadStrategy = NormalizedBuiltAppRuntimePreloadStrategy;\n\ntype AwsLambdaDefaultPreloadMode = \"all\" | \"middleware\";\n\nexport type AwsLambdaRequestHandler = (\n event: AwsLambdaHttpEventV2,\n) => Promise<AwsLambdaHttpResultV2>;\n\nexport type AwsLambdaStreamingRequestHandler<TContext = unknown> = (\n event: AwsLambdaHttpEventV2,\n responseStream: AwsLambdaStreamingResponseStream,\n context: TContext,\n) => Promise<void>;\n\nexport function createAwsLambdaRequestHandler(\n options: AwsLambdaRequestHandlerOptions,\n): AwsLambdaRequestHandler {\n warnIfImplicitHostTrust(options);\n const runtimeDirPromise = prepareAwsLambdaRuntimeDir(options);\n const runtimePreloadPromise = startAwsLambdaRuntimePreload(\n options,\n runtimeDirPromise,\n \"middleware\",\n );\n void runtimePreloadPromise?.catch(() => {});\n\n return createAwsLambdaRequestHandlerFromRuntime(\n options,\n runtimeDirPromise,\n runtimePreloadPromise,\n \"middleware\",\n );\n}\n\nexport async function createPreloadedAwsLambdaRequestHandler(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AwsLambdaRequestHandler> {\n warnIfImplicitHostTrust(options);\n const runtimeDir = await prepareAwsLambdaRuntimeDir(options);\n await preloadAwsLambdaRuntime(options, runtimeDir);\n\n return createAwsLambdaRequestHandlerFromRuntime(options, Promise.resolve(runtimeDir));\n}\n\nfunction createAwsLambdaRequestHandlerFromRuntime(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDirPromise: Promise<string>,\n runtimePreloadPromise?: Promise<void> | undefined,\n defaultPreloadMode: AwsLambdaDefaultPreloadMode = \"all\",\n): AwsLambdaRequestHandler {\n return async (event) => {\n const startedAt = logNow();\n const phases = createAwsLambdaTimingPhases(options);\n const eventToRequestStartedAt = phaseStartedAt(phases);\n const request = eventToRequest(event, options);\n finishPhase(phases, eventToRequestStartedAt, \"eventToRequestMs\");\n const logFields = requestLogFields(request, \"aws-lambda\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n\n try {\n const runtimeDirStartedAt = phaseStartedAt(phases);\n const runtimeDir = await runtimeDirPromise;\n finishPhase(phases, runtimeDirStartedAt, \"runtimeDirMs\");\n await waitForAwsLambdaRuntimePreload(\n options,\n runtimePreloadPromise,\n phases,\n defaultPreloadMode,\n );\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n const renderStartedAt = phaseStartedAt(phases);\n const builtRuntime = await createBuiltRequestRuntime({\n immutableRuntime: true,\n importPolicy,\n outDir: options.outDir,\n runtimeDir,\n });\n const preload = awsLambdaRenderPreload(\n options,\n runtimePreloadPromise,\n defaultPreloadMode,\n );\n const response = await builtRuntime.render(request, {\n instrumentation: options.instrumentation,\n logger: awsLambdaRenderLogger(options),\n onResponse: options.onResponse,\n ...(preload === undefined ? {} : { preload }),\n prerenderStore: options.prerenderStore,\n routeCache: options.routeCache,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n });\n finishPhase(phases, renderStartedAt, \"renderMs\");\n const responseSerializationStartedAt = phaseStartedAt(phases);\n const result = await responseToLambdaResult(response, phases);\n finishPhase(phases, responseSerializationStartedAt, \"responseSerializationMs\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: result.statusCode,\n type: \"router:request:end\",\n });\n emitAwsLambdaTiming(options, logFields, result.statusCode, startedAt, phases);\n\n return result;\n } catch (error) {\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n\n return {\n body: payload.body,\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n ...payload.headers,\n },\n isBase64Encoded: false,\n statusCode: payload.status,\n };\n }\n };\n}\n\nexport function createAwsLambdaStreamingRequestHandler<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n): AwsLambdaStreamingRequestHandler<TContext> {\n warnIfImplicitHostTrust(options);\n const runtime = awsLambdaRuntime();\n const runtimeDirPromise = prepareAwsLambdaRuntimeDir(options);\n const runtimePreloadPromise = startAwsLambdaRuntimePreload(\n options,\n runtimeDirPromise,\n \"middleware\",\n );\n void runtimePreloadPromise?.catch(() => {});\n\n return createAwsLambdaStreamingRequestHandlerFromRuntime(\n options,\n runtime,\n runtimeDirPromise,\n runtimePreloadPromise,\n \"middleware\",\n );\n}\n\nexport async function createPreloadedAwsLambdaStreamingRequestHandler<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AwsLambdaStreamingRequestHandler<TContext>> {\n warnIfImplicitHostTrust(options);\n const runtime = awsLambdaRuntime();\n const runtimeDir = await prepareAwsLambdaRuntimeDir(options);\n await preloadAwsLambdaRuntime(options, runtimeDir);\n\n return createAwsLambdaStreamingRequestHandlerFromRuntime<TContext>(\n options,\n runtime,\n Promise.resolve(runtimeDir),\n );\n}\n\nfunction startAwsLambdaRuntimePreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDirPromise: Promise<string>,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): Promise<void> | undefined {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.mode === \"none\") {\n return undefined;\n }\n\n return runtimeDirPromise.then((runtimeDir) =>\n preloadAwsLambdaRuntime(options, runtimeDir, defaultMode),\n );\n}\n\nasync function preloadAwsLambdaRuntime(\n options: AwsLambdaRequestHandlerOptions,\n runtimeDir: string,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): Promise<void> {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.mode === \"none\") {\n return;\n }\n\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n await preloadBuiltAppRuntime({\n importPolicy,\n outDir: options.outDir,\n preload,\n runtimeDir,\n });\n}\n\nasync function waitForAwsLambdaRuntimePreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimePreloadPromise: Promise<void> | undefined,\n phases: Record<string, number> | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode,\n): Promise<void> {\n const preload = normalizeAwsLambdaPreload(options.preload, defaultMode);\n if (preload.wait !== \"first-request\" || runtimePreloadPromise === undefined) {\n return;\n }\n\n const preloadWaitStartedAt = phaseStartedAt(phases);\n try {\n await runtimePreloadPromise;\n } finally {\n finishPhase(phases, preloadWaitStartedAt, \"preloadWaitMs\");\n }\n}\n\nfunction awsLambdaRenderPreload(\n options: AwsLambdaRequestHandlerOptions,\n runtimePreloadPromise: Promise<void> | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode,\n): { promise: Promise<void>; wait: \"before-render\" } | undefined {\n if (\n runtimePreloadPromise === undefined ||\n normalizeAwsLambdaPreload(options.preload, defaultMode).wait !== \"before-render\"\n ) {\n return undefined;\n }\n\n return {\n promise: runtimePreloadPromise,\n wait: \"before-render\",\n };\n}\n\nconst generatedImportPolicyCache = new Map<string, Promise<AppRouterImportPolicy>>();\n\nasync function resolveAwsLambdaImportPolicy(\n options: AwsLambdaRequestHandlerOptions,\n): Promise<AppRouterImportPolicy | undefined> {\n const policy = options.importPolicy;\n\n if (policy === undefined) {\n return undefined;\n }\n\n if (policy === \"generated\") {\n return await readGeneratedAwsLambdaImportPolicy(options.outDir);\n }\n\n if (isGeneratedAwsLambdaImportPolicyReference(policy) && policy.fromManifest === true) {\n return await readGeneratedAwsLambdaImportPolicy(options.outDir);\n }\n\n const configuredPolicy = policy as AppRouterImportPolicy;\n return {\n ...(configuredPolicy.allowedPackages === undefined\n ? {}\n : { allowedPackages: configuredPolicy.allowedPackages }),\n ...(configuredPolicy.allowedSourceDirs === undefined\n ? {}\n : { allowedSourceDirs: configuredPolicy.allowedSourceDirs }),\n ...(configuredPolicy.projectRoot === undefined\n ? {}\n : { projectRoot: configuredPolicy.projectRoot }),\n };\n}\n\nfunction isGeneratedAwsLambdaImportPolicyReference(\n policy: AwsLambdaImportPolicy,\n): policy is { fromManifest: true } {\n return typeof policy === \"object\" && policy !== null && \"fromManifest\" in policy;\n}\n\nasync function readGeneratedAwsLambdaImportPolicy(outDir: string): Promise<AppRouterImportPolicy> {\n const cached = generatedImportPolicyCache.get(outDir);\n if (cached !== undefined) {\n return await cached;\n }\n\n const promise = readGeneratedAwsLambdaImportPolicyInner(outDir);\n generatedImportPolicyCache.set(outDir, promise);\n\n return await promise;\n}\n\nasync function readGeneratedAwsLambdaImportPolicyInner(outDir: string): Promise<AppRouterImportPolicy> {\n const policy = JSON.parse(await readFile(join(outDir, \"server\", \"import-policy.json\"), \"utf8\")) as {\n runtimePackages?: readonly string[] | undefined;\n };\n\n return {\n allowedPackages: policy.runtimePackages ?? [],\n };\n}\n\nfunction normalizeAwsLambdaPreload(\n strategy: AwsLambdaPreloadStrategy | undefined,\n defaultMode: AwsLambdaDefaultPreloadMode = \"all\",\n): NormalizedAwsLambdaPreloadStrategy {\n return normalizeBuiltAppRuntimePreloadStrategy(strategy, defaultMode);\n}\n\nfunction createAwsLambdaStreamingRequestHandlerFromRuntime<TContext = unknown>(\n options: AwsLambdaRequestHandlerOptions,\n runtime: AwsLambdaRuntime,\n runtimeDirPromise: Promise<string>,\n runtimePreloadPromise?: Promise<void> | undefined,\n defaultPreloadMode: AwsLambdaDefaultPreloadMode = \"all\",\n): AwsLambdaStreamingRequestHandler<TContext> {\n return runtime.streamifyResponse(async (event, responseStream, _context) => {\n const startedAt = logNow();\n const phases = createAwsLambdaTimingPhases(options);\n const eventToRequestStartedAt = phaseStartedAt(phases);\n const request = eventToRequest(event, options);\n finishPhase(phases, eventToRequestStartedAt, \"eventToRequestMs\");\n const logFields = requestLogFields(request, \"aws-lambda\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n type: \"router:request:start\",\n });\n\n try {\n const runtimeDirStartedAt = phaseStartedAt(phases);\n const runtimeDir = await runtimeDirPromise;\n finishPhase(phases, runtimeDirStartedAt, \"runtimeDirMs\");\n await waitForAwsLambdaRuntimePreload(\n options,\n runtimePreloadPromise,\n phases,\n defaultPreloadMode,\n );\n const importPolicy = await resolveAwsLambdaImportPolicy(options);\n const renderStartedAt = phaseStartedAt(phases);\n const builtRuntime = await createBuiltRequestRuntime({\n immutableRuntime: true,\n importPolicy,\n outDir: options.outDir,\n runtimeDir,\n });\n const preload = awsLambdaRenderPreload(\n options,\n runtimePreloadPromise,\n defaultPreloadMode,\n );\n const response = await builtRuntime.render(request, {\n instrumentation: options.instrumentation,\n logger: awsLambdaRenderLogger(options),\n onResponse: options.onResponse,\n ...(preload === undefined ? {} : { preload }),\n prerenderStore: options.prerenderStore,\n routeCache: options.routeCache,\n serverActions: options.serverActions,\n ...(options.sinkStrategy === undefined ? {} : { sinkStrategy: options.sinkStrategy }),\n });\n finishPhase(phases, renderStartedAt, \"renderMs\");\n const responseStreamingStartedAt = phaseStartedAt(phases);\n await streamResponseToLambda(response, responseStream, runtime, phases);\n finishPhase(phases, responseStreamingStartedAt, \"responseStreamingMs\");\n emitRouterLog(options.logger, \"info\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n status: response.status,\n type: \"router:request:end\",\n });\n emitAwsLambdaTiming(options, logFields, response.status, startedAt, phases);\n } catch (error) {\n emitRouterLog(options.logger, \"error\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n error: logError(error),\n type: \"router:request:error\",\n });\n\n const payload = options.errorHandler\n ? options.errorHandler(error)\n : { body: \"Internal Server Error\", status: 500 };\n const response = new Response(payload.body, {\n headers: {\n \"content-type\": \"text/plain; charset=utf-8\",\n ...payload.headers,\n },\n status: payload.status,\n });\n\n await streamResponseToLambda(response, responseStream, runtime, phases);\n }\n });\n}\n\nasync function prepareAwsLambdaRuntimeDir(options: {\n outDir: string;\n runtimeDir?: string | undefined;\n}): Promise<string> {\n const runtimeDir = options.runtimeDir ?? defaultAwsLambdaRuntimeDir(options.outDir);\n\n await mkdir(runtimeDir, { recursive: true });\n await linkAwsLambdaNodeModules({\n outDir: options.outDir,\n runtimeDir,\n });\n\n return runtimeDir;\n}\n\nasync function linkAwsLambdaNodeModules(options: {\n outDir: string;\n runtimeDir: string;\n}): Promise<void> {\n const source = join(dirname(options.outDir), \"node_modules\");\n const target = join(options.runtimeDir, \"node_modules\");\n\n try {\n await access(source);\n } catch {\n return;\n }\n\n try {\n const stats = await lstat(target);\n\n if (!stats.isSymbolicLink()) {\n return;\n }\n\n if ((await readlink(target)) === source) {\n return;\n }\n\n return;\n } catch {\n // Missing target: create it below.\n }\n\n try {\n await symlink(source, target, \"dir\");\n } catch (error) {\n if (!isNodeErrorCode(error, \"EEXIST\")) {\n throw error;\n }\n }\n}\n\nfunction defaultAwsLambdaRuntimeDir(outDir: string): string {\n return join(tmpdir(), \"mreact-router\", hashText(outDir), \"runtime\");\n}\n\nfunction hashText(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 16);\n}\n\nfunction isNodeErrorCode(error: unknown, code: string): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as { code?: unknown }).code === code\n );\n}\n\nfunction eventToRequest(\n event: AwsLambdaHttpEventV2,\n options: AwsLambdaRequestHandlerOptions,\n): Request {\n const headers = eventHeaders(event);\n const rawHost = lambdaRequestHost(headers, options);\n const host = resolveRequestHost({\n allowedHosts: options.allowedHosts,\n fallbackHost: options.hostname ?? \"lambda.local\",\n hostPolicy: lambdaHostPolicy(options),\n rawHost: rawHost ?? undefined,\n });\n const protocol = lambdaRequestProtocol(event, headers, options);\n const rawPath = event.rawPath === undefined || event.rawPath === \"\" ? \"/\" : event.rawPath;\n const rawQueryString =\n event.rawQueryString === undefined || event.rawQueryString === \"\"\n ? \"\"\n : `?${event.rawQueryString}`;\n const method = event.requestContext?.http?.method ?? \"GET\";\n const init: RequestInit = {\n headers,\n method,\n };\n\n if (method !== \"GET\" && method !== \"HEAD\" && event.body !== undefined) {\n init.body =\n event.isBase64Encoded === true ? Buffer.from(event.body, \"base64\") : event.body;\n }\n\n return new Request(`${protocol}://${host}${rawPath}${rawQueryString}`, init);\n}\n\nfunction lambdaRequestHost(\n headers: Headers,\n options: AwsLambdaRequestHandlerOptions,\n): string | null {\n if (options.hostPolicy === \"trusted-proxy\") {\n return firstForwardedValue(headers.get(\"x-forwarded-host\")) ?? headers.get(\"host\");\n }\n\n return headers.get(\"host\");\n}\n\nfunction lambdaHostPolicy(\n options: AwsLambdaRequestHandlerOptions,\n): RequestHostPolicy | undefined {\n return options.hostPolicy ?? (process.env.NODE_ENV === \"production\" ? \"strict\" : undefined);\n}\n\nfunction lambdaRequestProtocol(\n event: AwsLambdaHttpEventV2,\n headers: Headers,\n options: AwsLambdaRequestHandlerOptions,\n): \"http\" | \"https\" {\n if (options.trustForwardedProto === true) {\n return normalizeRequestProtocol(firstForwardedValue(headers.get(\"x-forwarded-proto\")));\n }\n\n return normalizeRequestProtocol(event.requestContext?.http?.protocol);\n}\n\nfunction normalizeRequestProtocol(value: string | undefined): \"http\" | \"https\" {\n if (value === undefined || value === \"\") {\n return \"https\";\n }\n\n const normalized = value.toLowerCase();\n return normalized === \"http\" || normalized.startsWith(\"http/\") ? \"http\" : \"https\";\n}\n\nfunction eventHeaders(event: AwsLambdaHttpEventV2): Headers {\n const headers = new Headers();\n\n for (const [name, value] of Object.entries(event.headers ?? {})) {\n if (value !== undefined) {\n headers.set(name, value);\n }\n }\n\n if (event.cookies !== undefined && event.cookies.length > 0 && !headers.has(\"cookie\")) {\n headers.set(\"cookie\", event.cookies.join(\"; \"));\n }\n\n return headers;\n}\n\nasync function responseToLambdaResult(\n response: Response,\n phases?: Record<string, number> | undefined,\n): Promise<AwsLambdaHttpResultV2> {\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n if (key !== \"set-cookie\") {\n headers[key] = value;\n }\n });\n\n const cookies = responseCookies(response.headers);\n\n if (response.body === null) {\n return {\n body: \"\",\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n isBase64Encoded: false,\n statusCode: response.status,\n };\n }\n\n const streamDrainStartedAt = phaseStartedAt(phases);\n const bytes = await drainBufferedResponseBody(response.body, phases);\n addPhaseDuration(phases, streamDrainStartedAt, \"streamDrainMs\");\n\n const bodyEncodeStartedAt = phaseStartedAt(phases);\n const contentType = response.headers.get(\"content-type\");\n const text = isTextContentType(contentType);\n const result = {\n body: text ? bytes.toString(\"utf8\") : bytes.toString(\"base64\"),\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n isBase64Encoded: !text,\n statusCode: response.status,\n };\n addPhaseDuration(phases, bodyEncodeStartedAt, \"bodyEncodeMs\");\n\n return result;\n}\n\nasync function drainBufferedResponseBody(\n body: ReadableStream<Uint8Array>,\n phases?: Record<string, number> | undefined,\n): Promise<Buffer> {\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let byteLength = 0;\n\n while (true) {\n const readStartedAt = phaseStartedAt(phases);\n const result = await reader.read();\n addPhaseDuration(phases, readStartedAt, \"streamReadMs\");\n\n if (result.done) {\n break;\n }\n\n chunks.push(result.value);\n byteLength += result.value.byteLength;\n }\n\n const concatStartedAt = phaseStartedAt(phases);\n const bytes = concatUint8ArrayChunks(chunks, byteLength);\n addPhaseDuration(phases, concatStartedAt, \"streamConcatMs\");\n\n return bytes;\n}\n\nfunction concatUint8ArrayChunks(chunks: readonly Uint8Array[], byteLength: number): Buffer {\n if (chunks.length === 0 || byteLength === 0) {\n return Buffer.alloc(0);\n }\n\n if (chunks.length === 1) {\n const [chunk] = chunks;\n if (chunk === undefined) {\n return Buffer.alloc(0);\n }\n return Buffer.from(chunk.buffer, chunk.byteOffset, chunk.byteLength);\n }\n\n const bytes = Buffer.allocUnsafe(byteLength);\n let offset = 0;\n\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return bytes;\n}\n\nfunction createAwsLambdaTimingPhases(\n options: AwsLambdaRequestHandlerOptions,\n): Record<string, number> | undefined {\n return options.timings === true ? {} : undefined;\n}\n\nfunction awsLambdaRenderLogger(\n options: AwsLambdaRequestHandlerOptions,\n): AppRouterLogger | undefined {\n return options.timings === true ? options.logger : undefined;\n}\n\nfunction phaseStartedAt(phases: Record<string, number> | undefined): number | undefined {\n return phases === undefined ? undefined : logNow();\n}\n\nfunction finishPhase(\n phases: Record<string, number> | undefined,\n startedAt: number | undefined,\n name: string,\n): void {\n if (phases !== undefined && startedAt !== undefined) {\n phases[name] = logDurationMs(startedAt);\n }\n}\n\nfunction addPhaseDuration(\n phases: Record<string, number> | undefined,\n startedAt: number | undefined,\n name: string,\n): void {\n if (phases !== undefined && startedAt !== undefined) {\n phases[name] = (phases[name] ?? 0) + logDurationMs(startedAt);\n }\n}\n\nfunction emitAwsLambdaTiming(\n options: AwsLambdaRequestHandlerOptions,\n logFields: RouterRequestLogFields,\n status: number,\n startedAt: number,\n phases: Record<string, number> | undefined,\n): void {\n if (phases === undefined) {\n return;\n }\n\n emitRouterLog(options.logger, \"debug\", {\n ...logFields,\n durationMs: logDurationMs(startedAt),\n phases,\n status,\n type: \"router:request:timing\",\n });\n}\n\nasync function streamResponseToLambda(\n response: Response,\n responseStream: AwsLambdaStreamingResponseStream,\n runtime: AwsLambdaRuntime,\n phases?: Record<string, number> | undefined,\n): Promise<void> {\n const stream = runtime.HttpResponseStream.from(\n responseStream,\n responseStreamingMetadata(response),\n );\n\n try {\n if (response.body === null) {\n stream.end();\n return;\n }\n\n const reader = response.body.getReader();\n\n while (true) {\n const streamWaitStartedAt = phaseStartedAt(phases);\n const result = await reader.read();\n addPhaseDuration(phases, streamWaitStartedAt, \"streamWaitMs\");\n\n if (result.done) {\n break;\n }\n\n const streamWriteStartedAt = phaseStartedAt(phases);\n await writeStreamingChunk(stream, result.value);\n addPhaseDuration(phases, streamWriteStartedAt, \"streamWriteMs\");\n }\n\n stream.end();\n } catch (error) {\n if (typeof stream.destroy === \"function\") {\n stream.destroy(error);\n return;\n }\n\n throw error;\n }\n}\n\nfunction responseStreamingMetadata(\n response: Response,\n): AwsLambdaStreamingResponseMetadata {\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n if (key !== \"set-cookie\") {\n headers[key] = value;\n }\n });\n\n const cookies = responseCookies(response.headers);\n\n return {\n ...(cookies.length === 0 ? {} : { cookies }),\n headers,\n statusCode: response.status,\n };\n}\n\nasync function writeStreamingChunk(\n stream: AwsLambdaStreamingResponseStream,\n chunk: Uint8Array,\n): Promise<void> {\n if (stream.write(chunk) !== false) {\n return;\n }\n\n if (typeof stream.once !== \"function\") {\n return;\n }\n\n await new Promise<void>((resolve) => {\n stream.once?.(\"drain\", resolve);\n });\n}\n\ninterface AwsLambdaRuntime {\n HttpResponseStream: {\n from(\n responseStream: AwsLambdaStreamingResponseStream,\n metadata: AwsLambdaStreamingResponseMetadata,\n ): AwsLambdaStreamingResponseStream;\n };\n streamifyResponse<TContext>(\n handler: AwsLambdaStreamingRequestHandler<TContext>,\n ): AwsLambdaStreamingRequestHandler<TContext>;\n}\n\nfunction awsLambdaRuntime(): AwsLambdaRuntime {\n const runtime = (globalThis as { awslambda?: Partial<AwsLambdaRuntime> | undefined })\n .awslambda;\n\n if (\n typeof runtime?.streamifyResponse !== \"function\" ||\n typeof runtime.HttpResponseStream?.from !== \"function\"\n ) {\n throw new Error(\n \"AWS Lambda response streaming requires the Node.js Lambda runtime awslambda.streamifyResponse() and awslambda.HttpResponseStream.from().\",\n );\n }\n\n return runtime as AwsLambdaRuntime;\n}\n\nfunction firstForwardedValue(value: string | null): string | undefined {\n const first = value?.split(\",\")[0]?.trim();\n return first === undefined || first === \"\" ? undefined : first;\n}\n\nfunction responseCookies(headers: Headers): string[] {\n const maybeHeaders = headers as Headers & { getSetCookie?: () => string[] };\n if (typeof maybeHeaders.getSetCookie === \"function\") {\n return maybeHeaders.getSetCookie();\n }\n\n const raw = headers.get(\"set-cookie\");\n return raw === null ? [] : splitSetCookieHeader(raw);\n}\n\nfunction splitSetCookieHeader(header: string): string[] {\n const cookies: string[] = [];\n let start = 0;\n let inExpires = false;\n\n for (let index = 0; index < header.length; index += 1) {\n const remaining = header.slice(index).toLowerCase();\n if (remaining.startsWith(\"expires=\")) {\n inExpires = true;\n index += \"expires=\".length - 1;\n continue;\n }\n\n const char = header[index];\n if (char === \";\") {\n inExpires = false;\n continue;\n }\n\n if (char === \",\" && !inExpires) {\n cookies.push(header.slice(start, index).trim());\n start = index + 1;\n }\n }\n\n cookies.push(header.slice(start).trim());\n return cookies.filter((cookie) => cookie.length > 0);\n}\n\nfunction isTextContentType(contentType: string | null): boolean {\n if (contentType === null) {\n return true;\n }\n\n const type = contentType.toLowerCase().split(\";\")[0]?.trim() ?? \"\";\n return (\n type.startsWith(\"text/\") ||\n type === \"application/json\" ||\n type === \"application/javascript\" ||\n type === \"application/x-javascript\" ||\n type === \"application/xml\" ||\n type === \"application/x-www-form-urlencoded\" ||\n type.endsWith(\"+json\") ||\n type.endsWith(\"+xml\")\n );\n}\n"]}
|
package/dist/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/build.js
CHANGED
|
@@ -4,7 +4,8 @@ import { builtinModules } from "node:module";
|
|
|
4
4
|
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { collectStaticImportReferences, collectTopLevelValueExportNames, formatDiagnostic, hasModuleDirective, transform, } from "@reckona/mreact-compiler";
|
|
6
6
|
import { transformCompilerModuleContext } from "@reckona/mreact-compiler/internal";
|
|
7
|
-
import {
|
|
7
|
+
import { compilerModuleContextForSource, collectClientRouteReferences, createClientRouteInferenceCache, detectClientNavigationHint, detectNavigationRuntimeHint, formatClientRouteInferenceDiagnostic, inferClientRouteModule, } from "./client-route-inference.js";
|
|
8
|
+
import { buildClientRouteBatchOutput, buildNavigationRuntimeBundle, clientScriptForPath, routeIdForPath, } from "./navigation-runtime.js";
|
|
8
9
|
import { bundleAppRouterSourceModule, importAppRouterSourceModule } from "./module-runner.js";
|
|
9
10
|
import { scanAppRoutes } from "./routes.js";
|
|
10
11
|
import { appFileConventionForRootFilename, } from "./file-conventions.js";
|
|
@@ -2226,6 +2227,7 @@ const here = dirname(fileURLToPath(import.meta.url));
|
|
|
2226
2227
|
export const handler = await createPreloadedAwsLambdaRequestHandler({
|
|
2227
2228
|
importPolicy: "generated",
|
|
2228
2229
|
outDir: resolve(here, ${JSON.stringify(outDirRelativeToHandler)}),
|
|
2230
|
+
preload: { mode: "all" },
|
|
2229
2231
|
timings: process.env.MREACT_ROUTER_TIMINGS === "1",
|
|
2230
2232
|
});
|
|
2231
2233
|
`;
|