@@ -11,12 +11,13 @@ import type {
1111 ExtendedAPIGatewayProxyResult ,
1212 ExtendedAPIGatewayProxyResultBody ,
1313 HandlerResponse ,
14+ ResponseType ,
15+ ResponseTypeMap ,
1416 V1Headers ,
1517} from '../types/rest.js' ;
1618import { COMPRESSION_ENCODING_TYPES } from './constants.js' ;
1719import { InvalidHttpMethodError } from './errors.js' ;
1820import {
19- isAPIGatewayProxyEventV1 ,
2021 isAPIGatewayProxyEventV2 ,
2122 isExtendedAPIGatewayProxyResult ,
2223 isHttpMethod ,
@@ -194,27 +195,19 @@ const webHeadersToApiGatewayV2Headers = (webHeaders: Headers) => {
194195 return { headers } ;
195196} ;
196197
197- function webHeadersToApiGatewayHeaders (
198+ const webHeadersToApiGatewayHeaders = < T extends ResponseType > (
198199 webHeaders : Headers ,
199- event : APIGatewayProxyEventV2
200- ) : { headers : Record < string , string > } ;
201- function webHeadersToApiGatewayHeaders (
202- webHeaders : Headers ,
203- event : APIGatewayProxyEvent
204- ) : V1Headers ;
205- function webHeadersToApiGatewayHeaders (
206- webHeaders : Headers ,
207- event : APIGatewayProxyEvent | APIGatewayProxyEventV2
208- ) : { headers : Record < string , string > } | V1Headers ;
209- function webHeadersToApiGatewayHeaders (
210- webHeaders : Headers ,
211- event : APIGatewayProxyEvent | APIGatewayProxyEventV2
212- ) : { headers : Record < string , string > } | V1Headers {
213- if ( isAPIGatewayProxyEventV1 ( event ) ) {
214- return webHeadersToApiGatewayV1Headers ( webHeaders ) ;
200+ responseType : T
201+ ) : T extends 'v1' ? V1Headers : { headers : Record < string , string > } => {
202+ if ( responseType === 'v1' ) {
203+ return webHeadersToApiGatewayV1Headers ( webHeaders ) as T extends 'v1'
204+ ? V1Headers
205+ : { headers : Record < string , string > } ;
215206 }
216- return webHeadersToApiGatewayV2Headers ( webHeaders ) ;
217- }
207+ return webHeadersToApiGatewayV2Headers ( webHeaders ) as T extends 'v1'
208+ ? V1Headers
209+ : { headers : Record < string , string > } ;
210+ } ;
218211
219212/**
220213 * Converts a Web API Response object to an API Gateway V1 proxy result.
@@ -320,27 +313,15 @@ const webResponseToProxyResultV2 = async (
320313 return result ;
321314} ;
322315
323- function webResponseToProxyResult (
316+ const webResponseToProxyResult = < T extends ResponseType > (
324317 response : Response ,
325- event : APIGatewayProxyEventV2
326- ) : Promise < APIGatewayProxyStructuredResultV2 > ;
327- function webResponseToProxyResult (
328- response : Response ,
329- event : APIGatewayProxyEvent
330- ) : Promise < APIGatewayProxyResult > ;
331- function webResponseToProxyResult (
332- response : Response ,
333- event : APIGatewayProxyEvent | APIGatewayProxyEventV2
334- ) : Promise < APIGatewayProxyResult | APIGatewayProxyStructuredResultV2 > ;
335- function webResponseToProxyResult (
336- response : Response ,
337- event : APIGatewayProxyEvent | APIGatewayProxyEventV2
338- ) : Promise < APIGatewayProxyResult | APIGatewayProxyStructuredResultV2 > {
339- if ( isAPIGatewayProxyEventV1 ( event ) ) {
340- return webResponseToProxyResultV1 ( response ) ;
318+ responseType : T
319+ ) : Promise < ResponseTypeMap [ T ] > => {
320+ if ( responseType === 'v1' ) {
321+ return webResponseToProxyResultV1 ( response ) as Promise < ResponseTypeMap [ T ] > ;
341322 }
342- return webResponseToProxyResultV2 ( response ) ;
343- }
323+ return webResponseToProxyResultV2 ( response ) as Promise < ResponseTypeMap [ T ] > ;
324+ } ;
344325
345326/**
346327 * Adds headers from an ExtendedAPIGatewayProxyResult to a Headers object.
0 commit comments