diff --git a/examples/aws-lambda/lambda/graphql.ts b/examples/aws-lambda/lambda/graphql.ts index 51e06c9d7b..3944ca0db7 100644 --- a/examples/aws-lambda/lambda/graphql.ts +++ b/examples/aws-lambda/lambda/graphql.ts @@ -1,9 +1,17 @@ -import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { pipeline, Writable } from 'node:stream'; +import { promisify } from 'node:util'; +import { APIGatewayEvent, Context } from 'aws-lambda'; import { createSchema, createYoga } from 'graphql-yoga'; +declare const awslambda: any; + +const pipeline$ = promisify(pipeline); + const yoga = createYoga<{ event: APIGatewayEvent; lambdaContext: Context; + responseStream: Writable; }>({ graphqlEndpoint: '/graphql', landingPage: false, @@ -21,10 +29,11 @@ const yoga = createYoga<{ }), }); -export async function handler( +export const handler = awslambda.streamifyResponse(async function handler( event: APIGatewayEvent, + responseStream: Writable, lambdaContext: Context, -): Promise { +) { const response = await yoga.fetch( event.path + '?' + @@ -39,15 +48,18 @@ export async function handler( { event, lambdaContext, + responseStream, }, ); - const responseHeaders = Object.fromEntries(response.headers.entries()); - - return { + responseStream = awslambda.HttpResponseStream.from(responseStream, { statusCode: response.status, - headers: responseHeaders, - body: await response.text(), - isBase64Encoded: false, - }; -} + headers: Object.fromEntries(response.headers.entries()), + }); + + if (response.body) { + await pipeline$(response.body, responseStream); + } else { + responseStream.end(); + } +}); diff --git a/examples/aws-lambda/package.json b/examples/aws-lambda/package.json index 0691b46cbe..9cc7493fb9 100644 --- a/examples/aws-lambda/package.json +++ b/examples/aws-lambda/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@aws-cdk/assert": "2.68.0", - "@types/aws-lambda": "8.10.116", + "@types/aws-lambda": "8.10.129", "@types/node": "18.16.16", "aws-cdk": "2.83.0", "aws-cdk-lib": "2.83.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cae5956b09..4b58894f2c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -273,8 +273,8 @@ importers: specifier: 2.68.0 version: 2.68.0(aws-cdk-lib@2.83.0)(constructs@3.4.311)(jest@29.5.0) '@types/aws-lambda': - specifier: 8.10.116 - version: 8.10.116 + specifier: 8.10.129 + version: 8.10.129 '@types/node': specifier: 18.16.16 version: 18.16.16 @@ -13257,8 +13257,8 @@ packages: dependencies: '@types/estree': 1.0.0 - /@types/aws-lambda@8.10.116: - resolution: {integrity: sha512-LSvIyxYCsIMOiBnb5D6HTf7JXLCh3KPiZWL6Pkn1MqV/v5OoP42GDqn5H4wHKGGKN0mJB+4y1r0oat1dLBAkuA==} + /@types/aws-lambda@8.10.129: + resolution: {integrity: sha512-0Rl7CpTPVws5cp0Ui1gZh4Q+TXC65bXVwTOGoI2RKW45dxWzyZGbjIX0uFjFYdIJ8vnD45y584rIIqvD2vBBfQ==} dev: true /@types/aws-lambda@8.10.93: