1 | import {
|
2 | Callback as LambdaCallback,
|
3 | Context as LambdaContext,
|
4 | Handler as LambdaHandler
|
5 | } from 'aws-lambda'
|
6 |
|
7 | declare type PluginHook = () => void
|
8 | declare type PluginHookWithMiddlewareName = (middlewareName: string) => void
|
9 | declare type PluginHookPromise = (
|
10 | request: Request
|
11 | ) => Promise<unknown> | unknown
|
12 |
|
13 | interface PluginObject {
|
14 | internal?: any
|
15 | beforePrefetch?: PluginHook
|
16 | requestStart?: PluginHook
|
17 | beforeMiddleware?: PluginHookWithMiddlewareName
|
18 | afterMiddleware?: PluginHookWithMiddlewareName
|
19 | beforeHandler?: PluginHook
|
20 | timeoutEarlyInMillis?: number
|
21 | timeoutEarlyResponse?: PluginHook
|
22 | afterHandler?: PluginHook
|
23 | requestEnd?: PluginHookPromise
|
24 | streamifyResponse?: Boolean
|
25 | }
|
26 |
|
27 | export interface Request<
|
28 | TEvent = any,
|
29 | TResult = any,
|
30 | TErr = Error,
|
31 | TContext extends LambdaContext = LambdaContext
|
32 | > {
|
33 | event: TEvent
|
34 | context: TContext
|
35 | response: TResult | null
|
36 | error: TErr | null
|
37 | internal: {
|
38 | [key: string]: any
|
39 | }
|
40 | }
|
41 |
|
42 | declare type MiddlewareFn<
|
43 | TEvent = any,
|
44 | TResult = any,
|
45 | TErr = Error,
|
46 | TContext extends LambdaContext = LambdaContext
|
47 | > = (request: Request<TEvent, TResult, TErr, TContext>) => any
|
48 |
|
49 | export interface MiddlewareObj<
|
50 | TEvent = unknown,
|
51 | TResult = any,
|
52 | TErr = Error,
|
53 | TContext extends LambdaContext = LambdaContext
|
54 | > {
|
55 | before?: MiddlewareFn<TEvent, TResult, TErr, TContext>
|
56 | after?: MiddlewareFn<TEvent, TResult, TErr, TContext>
|
57 | onError?: MiddlewareFn<TEvent, TResult, TErr, TContext>
|
58 | }
|
59 |
|
60 |
|
61 |
|
62 | type MiddyInputHandler<
|
63 | TEvent,
|
64 | TResult,
|
65 | TContext extends LambdaContext = LambdaContext
|
66 | > = (
|
67 | event: TEvent,
|
68 | context: TContext,
|
69 | callback: LambdaCallback<TResult>
|
70 | ) =>
|
71 | void | Promise<TResult> | TResult
|
72 | type MiddyInputPromiseHandler<
|
73 | TEvent,
|
74 | TResult,
|
75 | TContext extends LambdaContext = LambdaContext
|
76 | > = (event: TEvent, context: TContext) => Promise<TResult>
|
77 |
|
78 | export interface MiddyfiedHandler<
|
79 | TEvent = any,
|
80 | TResult = any,
|
81 | TErr = Error,
|
82 | TContext extends LambdaContext = LambdaContext
|
83 | > extends MiddyInputHandler<TEvent, TResult, TContext>,
|
84 | MiddyInputPromiseHandler<TEvent, TResult, TContext> {
|
85 | use: UseFn<TEvent, TResult, TErr, TContext>
|
86 | before: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
|
87 | after: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
|
88 | onError: AttachMiddlewareFn<TEvent, TResult, TErr, TContext>
|
89 | handler: <TAdditional>(
|
90 | handler: MiddlewareHandler<
|
91 | LambdaHandler<TEvent & TAdditional, TResult>,
|
92 | TContext
|
93 | >
|
94 | ) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
|
95 | }
|
96 |
|
97 | declare type AttachMiddlewareFn<
|
98 | TEvent = any,
|
99 | TResult = any,
|
100 | TErr = Error,
|
101 | TContext extends LambdaContext = LambdaContext
|
102 | > = (
|
103 | middleware: MiddlewareFn<TEvent, TResult, TErr, TContext>
|
104 | ) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
|
105 |
|
106 | declare type AttachMiddlewareObj<
|
107 | TEvent = any,
|
108 | TResult = any,
|
109 | TErr = Error,
|
110 | TContext extends LambdaContext = LambdaContext
|
111 | > = (
|
112 | middleware: MiddlewareObj<TEvent, TResult, TErr, TContext>
|
113 | ) => MiddyfiedHandler<TEvent, TResult, TErr, TContext>
|
114 |
|
115 | declare type UseFn<
|
116 | TEvent = any,
|
117 | TResult = any,
|
118 | TErr = Error,
|
119 | TContext extends LambdaContext = LambdaContext
|
120 | > = <TMiddleware extends MiddlewareObj<any, any, Error, any>>(
|
121 | middlewares: TMiddleware | TMiddleware[]
|
122 | ) => TMiddleware extends MiddlewareObj<
|
123 | infer TMiddlewareEvent,
|
124 | any,
|
125 | Error,
|
126 | infer TMiddlewareContext
|
127 | >
|
128 | ? MiddyfiedHandler<
|
129 | TMiddlewareEvent & TEvent,
|
130 | TResult,
|
131 | TErr,
|
132 | TMiddlewareContext & TContext
|
133 | >
|
134 | : never
|
135 |
|
136 | declare type MiddlewareHandler<
|
137 | THandler extends LambdaHandler<any, any>,
|
138 | TContext extends LambdaContext = LambdaContext
|
139 | > = THandler extends LambdaHandler<infer TEvent, infer TResult>
|
140 | ? MiddyInputHandler<TEvent, TResult, TContext>
|
141 | : never
|
142 |
|
143 |
|
144 |
|
145 |
|
146 |
|
147 |
|
148 | declare function middy<
|
149 | TEvent = unknown,
|
150 | TResult = any,
|
151 | TErr = Error,
|
152 | TContext extends LambdaContext = LambdaContext
|
153 | > (
|
154 | handler?: MiddlewareHandler<LambdaHandler<TEvent, TResult>, TContext> | PluginObject,
|
155 | plugin?: PluginObject
|
156 | ): MiddyfiedHandler<TEvent, TResult, TErr, TContext>
|
157 |
|
158 | declare namespace middy {
|
159 | export {
|
160 | Request,
|
161 | PluginHook,
|
162 | PluginHookWithMiddlewareName,
|
163 | PluginObject,
|
164 | MiddlewareFn,
|
165 | MiddlewareObj,
|
166 | MiddyfiedHandler
|
167 | }
|
168 | }
|
169 |
|
170 | export default middy
|