@middy/core 3.0.0-alpha.6 → 3.0.0-alpha.7

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/README.md +23 -13
  2. package/index.js +2 -241
  3. package/package.json +2 -2
package/README.md CHANGED
@@ -1,26 +1,36 @@
1
- # Middy Core
2
-
3
- <div align="center">
4
- <img alt="Middy logo" src="https://raw.githubusercontent.com/middyjs/middy/main/docs/img/middy-logo.png"/>
5
- </div>
6
-
7
1
  <div align="center">
2
+ <h1>Middy Core</h1>
3
+ <img alt="Middy logo" src="https://raw.githubusercontent.com/middyjs/middy/main/docs/img/middy-logo.svg"/>
8
4
  <p><strong>Core component of the middy framework, the stylish Node.js middleware engine for AWS Lambda</strong></p>
9
- </div>
10
-
11
- <div align="center">
12
5
  <p>
13
- <a href="http://badge.fury.io/js/%40middy%2Fcore">
6
+ <a href="https://www.npmjs.com/package/@middy/core?activeTab=versions">
14
7
  <img src="https://badge.fury.io/js/%40middy%2Fcore.svg" alt="npm version" style="max-width:100%;">
15
8
  </a>
9
+ <a href="https://packagephobia.com/result?p=@middy/core">
10
+ <img src="https://packagephobia.com/badge?p=@middy/core" alt="npm install size" style="max-width:100%;">
11
+ </a>
12
+ <a href="https://github.com/middyjs/middy/actions">
13
+ <img src="https://github.com/middyjs/middy/workflows/Tests/badge.svg" alt="GitHub Actions test status badge" style="max-width:100%;">
14
+ </a>
15
+ <br/>
16
+ <a href="https://standardjs.com/">
17
+ <img src="https://img.shields.io/badge/code_style-standard-brightgreen.svg" alt="Standard Code Style" style="max-width:100%;">
18
+ </a>
16
19
  <a href="https://snyk.io/test/github/middyjs/middy">
17
20
  <img src="https://snyk.io/test/github/middyjs/middy/badge.svg" alt="Known Vulnerabilities" data-canonical-src="https://snyk.io/test/github/middyjs/middy" style="max-width:100%;">
18
21
  </a>
19
- <a href="https://standardjs.com/">
20
- <img src="https://img.shields.io/badge/code_style-standard-brightgreen.svg" alt="Standard Code Style" style="max-width:100%;">
22
+ <a href="https://lgtm.com/projects/g/middyjs/middy/context:javascript">
23
+ <img src="https://img.shields.io/lgtm/grade/javascript/g/middyjs/middy.svg?logo=lgtm&logoWidth=18" alt="Language grade: JavaScript" style="max-width:100%;">
24
+ </a>
25
+ <a href="https://bestpractices.coreinfrastructure.org/projects/5280">
26
+ <img src="https://bestpractices.coreinfrastructure.org/projects/5280/badge" alt="Core Infrastructure Initiative (CII) Best Practices" style="max-width:100%;">
21
27
  </a>
28
+ <br/>
22
29
  <a href="https://gitter.im/middyjs/Lobby">
23
- <img src="https://badges.gitter.im/gitterHQ/gitter.svg" alt="Chat on Gitter" style="max-width:100%;">
30
+ <img src="https://badges.gitter.im/gitterHQ/gitter.svg" alt="Chat on Gitter" style="max-width:100%;">
31
+ </a>
32
+ <a href="https://stackoverflow.com/questions/tagged/middy?sort=Newest&uqlId=35052">
33
+ <img src="https://img.shields.io/badge/StackOverflow-[middy]-yellow" alt="Ask questions on StackOverflow" style="max-width:100%;">
24
34
  </a>
25
35
  </p>
26
36
  </div>
