Skip to content

Commit 91c7d20

Browse files
committed
Merge branch 'main' into develop
2 parents cff500d + 7153f29 commit 91c7d20

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

packages/core/index.d.ts

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,13 @@ declare type UseFn<
140140
TErr = Error,
141141
TContext extends LambdaContext = LambdaContext,
142142
TInternal extends Record<string, unknown> = {},
143-
> = <TMiddleware extends MiddlewareObj<any, any, Error, any, any>>(
144-
middlewares: TMiddleware | TMiddleware[],
145-
) => TMiddleware extends MiddlewareObj<
143+
> = <
144+
TMiddlewares extends
145+
| MiddlewareObj<any, any, Error, any, any>
146+
| MiddlewareObj<any, any, Error, any, any>[],
147+
>(
148+
middlewares: TMiddlewares,
149+
) => TMiddlewares extends MiddlewareObj<
146150
infer TMiddlewareEvent,
147151
any,
148152
Error,
@@ -155,8 +159,22 @@ declare type UseFn<
155159
TErr,
156160
TMiddlewareContext & TContext,
157161
TMiddlewareInternal & TInternal
158-
> // always true
159-
: never;
162+
>
163+
: TMiddlewares extends MiddlewareObj<
164+
infer TMiddlewareEvent,
165+
any,
166+
Error,
167+
infer TMiddlewareContext,
168+
infer TMiddlewareInternal
169+
>[]
170+
? MiddyfiedHandler<
171+
TEvent & TMiddlewareEvent,
172+
TResult,
173+
TErr,
174+
TContext & TMiddlewareContext,
175+
TInternal & TMiddlewareInternal
176+
>
177+
: never;
160178

161179
declare type MiddlewareHandler<
162180
THandler extends LambdaHandler<any, any>,

packages/core/index.test-d.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -553,3 +553,17 @@ middy<unknown, string>()
553553
// @ts-expect-error!
554554
const s3MiddyHandler = middy().handler(s3Handler);
555555
expect(s3MiddyHandler).type.toBe<middy.MiddyfiedHandler<unknown, any>>();
556+
557+
// Issue #1289 .use() does not intersect Typescript types appropriately for an array of middleware
558+
const middleware1 = { before: (req: middy.Request<{ foo: string }>) => {} };
559+
const middleware2 = { before: (req: middy.Request<{ bar: string }>) => {} };
560+
const handlerWithCombinedEvent = middy(lambdaHandler).use([
561+
middleware1,
562+
middleware2,
563+
]);
564+
expect(handlerWithCombinedEvent).type.toBe<
565+
middy.MiddyfiedHandler<
566+
APIGatewayProxyEvent & { foo: string } & { bar: string },
567+
APIGatewayProxyResult
568+
>
569+
>();

0 commit comments

Comments
 (0)