lambder 1.0.39 → 1.0.40
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 +4 -2
- package/dist/Lambder.js +21 -13
- package/dist/Resolver.d.ts +12 -12
- package/dist/Resolver.js +2 -3
- package/dist/{ResolverLight.d.ts → ResponseBuilder.d.ts} +1 -1
- package/dist/{ResolverLight.js → ResponseBuilder.js} +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/Lambder.ts +21 -14
- package/src/Resolver.ts +12 -13
- package/src/{ResolverLight.ts → ResponseBuilder.ts} +2 -36
- package/src/index.ts +1 -1
package/dist/Lambder.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
|
|
2
2
|
import Resolver from "./Resolver.js";
|
|
3
|
-
import
|
|
3
|
+
import ResponseBuilder, { ResolverResponse } from "./ResponseBuilder.js";
|
|
4
4
|
type DDBSession = {
|
|
5
5
|
userId: string;
|
|
6
6
|
userIdHash: string;
|
|
@@ -36,7 +36,7 @@ type HookBeforeRenderFunction = (renderContext: RenderContext, resolver: Resolve
|
|
|
36
36
|
type HookAfterRenderFunction = (renderContext: RenderContext, resolver: Resolver, renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
37
37
|
type HookFallbackFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse | Promise<ResolverResponse>;
|
|
38
38
|
type HookCompletedFunction = (renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
|
|
39
|
-
type GlobalErrorHandlerFunction = (err: Error, renderContext: RenderContext | null,
|
|
39
|
+
type GlobalErrorHandlerFunction = (err: Error, renderContext: RenderContext | null, response: ResponseBuilder) => ResolverResponse | Promise<ResolverResponse>;
|
|
40
40
|
type RouteFallbackHandlerFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse;
|
|
41
41
|
type ApiFallbackHandlerFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse;
|
|
42
42
|
export declare const createContext: (event: APIGatewayProxyEvent, lambdaContext: Context) => RenderContext;
|
|
@@ -71,6 +71,8 @@ export default class Lambder {
|
|
|
71
71
|
addHook(hookEvent: 'afterRender', hookFn: HookAfterRenderFunction, priority?: number): Promise<void>;
|
|
72
72
|
addHook(hookEvent: 'fallback', hookFn: HookFallbackFunction, priority?: number): Promise<void>;
|
|
73
73
|
addHook(hookEvent: 'completed', hookFn: HookCompletedFunction, priority?: number): Promise<void>;
|
|
74
|
+
getResponseBuilder(): ResponseBuilder;
|
|
75
|
+
getResolver(resolve: (renderResult: ResolverResponse) => void, reject: (err: Error) => void): Resolver;
|
|
74
76
|
render(event: APIGatewayProxyEvent, lambdaContext: Context): Promise<ResolverResponse>;
|
|
75
77
|
}
|
|
76
78
|
export {};
|
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
|
-
import
|
|
4
|
+
import ResponseBuilder from "./ResponseBuilder.js";
|
|
5
5
|
export const createContext = (event, lambdaContext) => {
|
|
6
6
|
const host = event.headers.Host || event.headers.host || "";
|
|
7
7
|
const url = event.path;
|
|
@@ -147,18 +147,30 @@ export default class Lambder {
|
|
|
147
147
|
this._hookList[hookEvent].sort((a, b) => a.priority - b.priority);
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
+
getResponseBuilder() {
|
|
151
|
+
return new ResponseBuilder({
|
|
152
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
153
|
+
publicPath: this.publicPath,
|
|
154
|
+
apiVersion: this.apiVersion,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
;
|
|
158
|
+
getResolver(resolve, reject) {
|
|
159
|
+
return new Resolver({
|
|
160
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
161
|
+
publicPath: this.publicPath,
|
|
162
|
+
apiVersion: this.apiVersion,
|
|
163
|
+
resolve, reject
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
;
|
|
150
167
|
async render(event, lambdaContext) {
|
|
151
168
|
let eventRenderContext = null;
|
|
152
169
|
try {
|
|
153
170
|
let renderContext = createContext(event, lambdaContext);
|
|
154
171
|
eventRenderContext = renderContext;
|
|
155
172
|
return await new Promise(async (resolve, reject) => {
|
|
156
|
-
const resolver =
|
|
157
|
-
isCorsEnabled: this.isCorsEnabled,
|
|
158
|
-
publicPath: this.publicPath,
|
|
159
|
-
apiVersion: this.apiVersion,
|
|
160
|
-
resolve, reject
|
|
161
|
-
});
|
|
173
|
+
const resolver = this.getResolver(resolve, reject);
|
|
162
174
|
if (renderContext.method === "OPTIONS")
|
|
163
175
|
return resolver.cors();
|
|
164
176
|
const firstMatchedAction = await (async () => {
|
|
@@ -188,14 +200,10 @@ export default class Lambder {
|
|
|
188
200
|
});
|
|
189
201
|
}
|
|
190
202
|
catch (err) {
|
|
191
|
-
const
|
|
192
|
-
isCorsEnabled: this.isCorsEnabled,
|
|
193
|
-
publicPath: this.publicPath,
|
|
194
|
-
apiVersion: this.apiVersion,
|
|
195
|
-
});
|
|
203
|
+
const responseBuilder = this.getResponseBuilder();
|
|
196
204
|
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
197
205
|
if (this.globalErrorHandler) {
|
|
198
|
-
return this.globalErrorHandler(wrappedError, eventRenderContext,
|
|
206
|
+
return this.globalErrorHandler(wrappedError, eventRenderContext, responseBuilder);
|
|
199
207
|
}
|
|
200
208
|
return { statusCode: 500, body: "Internal Server Error.", };
|
|
201
209
|
}
|
package/dist/Resolver.d.ts
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ResponseBuilder, { ResolverResponse } from "./ResponseBuilder.js";
|
|
2
2
|
type MethodType<T, M extends keyof T> = T[M] extends (...args: any[]) => any ? T[M] : never;
|
|
3
3
|
interface DieResolverMethods {
|
|
4
|
-
raw: MethodType<
|
|
5
|
-
json: MethodType<
|
|
6
|
-
xml: MethodType<
|
|
7
|
-
html: MethodType<
|
|
8
|
-
status301: MethodType<
|
|
9
|
-
status404: MethodType<
|
|
10
|
-
cors: MethodType<
|
|
11
|
-
fileBase64: MethodType<
|
|
12
|
-
file: MethodType<
|
|
13
|
-
api: MethodType<
|
|
4
|
+
raw: MethodType<ResponseBuilder, 'raw'>;
|
|
5
|
+
json: MethodType<ResponseBuilder, 'json'>;
|
|
6
|
+
xml: MethodType<ResponseBuilder, 'xml'>;
|
|
7
|
+
html: MethodType<ResponseBuilder, 'html'>;
|
|
8
|
+
status301: MethodType<ResponseBuilder, 'status301'>;
|
|
9
|
+
status404: MethodType<ResponseBuilder, 'status404'>;
|
|
10
|
+
cors: MethodType<ResponseBuilder, 'cors'>;
|
|
11
|
+
fileBase64: MethodType<ResponseBuilder, 'fileBase64'>;
|
|
12
|
+
file: MethodType<ResponseBuilder, 'file'>;
|
|
13
|
+
api: MethodType<ResponseBuilder, 'api'>;
|
|
14
14
|
}
|
|
15
|
-
export default class Resolver extends
|
|
15
|
+
export default class Resolver extends ResponseBuilder {
|
|
16
16
|
resolve: (renderResult: ResolverResponse) => void;
|
|
17
17
|
reject: (err: Error) => void;
|
|
18
18
|
die: DieResolverMethods;
|
package/dist/Resolver.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class Resolver extends
|
|
1
|
+
import ResponseBuilder from "./ResponseBuilder.js";
|
|
2
|
+
export default class Resolver extends ResponseBuilder {
|
|
3
3
|
resolve;
|
|
4
4
|
reject;
|
|
5
5
|
die;
|
|
@@ -7,7 +7,6 @@ export default class Resolver extends ResolverLight {
|
|
|
7
7
|
super({ isCorsEnabled, publicPath, apiVersion });
|
|
8
8
|
this.resolve = resolve;
|
|
9
9
|
this.reject = reject;
|
|
10
|
-
// Bind ResolverLight methods to `this` for `die` and automatically resolve
|
|
11
10
|
this.die = {
|
|
12
11
|
raw: this.autoResolve(this.raw),
|
|
13
12
|
json: this.autoResolve(this.json),
|
|
@@ -8,7 +8,7 @@ const CORS_HEADERS = convertToMultiHeader({
|
|
|
8
8
|
"Access-Control-Allow-Origin": "*",
|
|
9
9
|
"Access-Control-Allow-Methods": "OPTIONS,POST",
|
|
10
10
|
});
|
|
11
|
-
export default class
|
|
11
|
+
export default class ResponseBuilder {
|
|
12
12
|
isCorsEnabled;
|
|
13
13
|
publicPath;
|
|
14
14
|
apiVersion;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Lambder from './Lambder.js';
|
|
2
2
|
export default Lambder;
|
|
3
3
|
export { default as LambderCaller } from "./LambderCaller.js";
|
|
4
|
-
export { default as
|
|
4
|
+
export { default as ResponseBuilder } from "./ResponseBuilder.js";
|
|
5
5
|
export { default as Resolver } from "./Resolver.js";
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Lambder from './Lambder.js';
|
|
2
2
|
export default Lambder;
|
|
3
3
|
export { default as LambderCaller } from "./LambderCaller.js";
|
|
4
|
-
export { default as
|
|
4
|
+
export { default as ResponseBuilder } from "./ResponseBuilder.js";
|
|
5
5
|
export { default as Resolver } from "./Resolver.js";
|
package/package.json
CHANGED
package/src/Lambder.ts
CHANGED
|
@@ -3,7 +3,7 @@ import cookieParser from "cookie";
|
|
|
3
3
|
|
|
4
4
|
import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
|
|
5
5
|
import Resolver from "./Resolver.js";
|
|
6
|
-
import
|
|
6
|
+
import ResponseBuilder, { ResolverResponse } from "./ResponseBuilder.js";
|
|
7
7
|
|
|
8
8
|
type DDBSession = {
|
|
9
9
|
userId: string,
|
|
@@ -37,7 +37,7 @@ type HookAfterRenderFunction = (renderContext: RenderContext, resolver: Resolver
|
|
|
37
37
|
type HookFallbackFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse|Promise<ResolverResponse>;
|
|
38
38
|
type HookCompletedFunction = (renderResult: ResolverResponse) => ResolverResponse|Promise<ResolverResponse>;
|
|
39
39
|
|
|
40
|
-
type GlobalErrorHandlerFunction = (err: Error, renderContext: RenderContext|null,
|
|
40
|
+
type GlobalErrorHandlerFunction = (err: Error, renderContext: RenderContext|null, response: ResponseBuilder) => ResolverResponse|Promise<ResolverResponse>;
|
|
41
41
|
type RouteFallbackHandlerFunction = (renderContext:RenderContext, resolver: Resolver) => ResolverResponse;
|
|
42
42
|
type ApiFallbackHandlerFunction = (renderContext:RenderContext, resolver: Resolver) => ResolverResponse;
|
|
43
43
|
|
|
@@ -222,6 +222,22 @@ export default class Lambder {
|
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
+
public getResponseBuilder(){
|
|
226
|
+
return new ResponseBuilder({
|
|
227
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
228
|
+
publicPath: this.publicPath,
|
|
229
|
+
apiVersion: this.apiVersion,
|
|
230
|
+
});
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
public getResolver(resolve: (renderResult: ResolverResponse) => void, reject: (err: Error) => void){
|
|
234
|
+
return new Resolver({
|
|
235
|
+
isCorsEnabled: this.isCorsEnabled,
|
|
236
|
+
publicPath: this.publicPath,
|
|
237
|
+
apiVersion: this.apiVersion,
|
|
238
|
+
resolve, reject
|
|
239
|
+
});
|
|
240
|
+
};
|
|
225
241
|
|
|
226
242
|
async render(
|
|
227
243
|
event: APIGatewayProxyEvent,
|
|
@@ -236,12 +252,7 @@ export default class Lambder {
|
|
|
236
252
|
resolve:(renderResult: ResolverResponse)=>void,
|
|
237
253
|
reject:(err: Error)=>void
|
|
238
254
|
)=> {
|
|
239
|
-
const resolver =
|
|
240
|
-
isCorsEnabled: this.isCorsEnabled,
|
|
241
|
-
publicPath: this.publicPath,
|
|
242
|
-
apiVersion: this.apiVersion,
|
|
243
|
-
resolve, reject
|
|
244
|
-
});
|
|
255
|
+
const resolver = this.getResolver(resolve, reject);
|
|
245
256
|
if(renderContext.method === "OPTIONS") return resolver.cors();
|
|
246
257
|
|
|
247
258
|
const firstMatchedAction = await (async () => {
|
|
@@ -269,14 +280,10 @@ export default class Lambder {
|
|
|
269
280
|
return renderResult;
|
|
270
281
|
});
|
|
271
282
|
}catch(err){
|
|
272
|
-
const
|
|
273
|
-
isCorsEnabled: this.isCorsEnabled,
|
|
274
|
-
publicPath: this.publicPath,
|
|
275
|
-
apiVersion: this.apiVersion,
|
|
276
|
-
})
|
|
283
|
+
const responseBuilder = this.getResponseBuilder();
|
|
277
284
|
const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
|
|
278
285
|
if(this.globalErrorHandler){
|
|
279
|
-
return this.globalErrorHandler(wrappedError, eventRenderContext,
|
|
286
|
+
return this.globalErrorHandler(wrappedError, eventRenderContext, responseBuilder);
|
|
280
287
|
}
|
|
281
288
|
return { statusCode: 500, body: "Internal Server Error.", }
|
|
282
289
|
|
package/src/Resolver.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ResponseBuilder, { ResolverResponse } from "./ResponseBuilder.js";
|
|
2
2
|
|
|
3
3
|
type MethodType<T, M extends keyof T> = T[M] extends (...args: any[]) => any ? T[M] : never;
|
|
4
4
|
|
|
5
5
|
interface DieResolverMethods {
|
|
6
|
-
raw: MethodType<
|
|
7
|
-
json: MethodType<
|
|
8
|
-
xml: MethodType<
|
|
9
|
-
html: MethodType<
|
|
10
|
-
status301: MethodType<
|
|
11
|
-
status404: MethodType<
|
|
12
|
-
cors: MethodType<
|
|
13
|
-
fileBase64: MethodType<
|
|
14
|
-
file: MethodType<
|
|
15
|
-
api: MethodType<
|
|
6
|
+
raw: MethodType<ResponseBuilder, 'raw'>;
|
|
7
|
+
json: MethodType<ResponseBuilder, 'json'>;
|
|
8
|
+
xml: MethodType<ResponseBuilder, 'xml'>;
|
|
9
|
+
html: MethodType<ResponseBuilder, 'html'>;
|
|
10
|
+
status301: MethodType<ResponseBuilder, 'status301'>;
|
|
11
|
+
status404: MethodType<ResponseBuilder, 'status404'>;
|
|
12
|
+
cors: MethodType<ResponseBuilder, 'cors'>;
|
|
13
|
+
fileBase64: MethodType<ResponseBuilder, 'fileBase64'>;
|
|
14
|
+
file: MethodType<ResponseBuilder, 'file'>;
|
|
15
|
+
api: MethodType<ResponseBuilder, 'api'>;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export default class Resolver extends
|
|
18
|
+
export default class Resolver extends ResponseBuilder {
|
|
19
19
|
public resolve: (renderResult: ResolverResponse) => void;
|
|
20
20
|
public reject: (err: Error) => void;
|
|
21
21
|
public die: DieResolverMethods;
|
|
@@ -34,7 +34,6 @@ export default class Resolver extends ResolverLight {
|
|
|
34
34
|
this.resolve = resolve;
|
|
35
35
|
this.reject = reject;
|
|
36
36
|
|
|
37
|
-
// Bind ResolverLight methods to `this` for `die` and automatically resolve
|
|
38
37
|
this.die = {
|
|
39
38
|
raw: this.autoResolve(this.raw),
|
|
40
39
|
json: this.autoResolve(this.json),
|
|
@@ -23,7 +23,7 @@ export type ResolverResponse = {
|
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
export default class
|
|
26
|
+
export default class ResponseBuilder {
|
|
27
27
|
private isCorsEnabled: boolean;
|
|
28
28
|
private publicPath: string;
|
|
29
29
|
private apiVersion: string|null;
|
|
@@ -187,38 +187,4 @@ export default class ResolverLight {
|
|
|
187
187
|
}, headers);
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
};
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
interface IResolverMethods {
|
|
195
|
-
raw(param: {
|
|
196
|
-
statusCode: number,
|
|
197
|
-
isBase64Encoded?: boolean,
|
|
198
|
-
body: null | string,
|
|
199
|
-
multiValueHeaders: { [key: string]: string[] },
|
|
200
|
-
}): ResolverResponse;
|
|
201
|
-
json(data: { [key: string]: any }, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
202
|
-
xml(data: string): ResolverResponse;
|
|
203
|
-
html(data: string, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
204
|
-
status301(url: string, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
205
|
-
status404(data: string, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
206
|
-
cors(): ResolverResponse;
|
|
207
|
-
fileBase64(fileBase64: string, mimeType: string, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
208
|
-
file(filePath: string, headers?: { [key: string]: string | string[] }): ResolverResponse;
|
|
209
|
-
api({
|
|
210
|
-
payload,
|
|
211
|
-
versionExpired, sessionExpired, notAuthorized,
|
|
212
|
-
message, errorMessage,
|
|
213
|
-
...other
|
|
214
|
-
}: {
|
|
215
|
-
payload?: any;
|
|
216
|
-
versionExpired?: boolean;
|
|
217
|
-
sessionExpired?: boolean;
|
|
218
|
-
notAuthorized?: boolean;
|
|
219
|
-
message?: any;
|
|
220
|
-
errorMessage?: any;
|
|
221
|
-
},
|
|
222
|
-
headers?: { [key:string]: string|string[] }
|
|
223
|
-
): ResolverResponse;
|
|
224
|
-
}
|
|
190
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -2,5 +2,5 @@ import Lambder from './Lambder.js';
|
|
|
2
2
|
|
|
3
3
|
export default Lambder;
|
|
4
4
|
export { default as LambderCaller } from "./LambderCaller.js";
|
|
5
|
-
export { default as
|
|
5
|
+
export { default as ResponseBuilder } from "./ResponseBuilder.js";
|
|
6
6
|
export { default as Resolver } from "./Resolver.js";
|