package/index.js CHANGED
@@ -1,242 +1,3 @@
1
- import { EventEmitter } from 'events';
1
+ import{EventEmitter}from'events';const defaultLambdaHandler=()=>{};const defaultPlugin={timeoutEarlyInMillis:5,timeoutEarlyResponse:()=>{throw new Error('Timeout')}};const middy=(lambdaHandler=defaultLambdaHandler,plugin={})=>{if(typeof lambdaHandler!=='function'){plugin=lambdaHandler;lambdaHandler=defaultLambdaHandler}plugin={...defaultPlugin,...plugin};plugin.timeoutEarly=plugin.timeoutEarlyInMillis>0;plugin.beforePrefetch?.();const beforeMiddlewares=[];const afterMiddlewares=[];const onErrorMiddlewares=[];const middy1=(event={},context={})=>{plugin.requestStart?.();const request={event,context,response:undefined,error:undefined,internal:plugin.internal??{}};return runRequest(request,[...beforeMiddlewares],lambdaHandler,[...afterMiddlewares],[...onErrorMiddlewares],plugin)};middy1.use=middlewares=>{if(!Array.isArray(middlewares)){middlewares=[middlewares]}for(const middleware of middlewares){const{before,after,onError}=middleware;if(!before&&!after&&!onError){throw new Error('Middleware must be an object containing at least one key among "before", "after", "onError"')}if(before)middy1.before(before);if(after)middy1.after(after);if(onError)middy1.onError(onError)}return middy1};middy1.before=beforeMiddleware=>{beforeMiddlewares.push(beforeMiddleware);return middy1};middy1.after=afterMiddleware=>{afterMiddlewares.unshift(afterMiddleware);return middy1};middy1.onError=onErrorMiddleware=>{onErrorMiddlewares.unshift(onErrorMiddleware);return middy1};middy1.handler=replaceLambdaHandler=>{lambdaHandler=replaceLambdaHandler;return middy1};return middy1};const runRequest=async(request,beforeMiddlewares,lambdaHandler,afterMiddlewares,onErrorMiddlewares,plugin)=>{const timeoutEarly=plugin.timeoutEarly&&request.context.getRemainingTimeInMillis;try{await runMiddlewares(request,beforeMiddlewares,plugin);if(request.response===undefined){plugin.beforeHandler?.();const handlerAbort=new AbortController();let timeoutAbort;if(timeoutEarly)timeoutAbort=new AbortController();request.response=await Promise.race([lambdaHandler(request.event,request.context,{signal:handlerAbort.signal}),timeoutEarly?setTimeoutPromise(request.context.getRemainingTimeInMillis()-plugin.timeoutEarlyInMillis,{signal:timeoutAbort.signal}).then(()=>{handlerAbort.abort();return plugin.timeoutEarlyResponse()}):Promise.race([])]);if(timeoutEarly)timeoutAbort.abort();plugin.afterHandler?.();await runMiddlewares(request,afterMiddlewares,plugin)}}catch(e){request.response=undefined;request.error=e;try{await runMiddlewares(request,onErrorMiddlewares,plugin)}catch(e){e.originalError=request.error;request.error=e;throw request.error}if(request.response===undefined)throw request.error}finally{await plugin.requestEnd?.(request)}return request.response};const runMiddlewares=async(request,middlewares,plugin)=>{for(const nextMiddleware of middlewares){plugin.beforeMiddleware?.(nextMiddleware.name);const res=await nextMiddleware(request);plugin.afterMiddleware?.(nextMiddleware.name);if(res!==undefined){request.response=res;return}}};const polyfillAbortController=()=>{if(process.version<'v15.0.0'){var tmp=Symbol.toStringTag;class AbortSignal{toString(){return'[object AbortSignal]'}get[tmp](){return'AbortSignal'}removeEventListener(name,handler){this.eventEmitter.removeListener(name,handler)}addEventListener(name,handler){this.eventEmitter.on(name,handler)}dispatchEvent(type){const event={type,target:this};const handlerName=`on${type}`;if(typeof this[handlerName]==='function')this[handlerName](event);this.eventEmitter.emit(type,event)}constructor(){this.eventEmitter=new EventEmitter();this.onabort=null;this.aborted=false}}return(function(){var tmp=Symbol.toStringTag;class AbortController{abort(){if(this.signal.aborted)return;this.signal.aborted=true;this.signal.dispatchEvent('abort')}toString(){return'[object AbortController]'}get[tmp](){return'AbortController'}constructor(){this.signal=new AbortSignal()}}return AbortController})()}else{return AbortController}};global.AbortController=polyfillAbortController();const polyfillSetTimeoutPromise=()=>{return(ms,{signal})=>{if(signal.aborted){return Promise.reject(new Error('Aborted','AbortError'))}return new Promise((resolve,reject)=>{const abortHandler=()=>{clearTimeout(timeout);reject(new Error('Aborted','AbortError'))};const timeout=setTimeout(()=>{resolve();signal.removeEventListener('abort',abortHandler)},ms);signal.addEventListener('abort',abortHandler)})}};const setTimeoutPromise=polyfillSetTimeoutPromise();export default middy
2
2
 
