@middy/core 2.4.3 → 2.5.3

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.
Files changed (3) hide show
  1. package/index.d.ts +32 -23
  2. package/index.js +1 -1
  3. package/package.json +2 -2
package/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  Context as LambdaContext,
3
- Handler as LambdaHandler
3
+ Handler as LambdaHandler,
4
+ Callback as LambdaCallback
4
5
  } from 'aws-lambda'
5
6
 
6
7
  declare type PluginHook = () => void
7
8
  declare type PluginHookWithMiddlewareName = (middlewareName: string) => void
8
- declare type PluginHookPromise = () => Promise<any>
9
+ declare type PluginHookPromise = (request: Request) => Promise<unknown> | unknown
9
10
 
10
11
  interface PluginObject {
11
12
  beforePrefetch?: PluginHook
@@ -17,9 +18,9 @@ interface PluginObject {
17
18
  requestEnd?: PluginHookPromise
18
19
  }
19
20
 
20
- interface Request<TEvent = any, TResult = any, TErr = Error> {
21
+ interface Request<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> {
21
22
  event: TEvent
22
- context: LambdaContext
23
+ context: TContext
23
24
  response: TResult | null
24
25
  error: TErr | null
25
26
  internal: {
@@ -27,41 +28,49 @@ interface Request<TEvent = any, TResult = any, TErr = Error> {
27
28
  }
28
29
  }
29
30
 
30
- declare type MiddlewareFn<TEvent = any, TResult = any, TErr = Error> = (request: Request<TEvent, TResult, TErr>) => any
31
+ declare type MiddlewareFn<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> = (request: Request<TEvent, TResult, TErr, TContext>) => any
31
32
 
32
- export interface MiddlewareObj<TEvent = any, TResult = any, TErr = Error> {
33
- before?: MiddlewareFn<TEvent, TResult, TErr>
34
- after?: MiddlewareFn<TEvent, TResult, TErr>
33
+ export interface MiddlewareObj<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> {
34
+ before?: MiddlewareFn<TEvent, TResult, TErr, TContext>
35
+ after?: MiddlewareFn<TEvent, TResult, TErr, TContext>
35
36
  onError?: MiddlewareFn<TEvent, TResult, TErr>
36
37
  }
37
38
 
38
- export interface MiddyfiedHandler<TEvent = any, TResult = any, TErr = Error> {
39
- use: UseFn<TEvent, TResult, TErr>
40
- applyMiddleware: AttachMiddlewareObj<TEvent, TResult, TErr>
41
- before: AttachMiddlewareFn<TEvent, TResult, TErr>
42
- after: AttachMiddlewareFn<TEvent, TResult, TErr>
43
- onError: AttachMiddlewareFn<TEvent, TResult, TErr>
39
+ // The AWS provided Handler type uses void | Promise<TResult> so we have no choice but to follow and suppress the linter warning
40
+ // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
41
+ type MiddyInputHandler<TEvent, TResult, TContext extends LambdaContext = LambdaContext> = (event: TEvent, context: TContext, callback: LambdaCallback<TResult>) => void | Promise<TResult>
42
+
43
+ export interface MiddyfiedHandler<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> extends MiddyInputHandler<TEvent, TResult, TContext> {
44
+ use: UseFn<TEvent, TResult, TErr, TContext>
45
+ applyMiddleware: AttachMiddlewareObj<TEvent, TResult, TErr, TContext>
46
+ before: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
47
+ after: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
48
+ onError: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
44
49
  __middlewares: {
45
- before: Array<MiddlewareFn<TEvent, TResult, TErr>>
46
- after: Array<MiddlewareFn<TEvent, TResult, TErr>>
47
- onError: Array<MiddlewareFn<TEvent, TResult, TErr>>
50
+ before: Array<MiddlewareFn<TEvent, TResult, TErr, TContext>>
51
+ after: Array<MiddlewareFn<TEvent, TResult, TErr, TContext>>
52
+ onError: Array<MiddlewareFn<TEvent, TResult, TErr, TContext>>
48
53
  }
49
- (event: TEvent, context: LambdaContext): Promise<TResult>
50
54
  }
51
55
 
52
- declare type AttachMiddlewareFn<TEvent = any, TResult = any, TErr = Error> = (middleware: MiddlewareFn) => MiddyfiedHandler<TEvent, TResult, TErr>
56
+ declare type AttachMiddlewareFn<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> = (middleware: MiddlewareFn) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
57
+
58
+ declare type AttachMiddlewareObj<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> = (middleware: MiddlewareObj) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
53
59
 
54
- declare type AttachMiddlewareObj<TEvent = any, TResult = any, TErr = Error> = (middleware: MiddlewareObj) => MiddyfiedHandler<TEvent, TResult, TErr>
60
+ declare type UseFn<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> =
61
+ (middlewares: MiddlewareObj<TEvent, TResult, TErr, TContext> | Array<MiddlewareObj<TEvent, TResult, TErr, TContext>>) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
55
62
 
56
- declare type UseFn<TEvent = any, TResult = any, TErr = Error> =
57
- (middlewares: MiddlewareObj<TEvent, TResult, TErr> | Array<MiddlewareObj<TEvent, TResult, TErr>>) => MiddyfiedHandler<TEvent, TResult, TErr>
63
+ declare type MiddlewareHandler<THandler extends LambdaHandler<any, any>, TContext extends LambdaContext = LambdaContext> =
64
+ THandler extends LambdaHandler<infer TEvent, infer TResult> // always true
65
+ ? MiddyInputHandler<TEvent, TResult, TContext>
66
+ : never
58
67
 
59
68
  /**
60
69
  * Middy factory function. Use it to wrap your existing handler to enable middlewares on it.
61
70
  * @param handler your original AWS Lambda function
62
71
  * @param plugin wraps around each middleware and handler to add custom lifecycle behaviours (e.g. to profile performance)
63
72
  */
64
- declare function middy<TEvent = any, TResult = any, TErr = Error> (handler?: LambdaHandler<TEvent, TResult>, plugin?: PluginObject): MiddyfiedHandler<TEvent, TResult, TErr>
73
+ declare function middy<TEvent = any, TResult = any, TErr = Error, TContext extends LambdaContext = LambdaContext> (handler?: MiddlewareHandler<LambdaHandler<TEvent, TResult>, TContext>, plugin?: PluginObject): MiddyfiedHandler<TEvent, TResult, TErr, TContext>
65
74
 
66
75
  declare namespace middy {
67
76
  export {
package/index.js CHANGED
@@ -106,7 +106,7 @@ const runRequest = async (request, beforeMiddlewares, baseHandler, afterMiddlewa
106
106
  } finally {
107
107
  var _plugin$requestEnd;
108
108
 
109
- await (plugin === null || plugin === void 0 ? void 0 : (_plugin$requestEnd = plugin.requestEnd) === null || _plugin$requestEnd === void 0 ? void 0 : _plugin$requestEnd.call(plugin));
109
+ await (plugin === null || plugin === void 0 ? void 0 : (_plugin$requestEnd = plugin.requestEnd) === null || _plugin$requestEnd === void 0 ? void 0 : _plugin$requestEnd.call(plugin, request));
110
110
  }
111
111
 
112
112
  return request.response;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/core",
3
- "version": "2.4.3",
3
+ "version": "2.5.3",
4
4
  "description": "🛵 The stylish Node.js middleware engine for AWS Lambda (core package)",
5
5
  "type": "commonjs",
6
6
  "engines": {
@@ -45,5 +45,5 @@
45
45
  "@types/aws-lambda": "^8.10.76",
46
46
  "@types/node": "^16.0.0"
47
47
  },
48
- "gitHead": "969313c44d557dddf81849b10407652e7c533a46"
48
+ "gitHead": "690884d43b9cd632aeca9a5eba1612160b987cd4"
49
49
  }