From 66dd0341a2a83e7560bca568e0c6a4a62e19df86 Mon Sep 17 00:00:00 2001 From: Taylor Steele Date: Sun, 22 Feb 2026 13:09:50 -0500 Subject: [PATCH] fix(aws-lambda): add preview command Export fetch from aws-lambda, aws-lambda-streaming presets Add streaming preview shim --- src/presets/aws-lambda/preset.ts | 17 +++++++++++++++++ .../aws-lambda/runtime/aws-lambda-streaming.ts | 4 ++++ src/presets/aws-lambda/runtime/aws-lambda.ts | 4 ++++ src/presets/aws-lambda/utils.ts | 11 +++++++++++ 4 files changed, 36 insertions(+) create mode 100644 src/presets/aws-lambda/utils.ts diff --git a/src/presets/aws-lambda/preset.ts b/src/presets/aws-lambda/preset.ts index 10fc5ec06e..c5f11ff143 100644 --- a/src/presets/aws-lambda/preset.ts +++ b/src/presets/aws-lambda/preset.ts @@ -1,10 +1,16 @@ +import { resolve } from "pathe"; import { defineNitroPreset } from "../_utils/preset.ts"; +import { writeFile } from "../_utils/fs.ts"; +import { awsLambdaPreviewShim } from "./utils.ts"; export type { AwsLambdaOptions as PresetOptions } from "./types.ts"; const awsLambda = defineNitroPreset( { entry: "./aws-lambda/runtime/aws-lambda", + commands: { + preview: "npx srvx --prod ./", + }, awsLambda: { streaming: false, }, @@ -12,7 +18,18 @@ const awsLambda = defineNitroPreset( "rollup:before": (nitro, rollupConfig) => { if (nitro.options.awsLambda?.streaming) { (rollupConfig.input as string) += "-streaming"; + nitro.options.commands.preview = + "npx srvx --prod --import ./server/aws-lambda-preview-shim.mjs ./"; + } + }, + async compiled(nitro) { + if (!nitro.options.awsLambda?.streaming) { + return; } + await writeFile( + resolve(nitro.options.output.serverDir, "aws-lambda-preview-shim.mjs"), + awsLambdaPreviewShim + ); }, }, }, diff --git a/src/presets/aws-lambda/runtime/aws-lambda-streaming.ts b/src/presets/aws-lambda/runtime/aws-lambda-streaming.ts index bfba0e93f4..9817da0e40 100644 --- a/src/presets/aws-lambda/runtime/aws-lambda-streaming.ts +++ b/src/presets/aws-lambda/runtime/aws-lambda-streaming.ts @@ -51,3 +51,7 @@ async function streamToNodeStream( } writer.end(); } + +export default { + fetch: nitroApp.fetch, +}; diff --git a/src/presets/aws-lambda/runtime/aws-lambda.ts b/src/presets/aws-lambda/runtime/aws-lambda.ts index cfe419c2ca..0dfe164dd2 100644 --- a/src/presets/aws-lambda/runtime/aws-lambda.ts +++ b/src/presets/aws-lambda/runtime/aws-lambda.ts @@ -26,3 +26,7 @@ export async function handler( ...(await awsResponseBody(response)), }; } + +export default { + fetch: nitroApp.fetch, +}; diff --git a/src/presets/aws-lambda/utils.ts b/src/presets/aws-lambda/utils.ts new file mode 100644 index 0000000000..0fed82876d --- /dev/null +++ b/src/presets/aws-lambda/utils.ts @@ -0,0 +1,11 @@ +export const awsLambdaPreviewShim = `globalThis.awslambda ??= { + streamifyResponse(handler) { + return handler; + }, + HttpResponseStream: { + from(stream) { + return stream; + }, + }, +}; +`;