3
- const defaultLambdaHandler = () => {};
4
-
5
- const defaultPlugin = {
6
- timeoutEarlyInMillis: 5,
7
- timeoutEarlyResponse: () => {
8
- throw new Error('Timeout');
9
- }
10
- };
11
-
12
- const middy = (lambdaHandler = defaultLambdaHandler, plugin = {}) => {
13
- var _plugin$beforePrefetc, _plugin;
14
-
15
- if (typeof lambdaHandler !== 'function') {
16
- plugin = lambdaHandler;
17
- lambdaHandler = defaultLambdaHandler;
18
- }
19
-
20
- plugin = { ...defaultPlugin,
21
- ...plugin
22
- };
23
- plugin.timeoutEarly = plugin.timeoutEarlyInMillis > 0;
24
- (_plugin$beforePrefetc = (_plugin = plugin).beforePrefetch) === null || _plugin$beforePrefetc === void 0 ? void 0 : _plugin$beforePrefetc.call(_plugin);
25
- const beforeMiddlewares = [];
26
- const afterMiddlewares = [];
27
- const onErrorMiddlewares = [];
28
-
29
- const middy = (event = {}, context = {}) => {
30
- var _plugin$requestStart, _plugin2;
31
-
32
- (_plugin$requestStart = (_plugin2 = plugin).requestStart) === null || _plugin$requestStart === void 0 ? void 0 : _plugin$requestStart.call(_plugin2);
33
- const request = {
34
- event,
35
- context,
36
- response: undefined,
37
- error: undefined,
38
- internal: plugin.internal ?? {}
39
- };
40
- return runRequest(request, [...beforeMiddlewares], lambdaHandler, [...afterMiddlewares], [...onErrorMiddlewares], plugin);
41
- };
42
-
43
- middy.use = middlewares => {
44
- if (!Array.isArray(middlewares)) {
45
- middlewares = [middlewares];
46
- }
47
-
48
- for (const middleware of middlewares) {
49
- const {
50
- before,
51
- after,
52
- onError
53
- } = middleware;
54
-
55
- if (!before && !after && !onError) {
56
- throw new Error('Middleware must be an object containing at least one key among "before", "after", "onError"');
57
- }
58
-
59
- if (before) middy.before(before);
60
- if (after) middy.after(after);
61
- if (onError) middy.onError(onError);
62
- }
63
-
64
- return middy;
65
- };
66
-
67
- middy.before = beforeMiddleware => {
68
- beforeMiddlewares.push(beforeMiddleware);
69
- return middy;
70
- };
71
-
72
- middy.after = afterMiddleware => {
73
- afterMiddlewares.unshift(afterMiddleware);
74
- return middy;
75
- };
76
-
77
- middy.onError = onErrorMiddleware => {
78
- onErrorMiddlewares.unshift(onErrorMiddleware);
79
- return middy;
80
- };
81
-
82
- middy.handler = replaceLambdaHandler => {
83
- lambdaHandler = replaceLambdaHandler;
84
- return middy;
85
- };
86
-
87
- return middy;
88
- };
89
-
90
- const runRequest = async (request, beforeMiddlewares, lambdaHandler, afterMiddlewares, onErrorMiddlewares, plugin) => {
91
- const {
92
- timeoutEarly
93
- } = plugin;
94
-
95
- try {
96
- await runMiddlewares(request, beforeMiddlewares, plugin);
97
-
98
- if (request.response === undefined) {
99
- var _plugin$beforeHandler, _plugin$afterHandler;
100
-
101
- (_plugin$beforeHandler = plugin.beforeHandler) === null || _plugin$beforeHandler === void 0 ? void 0 : _plugin$beforeHandler.call(plugin);
102
- const handlerAbort = new AbortController();
103
- let timeoutAbort;
104
- if (timeoutEarly) timeoutAbort = new AbortController();
105
- request.response = await Promise.race([lambdaHandler(request.event, request.context, {
106
- signal: handlerAbort.signal
107
- }), timeoutEarly ? setTimeoutPromise(request.context.getRemainingTimeInMillis() - plugin.timeoutEarlyInMillis, {
108
- signal: timeoutAbort.signal
109
- }).then(() => {
110
- handlerAbort.abort();
111
- return plugin.timeoutEarlyResponse();
112
- }) : Promise.race([])]);
113
- if (timeoutEarly) timeoutAbort.abort();
114
- (_plugin$afterHandler = plugin.afterHandler) === null || _plugin$afterHandler === void 0 ? void 0 : _plugin$afterHandler.call(plugin);
115
- await runMiddlewares(request, afterMiddlewares, plugin);
116
- }
117
- } catch (e) {
118
- request.response = undefined;
119
- request.error = e;
120
-
121
- try {
122
- await runMiddlewares(request, onErrorMiddlewares, plugin);
123
- } catch (e) {
124
- e.originalError = request.error;
125
- request.error = e;
126
- throw request.error;
127
- }
128
-
129
- if (request.response === undefined) throw request.error;
130
- } finally {
131
- var _plugin$requestEnd;
132
-
133
- await ((_plugin$requestEnd = plugin.requestEnd) === null || _plugin$requestEnd === void 0 ? void 0 : _plugin$requestEnd.call(plugin, request));
134
- }
135
-
136
- return request.response;
137
- };
138
-
139
- const runMiddlewares = async (request, middlewares, plugin) => {
140
- for (const nextMiddleware of middlewares) {
141
- var _plugin$beforeMiddlew, _plugin$afterMiddlewa;
142
-
143
- (_plugin$beforeMiddlew = plugin.beforeMiddleware) === null || _plugin$beforeMiddlew === void 0 ? void 0 : _plugin$beforeMiddlew.call(plugin, nextMiddleware.name);
144
- const res = await nextMiddleware(request);
145
- (_plugin$afterMiddlewa = plugin.afterMiddleware) === null || _plugin$afterMiddlewa === void 0 ? void 0 : _plugin$afterMiddlewa.call(plugin, nextMiddleware.name);
146
-
147
- if (res !== undefined) {
148
- request.response = res;
149
- return;
150
- }
151
- }
152
- };
153
-
154
- const polyfillAbortController = () => {
155
- if (process.version < 'v15.0.0') {
156
- class AbortSignal {
157
- constructor() {
158
- this.eventEmitter = new EventEmitter();
159
- this.onabort = null;
160
- this.aborted = false;
161
- }
162
-
163
- toString() {
164
- return '[object AbortSignal]';
165
- }
166
-
167
- get [Symbol.toStringTag]() {
168
- return 'AbortSignal';
169
- }
170
-
171
- removeEventListener(name, handler) {
172
- this.eventEmitter.removeListener(name, handler);
173
- }
174
-
175
- addEventListener(name, handler) {
176
- this.eventEmitter.on(name, handler);
177
- }
178
-
179
- dispatchEvent(type) {
180
- const event = {
181
- type,
182
- target: this
183
- };
184
- const handlerName = `on${type}`;
185
- if (typeof this[handlerName] === 'function') this[handlerName](event);
186
- this.eventEmitter.emit(type, event);
187
- }
188
-
189
- }
190
-
191
- return class AbortController {
192
- constructor() {
193
- this.signal = new AbortSignal();
194
- }
195
-
196
- abort() {
197
- if (this.signal.aborted) return;
198
- this.signal.aborted = true;
199
- this.signal.dispatchEvent('abort');
200
- }
201
-
202
- toString() {
203
- return '[object AbortController]';
204
- }
205
-
206
- get [Symbol.toStringTag]() {
207
- return 'AbortController';
208
- }
209
-
210
- };
211
- } else {
212
- return AbortController;
213
- }
214
- };
215
-
216
- global.AbortController = polyfillAbortController();
217
-
218
- const polyfillSetTimeoutPromise = () => {
219
- return (ms, {
220
- signal
221
- }) => {
222
- if (signal.aborted) {
223
- return Promise.reject(new Error('Aborted', 'AbortError'));
224
- }
225
-
226
- return new Promise((resolve, reject) => {
227
- const abortHandler = () => {
228
- clearTimeout(timeout);
229
- reject(new Error('Aborted', 'AbortError'));
230
- };
231
-
232
- const timeout = setTimeout(() => {
233
- resolve();
234
- signal.removeEventListener('abort', abortHandler);
235
- }, ms);
236
- signal.addEventListener('abort', abortHandler);
237
- });
238
- };
239
- };
240
-
241
- const setTimeoutPromise = polyfillSetTimeoutPromise();
242
- export default middy;
3
+ //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@middy/core",
3
- "version": "3.0.0-alpha.6",
3
+ "version": "3.0.0-alpha.7",
4
4
  "description": "🛵 The stylish Node.js middleware engine for AWS Lambda (core package)",
5
5
  "type": "module",
6
6
  "engines": {
@@ -47,5 +47,5 @@
47
47
  "@types/aws-lambda": "^8.10.76",
48
48
  "@types/node": "^17.0.0"
49
49
  },
50
- "gitHead": "176660ed3e0716d6bfb635c77251b301e0e24720"
50
+ "gitHead": "5cef39ebe49c201f97d71bb0680004de4b82cb91"
51
51
  }