lambder 1.0.28 → 1.0.29
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.
- package/dist/Lambder.d.ts +1 -1
- package/dist/Lambder.js +40 -36
- package/package.json +1 -1
- package/src/Lambder.ts +43 -39
package/dist/Lambder.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ type HookBeforeRenderFunction = (renderContext: RenderContext, resolver: Resolve
|
|
|
35
35
|
type HookAfterRenderFunction = (renderContext: RenderContext, resolver: Resolver, renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
36
36
|
type HookFallbackFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse | Promise<ResolverResponse>;
|
|
37
37
|
type HookCompletedFunction = (renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
38
|
-
export declare const createContext: (event: APIGatewayProxyEvent, lambdaContext: Context
|
|
38
|
+
export declare const createContext: (event: APIGatewayProxyEvent, lambdaContext: Context) => RenderContext;
|
|
39
39
|
export default class Lambder {
|
|
40
40
|
private apiPath;
|
|
41
41
|
private apiVersion;
|
package/dist/Lambder.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import querystring from "querystring";
|
|
2
2
|
import cookieParser from "cookie";
|
|
3
3
|
import Resolver from "./Resolver.js";
|
|
4
|
-
export const createContext = (event, lambdaContext
|
|
4
|
+
export const createContext = (event, lambdaContext) => {
|
|
5
5
|
const host = event.headers.Host || event.headers.host || "";
|
|
6
6
|
const url = event.path;
|
|
7
7
|
const get = event.queryStringParameters || {};
|
|
@@ -21,7 +21,7 @@ export const createContext = (event, lambdaContext, resolve, reject) => {
|
|
|
21
21
|
}
|
|
22
22
|
catch (e) { }
|
|
23
23
|
if (/^(((\d+\.)+\d+)|(([a-f\d]+:)+[a-f\d]+))$/.test(host)) {
|
|
24
|
-
|
|
24
|
+
throw new Error("[404] Host cannot be an ip address: " + host);
|
|
25
25
|
}
|
|
26
26
|
return { host, url, method, get, post, cookie, headers, session, lambdaContext };
|
|
27
27
|
};
|
|
@@ -147,45 +147,49 @@ export default class Lambder {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
async render(event, lambdaContext) {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
150
|
+
try {
|
|
151
|
+
let renderContext = createContext(event, lambdaContext);
|
|
152
|
+
return await new Promise(async (resolve, reject) => {
|
|
153
|
+
const resolver = new Resolver({
|
|
154
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
155
|
+
publicPath: this.publicPath,
|
|
156
|
+
apiVersion: this.apiVersion,
|
|
157
|
+
resolve, reject,
|
|
158
|
+
});
|
|
159
|
+
if (renderContext.method === "OPTIONS")
|
|
160
|
+
return resolver.cors();
|
|
161
|
+
const firstMatchedAction = await (async () => {
|
|
162
|
+
for (const action of this._actionList) {
|
|
163
|
+
if (await action.conditionFn(renderContext))
|
|
164
|
+
return action;
|
|
165
|
+
}
|
|
166
|
+
})();
|
|
167
|
+
if (firstMatchedAction) {
|
|
168
|
+
for (const hook of this._hookList["beforeRender"]) {
|
|
169
|
+
renderContext = await hook.hookFn(renderContext, resolver);
|
|
170
|
+
}
|
|
171
|
+
let renderResult = await firstMatchedAction.actionFn(renderContext, resolver);
|
|
172
|
+
for (const hook of this._hookList["afterRender"]) {
|
|
173
|
+
renderResult = await hook.hookFn(renderContext, resolver, renderResult);
|
|
174
|
+
}
|
|
175
|
+
resolve(renderResult);
|
|
164
176
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
for (const hook of this._hookList["beforeRender"]) {
|
|
168
|
-
renderContext = await hook.hookFn(renderContext, resolver);
|
|
177
|
+
else {
|
|
178
|
+
return this.handleNoMatchedAction(renderContext, resolver);
|
|
169
179
|
}
|
|
170
|
-
|
|
171
|
-
for (const hook of this._hookList["
|
|
172
|
-
renderResult = await hook.hookFn(
|
|
180
|
+
}).then(async (renderResult) => {
|
|
181
|
+
for (const hook of this._hookList["completed"]) {
|
|
182
|
+
renderResult = await hook.hookFn(renderResult);
|
|
173
183
|
}
|
|
174
|
-
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}).then(async (renderResult) => {
|
|
180
|
-
for (const hook of this._hookList["completed"]) {
|
|
181
|
-
renderResult = await hook.hookFn(renderResult);
|
|
182
|
-
}
|
|
183
|
-
return renderResult;
|
|
184
|
-
}).catch(async (err) => {
|
|
184
|
+
return renderResult;
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
185
189
|
if (this.globalErrorHandler) {
|
|
186
|
-
return this.globalErrorHandler(
|
|
190
|
+
return this.globalErrorHandler(wrappedError);
|
|
187
191
|
}
|
|
188
192
|
return { statusCode: 500, body: "Internal Server Error.", };
|
|
189
|
-
}
|
|
193
|
+
}
|
|
190
194
|
}
|
|
191
195
|
}
|
package/package.json
CHANGED
package/src/Lambder.ts
CHANGED
|
@@ -45,8 +45,6 @@ type HookListType = {
|
|
|
45
45
|
export const createContext = (
|
|
46
46
|
event: APIGatewayProxyEvent,
|
|
47
47
|
lambdaContext: Context,
|
|
48
|
-
resolve: Function,
|
|
49
|
-
reject: Function
|
|
50
48
|
):RenderContext => {
|
|
51
49
|
const host = event.headers.Host || event.headers.host || "";
|
|
52
50
|
const url = event.path;
|
|
@@ -61,7 +59,7 @@ export const createContext = (
|
|
|
61
59
|
try { post = JSON.parse(decodedBody) || {}; }
|
|
62
60
|
catch(e){ post = querystring.parse(decodedBody) || {}; }
|
|
63
61
|
}catch(e){}
|
|
64
|
-
if(/^(((\d+\.)+\d+)|(([a-f\d]+:)+[a-f\d]+))$/.test(host)){
|
|
62
|
+
if(/^(((\d+\.)+\d+)|(([a-f\d]+:)+[a-f\d]+))$/.test(host)){ throw new Error("[404] Host cannot be an ip address: " + host); }
|
|
65
63
|
return { host, url, method, get, post, cookie, headers, session, lambdaContext };
|
|
66
64
|
}
|
|
67
65
|
|
|
@@ -224,48 +222,54 @@ export default class Lambder {
|
|
|
224
222
|
event: APIGatewayProxyEvent,
|
|
225
223
|
lambdaContext: Context
|
|
226
224
|
): Promise<ResolverResponse>{
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
reject:(err: Error)=>void
|
|
230
|
-
)=> {
|
|
231
|
-
const resolver = new Resolver({
|
|
232
|
-
isCorsEnabled: this.isCorsEnabled,
|
|
233
|
-
publicPath: this.publicPath,
|
|
234
|
-
apiVersion: this.apiVersion,
|
|
235
|
-
resolve, reject,
|
|
236
|
-
});
|
|
237
|
-
let renderContext:RenderContext = createContext(event, lambdaContext, resolve, reject)
|
|
238
|
-
if(renderContext.method === "OPTIONS") return resolver.cors();
|
|
239
|
-
|
|
240
|
-
const firstMatchedAction = await (async () => {
|
|
241
|
-
for(const action of this._actionList){
|
|
242
|
-
if(await action.conditionFn(renderContext)) return action;
|
|
243
|
-
}
|
|
244
|
-
})();
|
|
225
|
+
try {
|
|
226
|
+
let renderContext:RenderContext = createContext(event, lambdaContext)
|
|
245
227
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
228
|
+
return await new Promise(async (
|
|
229
|
+
resolve:(renderResult: ResolverResponse)=>void,
|
|
230
|
+
reject:(err: Error)=>void
|
|
231
|
+
)=> {
|
|
232
|
+
const resolver = new Resolver({
|
|
233
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
234
|
+
publicPath: this.publicPath,
|
|
235
|
+
apiVersion: this.apiVersion,
|
|
236
|
+
resolve, reject,
|
|
237
|
+
});
|
|
238
|
+
if(renderContext.method === "OPTIONS") return resolver.cors();
|
|
239
|
+
|
|
240
|
+
const firstMatchedAction = await (async () => {
|
|
241
|
+
for(const action of this._actionList){
|
|
242
|
+
if(await action.conditionFn(renderContext)) return action;
|
|
243
|
+
}
|
|
244
|
+
})();
|
|
245
|
+
|
|
246
|
+
if(firstMatchedAction){
|
|
247
|
+
for(const hook of this._hookList["beforeRender"]){
|
|
248
|
+
renderContext = await hook.hookFn(renderContext, resolver);
|
|
249
|
+
}
|
|
250
|
+
let renderResult = await firstMatchedAction.actionFn(renderContext, resolver);
|
|
251
|
+
for(const hook of this._hookList["afterRender"]){
|
|
252
|
+
renderResult = await hook.hookFn(renderContext, resolver, renderResult);
|
|
253
|
+
}
|
|
254
|
+
resolve(renderResult);
|
|
255
|
+
}else{
|
|
256
|
+
return this.handleNoMatchedAction(renderContext, resolver);
|
|
249
257
|
}
|
|
250
|
-
|
|
251
|
-
for(const hook of this._hookList["
|
|
252
|
-
renderResult = await hook.hookFn(
|
|
258
|
+
}).then(async (renderResult: ResolverResponse):Promise<ResolverResponse> => {
|
|
259
|
+
for(const hook of this._hookList["completed"]){
|
|
260
|
+
renderResult = await hook.hookFn(renderResult);
|
|
253
261
|
}
|
|
254
|
-
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
for(const hook of this._hookList["completed"]){
|
|
260
|
-
renderResult = await hook.hookFn(renderResult);
|
|
261
|
-
}
|
|
262
|
-
return renderResult;
|
|
263
|
-
}).catch(async (err: Error):Promise<ResolverResponse> => {
|
|
262
|
+
return renderResult;
|
|
263
|
+
});
|
|
264
|
+
}catch(err){
|
|
265
|
+
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
266
|
+
|
|
264
267
|
if(this.globalErrorHandler){
|
|
265
|
-
return this.globalErrorHandler(
|
|
268
|
+
return this.globalErrorHandler(wrappedError);
|
|
266
269
|
}
|
|
267
270
|
return { statusCode: 500, body: "Internal Server Error.", }
|
|
268
|
-
|
|
271
|
+
|
|
272
|
+
}
|
|
269
273
|
}
|
|
270
274
|
|
|
271
275
|
}
|