lambder 1.0.54 → 1.0.56
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 +3 -5
- package/dist/Lambder.js +27 -21
- package/package.json +1 -1
- package/src/Lambder.ts +32 -28
package/dist/Lambder.d.ts
CHANGED
|
@@ -26,10 +26,9 @@ type RenderContext = {
|
|
|
26
26
|
type ConditionFunction = (ctx: RenderContext) => boolean;
|
|
27
27
|
type ActionFunction = (ctx: RenderContext, resolver: Resolver) => ResolverResponse | Promise<ResolverResponse>;
|
|
28
28
|
type HookCreatedFunction = (lambderInstance: Lambder) => Promise<void>;
|
|
29
|
-
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext | Promise<RenderContext>;
|
|
30
|
-
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
31
|
-
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
32
|
-
type HookCompletedFunction = (response: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
29
|
+
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext | Error | Promise<RenderContext | Error>;
|
|
30
|
+
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: ResolverResponse) => ResolverResponse | Error | Promise<ResolverResponse | Error>;
|
|
31
|
+
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) => void | Promise<void>;
|
|
33
32
|
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext | null, response: ResponseBuilder) => ResolverResponse | Promise<ResolverResponse>;
|
|
34
33
|
type RouteFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) => ResolverResponse;
|
|
35
34
|
type ApiFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) => ResolverResponse;
|
|
@@ -66,7 +65,6 @@ export default class Lambder {
|
|
|
66
65
|
addHook(hookEvent: 'beforeRender', hookFn: HookBeforeRenderFunction, priority?: number): Promise<void>;
|
|
67
66
|
addHook(hookEvent: 'afterRender', hookFn: HookAfterRenderFunction, priority?: number): Promise<void>;
|
|
68
67
|
addHook(hookEvent: 'fallback', hookFn: HookFallbackFunction, priority?: number): Promise<void>;
|
|
69
|
-
addHook(hookEvent: 'completed', hookFn: HookCompletedFunction, priority?: number): Promise<void>;
|
|
70
68
|
getResponseBuilder(): ResponseBuilder;
|
|
71
69
|
private getResolver;
|
|
72
70
|
render(event: APIGatewayProxyEvent, lambdaContext: Context): Promise<ResolverResponse>;
|
package/dist/Lambder.js
CHANGED
|
@@ -48,7 +48,6 @@ export default class Lambder {
|
|
|
48
48
|
"beforeRender": [],
|
|
49
49
|
"afterRender": [],
|
|
50
50
|
"fallback": [],
|
|
51
|
-
"completed": []
|
|
52
51
|
};
|
|
53
52
|
}
|
|
54
53
|
setRouteFallbackHandler(routeFallbackHandler) {
|
|
@@ -199,30 +198,37 @@ export default class Lambder {
|
|
|
199
198
|
let ctx = createContext(event, lambdaContext);
|
|
200
199
|
eventRenderContext = ctx;
|
|
201
200
|
return await new Promise(async (resolve, reject) => {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
201
|
+
try {
|
|
202
|
+
const resolver = this.getResolver(resolve, reject);
|
|
203
|
+
if (ctx.method === "OPTIONS")
|
|
204
|
+
return resolver.cors();
|
|
205
|
+
const firstMatchedAction = this.actionList.find(action => action.conditionFn(ctx));
|
|
206
|
+
if (firstMatchedAction) {
|
|
207
|
+
for (const hook of this.hookList["beforeRender"]) {
|
|
208
|
+
const hookCtx = await hook.hookFn(ctx, resolver);
|
|
209
|
+
if (hookCtx instanceof Error) {
|
|
210
|
+
throw hookCtx;
|
|
211
|
+
}
|
|
212
|
+
ctx = hookCtx;
|
|
213
|
+
}
|
|
214
|
+
let response = await firstMatchedAction.actionFn(ctx, resolver);
|
|
215
|
+
for (const hook of this.hookList["afterRender"]) {
|
|
216
|
+
const hookResponse = await hook.hookFn(ctx, resolver, response);
|
|
217
|
+
if (hookResponse instanceof Error) {
|
|
218
|
+
throw hookResponse;
|
|
219
|
+
}
|
|
220
|
+
response = hookResponse;
|
|
221
|
+
}
|
|
222
|
+
resolve(response);
|
|
209
223
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
response = await hook.hookFn(ctx, resolver, response);
|
|
224
|
+
else {
|
|
225
|
+
return this.handleNoMatchedAction(ctx, resolver);
|
|
213
226
|
}
|
|
214
|
-
resolve(response);
|
|
215
227
|
}
|
|
216
|
-
|
|
217
|
-
|
|
228
|
+
catch (err) {
|
|
229
|
+
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
230
|
+
reject(wrappedError);
|
|
218
231
|
}
|
|
219
|
-
}).then(async (response) => {
|
|
220
|
-
for (const hook of this.hookList["completed"]) {
|
|
221
|
-
response = await hook.hookFn(response);
|
|
222
|
-
}
|
|
223
|
-
return response;
|
|
224
|
-
}).catch((reason) => {
|
|
225
|
-
throw reason;
|
|
226
232
|
});
|
|
227
233
|
}
|
|
228
234
|
catch (err) {
|
package/package.json
CHANGED
package/src/Lambder.ts
CHANGED
|
@@ -36,19 +36,18 @@ type ActionFunction = (ctx: RenderContext, resolver: Resolver) => ResolverRespon
|
|
|
36
36
|
type ActionObject = { conditionFn: ConditionFunction, actionFn: ActionFunction };
|
|
37
37
|
|
|
38
38
|
type HookCreatedFunction = (lambderInstance: Lambder) => Promise<void>;
|
|
39
|
-
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext|Promise<RenderContext>;
|
|
40
|
-
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: ResolverResponse) => ResolverResponse|Promise<ResolverResponse>;
|
|
41
|
-
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
42
|
-
type HookCompletedFunction = (response: ResolverResponse) => ResolverResponse|Promise<ResolverResponse>;
|
|
39
|
+
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext|Error|Promise<RenderContext|Error>;
|
|
40
|
+
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: ResolverResponse) => ResolverResponse|Error|Promise<ResolverResponse|Error>;
|
|
41
|
+
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) => void|Promise<void>;
|
|
43
42
|
|
|
44
43
|
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext|null, response: ResponseBuilder) => ResolverResponse|Promise<ResolverResponse>;
|
|
45
44
|
type RouteFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) => ResolverResponse;
|
|
46
45
|
type ApiFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) => ResolverResponse;
|
|
47
46
|
|
|
48
|
-
type HookEventType = "created"|"beforeRender"|"afterRender"|"fallback"
|
|
47
|
+
type HookEventType = "created"|"beforeRender"|"afterRender"|"fallback";
|
|
49
48
|
type HookListType = {
|
|
50
49
|
priority: number,
|
|
51
|
-
hookFn: HookCreatedFunction|HookBeforeRenderFunction|HookAfterRenderFunction|HookFallbackFunction
|
|
50
|
+
hookFn: HookCreatedFunction|HookBeforeRenderFunction|HookAfterRenderFunction|HookFallbackFunction,
|
|
52
51
|
}[];
|
|
53
52
|
|
|
54
53
|
export const createContext = (
|
|
@@ -85,7 +84,6 @@ export default class Lambder {
|
|
|
85
84
|
"beforeRender": { priority: number, hookFn: HookBeforeRenderFunction }[],
|
|
86
85
|
"afterRender": { priority: number, hookFn: HookAfterRenderFunction }[],
|
|
87
86
|
"fallback": { priority: number, hookFn: HookFallbackFunction }[],
|
|
88
|
-
"completed": { priority: number, hookFn: HookCompletedFunction }[]
|
|
89
87
|
};
|
|
90
88
|
private globalErrorHandler: GlobalErrorHandlerFunction|null = null;
|
|
91
89
|
private routeFallbackHandler: RouteFallbackHandlerFunction|null = null;
|
|
@@ -105,7 +103,6 @@ export default class Lambder {
|
|
|
105
103
|
"beforeRender": [],
|
|
106
104
|
"afterRender": [],
|
|
107
105
|
"fallback": [],
|
|
108
|
-
"completed": []
|
|
109
106
|
};
|
|
110
107
|
}
|
|
111
108
|
|
|
@@ -137,7 +134,7 @@ export default class Lambder {
|
|
|
137
134
|
};
|
|
138
135
|
|
|
139
136
|
private async handleNoMatchedAction(ctx: RenderContext, resolver: Resolver){
|
|
140
|
-
for(const hook of this.hookList["fallback"]){
|
|
137
|
+
for(const hook of this.hookList["fallback"]){ await hook.hookFn(ctx, resolver); }
|
|
141
138
|
|
|
142
139
|
const isAPI = ctx.path === this.apiPath;
|
|
143
140
|
if(isAPI && this.apiFallbackHandler){
|
|
@@ -170,6 +167,7 @@ export default class Lambder {
|
|
|
170
167
|
}else if(condition?.constructor == RegExp){
|
|
171
168
|
ctx.pathParams = ctx.path.match(condition);
|
|
172
169
|
}
|
|
170
|
+
|
|
173
171
|
return await actionFn(ctx, resolver);
|
|
174
172
|
}
|
|
175
173
|
});
|
|
@@ -230,15 +228,13 @@ export default class Lambder {
|
|
|
230
228
|
});
|
|
231
229
|
};
|
|
232
230
|
|
|
233
|
-
|
|
234
231
|
async addHook(hookEvent: 'created', hookFn: HookCreatedFunction, priority?: number): Promise<void>;
|
|
235
232
|
async addHook(hookEvent: 'beforeRender', hookFn: HookBeforeRenderFunction, priority?: number): Promise<void>;
|
|
236
233
|
async addHook(hookEvent: 'afterRender', hookFn: HookAfterRenderFunction, priority?: number): Promise<void>;
|
|
237
234
|
async addHook(hookEvent: 'fallback', hookFn: HookFallbackFunction, priority?: number): Promise<void>;
|
|
238
|
-
async addHook(hookEvent: 'completed', hookFn: HookCompletedFunction, priority?: number): Promise<void>;
|
|
239
235
|
async addHook(
|
|
240
236
|
hookEvent:HookEventType,
|
|
241
|
-
hookFn: HookCreatedFunction & HookBeforeRenderFunction & HookAfterRenderFunction & HookFallbackFunction
|
|
237
|
+
hookFn: HookCreatedFunction & HookBeforeRenderFunction & HookAfterRenderFunction & HookFallbackFunction,
|
|
242
238
|
priority = 0
|
|
243
239
|
): Promise<void> {
|
|
244
240
|
if(hookEvent === "created"){
|
|
@@ -280,23 +276,31 @@ export default class Lambder {
|
|
|
280
276
|
resolve:(response: ResolverResponse)=>void,
|
|
281
277
|
reject:(err: Error)=>void
|
|
282
278
|
)=> {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
279
|
+
try{
|
|
280
|
+
const resolver = this.getResolver(resolve, reject);
|
|
281
|
+
if(ctx.method === "OPTIONS") return resolver.cors();
|
|
282
|
+
|
|
283
|
+
const firstMatchedAction = this.actionList.find(action => action.conditionFn(ctx));
|
|
284
|
+
if(firstMatchedAction){
|
|
285
|
+
for(const hook of this.hookList["beforeRender"]){
|
|
286
|
+
const hookCtx = await hook.hookFn(ctx, resolver);
|
|
287
|
+
if(hookCtx instanceof Error){ throw hookCtx; }
|
|
288
|
+
ctx = hookCtx;
|
|
289
|
+
}
|
|
290
|
+
let response = await firstMatchedAction.actionFn(ctx, resolver);
|
|
291
|
+
for(const hook of this.hookList["afterRender"]){
|
|
292
|
+
const hookResponse = await hook.hookFn(ctx, resolver, response);
|
|
293
|
+
if(hookResponse instanceof Error){ throw hookResponse; }
|
|
294
|
+
response = hookResponse;
|
|
295
|
+
}
|
|
296
|
+
resolve(response);
|
|
297
|
+
}else{
|
|
298
|
+
return this.handleNoMatchedAction(ctx, resolver);
|
|
299
|
+
}
|
|
300
|
+
} catch(err){
|
|
301
|
+
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
302
|
+
reject(wrappedError);
|
|
294
303
|
}
|
|
295
|
-
}).then(async (response: ResolverResponse):Promise<ResolverResponse> => {
|
|
296
|
-
for(const hook of this.hookList["completed"]){ response = await hook.hookFn(response); }
|
|
297
|
-
return response;
|
|
298
|
-
}).catch((reason: Error)=>{
|
|
299
|
-
throw reason;
|
|
300
304
|
})
|
|
301
305
|
}catch(err){
|
|
302
306
|
if(this.globalErrorHandler){
|