lambder 1.0.60 → 1.0.62
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 +8 -8
- package/dist/Lambder.js +2 -2
- package/dist/LambderCaller.d.ts +2 -2
- package/dist/LambderCaller.js +1 -0
- package/dist/LambderResponseBuilder.d.ts +36 -0
- package/dist/{ResponseBuilder.js → LambderResponseBuilder.js} +2 -4
- package/dist/Resolver.d.ts +14 -14
- package/dist/Resolver.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/Lambder.ts +10 -14
- package/src/LambderCaller.ts +5 -3
- package/src/{ResponseBuilder.ts → LambderResponseBuilder.ts} +22 -23
- package/src/Resolver.ts +18 -18
- package/src/index.ts +1 -1
- package/dist/ResponseBuilder.d.ts +0 -35
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 LambderResponseBuilder, { LambderResolverResponse } from "./LambderResponseBuilder.js";
|
|
4
4
|
type Path = `/${string}`;
|
|
5
5
|
type Session = {
|
|
6
6
|
userId: string;
|
|
@@ -25,14 +25,14 @@ type RenderContext = {
|
|
|
25
25
|
lambdaContext: Context;
|
|
26
26
|
};
|
|
27
27
|
type ConditionFunction = (ctx: RenderContext) => boolean;
|
|
28
|
-
type ActionFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
28
|
+
type ActionFunction = (ctx: RenderContext, resolver: Resolver) => LambderResolverResponse | Promise<LambderResolverResponse>;
|
|
29
29
|
type HookCreatedFunction = (lambderInstance: Lambder) => Promise<void>;
|
|
30
30
|
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext | Error | Promise<RenderContext | Error>;
|
|
31
|
-
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response:
|
|
31
|
+
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: LambderResolverResponse) => LambderResolverResponse | Error | Promise<LambderResolverResponse | Error>;
|
|
32
32
|
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) => void | Promise<void>;
|
|
33
|
-
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext | null, response:
|
|
34
|
-
type RouteFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
35
|
-
type ApiFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
33
|
+
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext | null, response: LambderResponseBuilder) => LambderResolverResponse | Promise<LambderResolverResponse>;
|
|
34
|
+
type RouteFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) => LambderResolverResponse;
|
|
35
|
+
type ApiFallbackHandlerFunction = (ctx: RenderContext, resolver: Resolver) => LambderResolverResponse;
|
|
36
36
|
export declare const createContext: (event: APIGatewayProxyEvent, lambdaContext: Context, apiPath?: string | null) => RenderContext;
|
|
37
37
|
export default class Lambder {
|
|
38
38
|
private apiPath;
|
|
@@ -66,8 +66,8 @@ export default class Lambder {
|
|
|
66
66
|
addHook(hookEvent: 'beforeRender', hookFn: HookBeforeRenderFunction, priority?: number): Promise<void>;
|
|
67
67
|
addHook(hookEvent: 'afterRender', hookFn: HookAfterRenderFunction, priority?: number): Promise<void>;
|
|
68
68
|
addHook(hookEvent: 'fallback', hookFn: HookFallbackFunction, priority?: number): Promise<void>;
|
|
69
|
-
getResponseBuilder():
|
|
69
|
+
getResponseBuilder(): LambderResponseBuilder;
|
|
70
70
|
private getResolver;
|
|
71
|
-
render(event: APIGatewayProxyEvent, lambdaContext: Context): Promise<
|
|
71
|
+
render(event: APIGatewayProxyEvent, lambdaContext: Context): Promise<LambderResolverResponse>;
|
|
72
72
|
}
|
|
73
73
|
export {};
|
package/dist/Lambder.js
CHANGED
|
@@ -2,7 +2,7 @@ import querystring from "querystring";
|
|
|
2
2
|
import cookieParser from "cookie";
|
|
3
3
|
import { match } from "path-to-regexp";
|
|
4
4
|
import Resolver from "./Resolver.js";
|
|
5
|
-
import
|
|
5
|
+
import LambderResponseBuilder from "./LambderResponseBuilder.js";
|
|
6
6
|
export const createContext = (event, lambdaContext, apiPath = null) => {
|
|
7
7
|
const host = event.headers.Host || event.headers.host || "";
|
|
8
8
|
const path = event.path;
|
|
@@ -175,7 +175,7 @@ export default class Lambder {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
getResponseBuilder() {
|
|
178
|
-
return new
|
|
178
|
+
return new LambderResponseBuilder({
|
|
179
179
|
isCorsEnabled: this.isCorsEnabled,
|
|
180
180
|
publicPath: this.publicPath,
|
|
181
181
|
apiVersion: this.apiVersion,
|
package/dist/LambderCaller.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ export default class LambderCaller {
|
|
|
47
47
|
fetchStartedHandler?: FetchStartEventHandler;
|
|
48
48
|
fetchEndedHandler?: FetchEndEventHandler;
|
|
49
49
|
});
|
|
50
|
-
api(apiName: string, payload?: any, headers?: Record<string, any>, options?: {
|
|
50
|
+
api<T>(apiName: string, payload?: any, headers?: Record<string, any>, options?: {
|
|
51
51
|
versionExpiredHandler?: VoidFunction;
|
|
52
52
|
sessionExpiredHandler?: VoidFunction;
|
|
53
53
|
messageHandler?: MessageHandler;
|
|
@@ -56,6 +56,6 @@ export default class LambderCaller {
|
|
|
56
56
|
errorHandler?: ErrorHandler;
|
|
57
57
|
fetchStartedHandler?: FetchStartEventHandler;
|
|
58
58
|
fetchEndedHandler?: FetchEndEventHandler;
|
|
59
|
-
}): Promise<
|
|
59
|
+
}): Promise<T | null>;
|
|
60
60
|
}
|
|
61
61
|
export {};
|
package/dist/LambderCaller.js
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type LambderResolverResponse = {
|
|
2
|
+
statusCode: number;
|
|
3
|
+
multiValueHeaders?: Record<string, string[]>;
|
|
4
|
+
body: string | null;
|
|
5
|
+
isBase64Encoded?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type LambderApiResponse<T> = {
|
|
8
|
+
payload?: T | null;
|
|
9
|
+
versionExpired?: boolean;
|
|
10
|
+
sessionExpired?: boolean;
|
|
11
|
+
notAuthorized?: boolean;
|
|
12
|
+
message?: any;
|
|
13
|
+
errorMessage?: any;
|
|
14
|
+
};
|
|
15
|
+
export default class LambderResponseBuilder {
|
|
16
|
+
private isCorsEnabled;
|
|
17
|
+
private publicPath;
|
|
18
|
+
private apiVersion;
|
|
19
|
+
constructor({ isCorsEnabled, publicPath, apiVersion }: {
|
|
20
|
+
isCorsEnabled: boolean;
|
|
21
|
+
publicPath: string;
|
|
22
|
+
apiVersion?: string | null;
|
|
23
|
+
});
|
|
24
|
+
private readFileSync;
|
|
25
|
+
private checkFileExist;
|
|
26
|
+
raw(param: LambderResolverResponse): LambderResolverResponse;
|
|
27
|
+
json(data: Record<string, any>, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
28
|
+
xml(data: string): LambderResolverResponse;
|
|
29
|
+
html(data: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
30
|
+
status301(url: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
31
|
+
status404(data: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
32
|
+
cors(): LambderResolverResponse;
|
|
33
|
+
fileBase64(fileBase64: string, mimeType: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
34
|
+
file(filePath: string, headers?: Record<string, string | string[]>, fallbackFilePath?: string): LambderResolverResponse;
|
|
35
|
+
api<T>({ payload, versionExpired, sessionExpired, notAuthorized, message, errorMessage, }: LambderApiResponse<T>, headers?: Record<string, string | string[]>): LambderResolverResponse;
|
|
36
|
+
}
|
|
@@ -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 LambderResponseBuilder {
|
|
12
12
|
isCorsEnabled;
|
|
13
13
|
publicPath;
|
|
14
14
|
apiVersion;
|
|
@@ -119,9 +119,7 @@ export default class ResponseBuilder {
|
|
|
119
119
|
return this.fileBase64(bodyBase64, mimeType || "", headers);
|
|
120
120
|
}
|
|
121
121
|
;
|
|
122
|
-
api({ payload, versionExpired, sessionExpired, notAuthorized, message = null, errorMessage = null,
|
|
123
|
-
if (Object.keys(other).length)
|
|
124
|
-
console.log("ERROR: Unexpected key in result: " + Object.keys(other).join(", "));
|
|
122
|
+
api({ payload, versionExpired, sessionExpired, notAuthorized, message = null, errorMessage = null, }, headers) {
|
|
125
123
|
return this.json({
|
|
126
124
|
apiVersion: this.apiVersion,
|
|
127
125
|
payload,
|
package/dist/Resolver.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import
|
|
1
|
+
import LambderResponseBuilder, { LambderResolverResponse } from "./LambderResponseBuilder.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<LambderResponseBuilder, 'raw'>;
|
|
5
|
+
json: MethodType<LambderResponseBuilder, 'json'>;
|
|
6
|
+
xml: MethodType<LambderResponseBuilder, 'xml'>;
|
|
7
|
+
html: MethodType<LambderResponseBuilder, 'html'>;
|
|
8
|
+
status301: MethodType<LambderResponseBuilder, 'status301'>;
|
|
9
|
+
status404: MethodType<LambderResponseBuilder, 'status404'>;
|
|
10
|
+
cors: MethodType<LambderResponseBuilder, 'cors'>;
|
|
11
|
+
fileBase64: MethodType<LambderResponseBuilder, 'fileBase64'>;
|
|
12
|
+
file: MethodType<LambderResponseBuilder, 'file'>;
|
|
13
|
+
api: MethodType<LambderResponseBuilder, 'api'>;
|
|
14
14
|
}
|
|
15
|
-
export default class Resolver extends
|
|
16
|
-
resolve: (response:
|
|
15
|
+
export default class Resolver extends LambderResponseBuilder {
|
|
16
|
+
resolve: (response: LambderResolverResponse) => void;
|
|
17
17
|
reject: (err: Error) => void;
|
|
18
18
|
die: DieResolverMethods;
|
|
19
19
|
constructor({ isCorsEnabled, publicPath, apiVersion, resolve, reject }: {
|
|
20
20
|
isCorsEnabled: boolean;
|
|
21
21
|
publicPath: string;
|
|
22
22
|
apiVersion?: string | null;
|
|
23
|
-
resolve: (response:
|
|
23
|
+
resolve: (response: LambderResolverResponse) => void;
|
|
24
24
|
reject: (err: Error) => void;
|
|
25
25
|
});
|
|
26
26
|
private autoResolve;
|
package/dist/Resolver.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class Resolver extends
|
|
1
|
+
import LambderResponseBuilder from "./LambderResponseBuilder.js";
|
|
2
|
+
export default class Resolver extends LambderResponseBuilder {
|
|
3
3
|
resolve;
|
|
4
4
|
reject;
|
|
5
5
|
die;
|
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 LambderResponseBuilder } from "./LambderResponseBuilder.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 LambderResponseBuilder } from "./LambderResponseBuilder.js";
|
|
5
5
|
export { default as Resolver } from "./Resolver.js";
|
package/package.json
CHANGED
package/src/Lambder.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { match } from "path-to-regexp";
|
|
|
4
4
|
|
|
5
5
|
import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
|
|
6
6
|
import Resolver from "./Resolver.js";
|
|
7
|
-
import
|
|
7
|
+
import LambderResponseBuilder, { LambderResolverResponse } from "./LambderResponseBuilder.js";
|
|
8
8
|
|
|
9
9
|
type Path = `/${string}`;
|
|
10
10
|
|
|
@@ -33,23 +33,19 @@ type RenderContext = {
|
|
|
33
33
|
};
|
|
34
34
|
|
|
35
35
|
type ConditionFunction = (ctx: RenderContext) => boolean;
|
|
36
|
-
type ActionFunction = (ctx: RenderContext, resolver: Resolver) =>
|
|
36
|
+
type ActionFunction = (ctx: RenderContext, resolver: Resolver) => LambderResolverResponse|Promise<LambderResolverResponse>;
|
|
37
37
|
type ActionObject = { conditionFn: ConditionFunction, actionFn: ActionFunction };
|
|
38
38
|
|
|
39
39
|
type HookCreatedFunction = (lambderInstance: Lambder) => Promise<void>;
|
|
40
40
|
type HookBeforeRenderFunction = (ctx: RenderContext, resolver: Resolver) => RenderContext|Error|Promise<RenderContext|Error>;
|
|
41
|
-
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response:
|
|
41
|
+
type HookAfterRenderFunction = (ctx: RenderContext, resolver: Resolver, response: LambderResolverResponse) => LambderResolverResponse|Error|Promise<LambderResolverResponse|Error>;
|
|
42
42
|
type HookFallbackFunction = (ctx: RenderContext, resolver: Resolver) => void|Promise<void>;
|
|
43
43
|
|
|
44
|
-
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext|null, response:
|
|
45
|
-
type RouteFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) =>
|
|
46
|
-
type ApiFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) =>
|
|
44
|
+
type GlobalErrorHandlerFunction = (err: Error, ctx: RenderContext|null, response: LambderResponseBuilder) => LambderResolverResponse|Promise<LambderResolverResponse>;
|
|
45
|
+
type RouteFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) => LambderResolverResponse;
|
|
46
|
+
type ApiFallbackHandlerFunction = (ctx:RenderContext, resolver: Resolver) => LambderResolverResponse;
|
|
47
47
|
|
|
48
48
|
type HookEventType = "created"|"beforeRender"|"afterRender"|"fallback";
|
|
49
|
-
type HookListType = {
|
|
50
|
-
priority: number,
|
|
51
|
-
hookFn: HookCreatedFunction|HookBeforeRenderFunction|HookAfterRenderFunction|HookFallbackFunction,
|
|
52
|
-
}[];
|
|
53
49
|
|
|
54
50
|
export const createContext = (
|
|
55
51
|
event: APIGatewayProxyEvent,
|
|
@@ -243,14 +239,14 @@ export default class Lambder {
|
|
|
243
239
|
}
|
|
244
240
|
|
|
245
241
|
public getResponseBuilder(){
|
|
246
|
-
return new
|
|
242
|
+
return new LambderResponseBuilder({
|
|
247
243
|
isCorsEnabled: this.isCorsEnabled,
|
|
248
244
|
publicPath: this.publicPath,
|
|
249
245
|
apiVersion: this.apiVersion,
|
|
250
246
|
});
|
|
251
247
|
};
|
|
252
248
|
|
|
253
|
-
private getResolver(resolve: (response:
|
|
249
|
+
private getResolver(resolve: (response: LambderResolverResponse) => void, reject: (err: Error) => void){
|
|
254
250
|
return new Resolver({
|
|
255
251
|
isCorsEnabled: this.isCorsEnabled,
|
|
256
252
|
publicPath: this.publicPath,
|
|
@@ -262,7 +258,7 @@ export default class Lambder {
|
|
|
262
258
|
async render(
|
|
263
259
|
event: APIGatewayProxyEvent,
|
|
264
260
|
lambdaContext: Context
|
|
265
|
-
): Promise<
|
|
261
|
+
): Promise<LambderResolverResponse>{
|
|
266
262
|
let eventRenderContext:RenderContext|null = null;
|
|
267
263
|
|
|
268
264
|
try {
|
|
@@ -270,7 +266,7 @@ export default class Lambder {
|
|
|
270
266
|
eventRenderContext = ctx;
|
|
271
267
|
|
|
272
268
|
return await new Promise(async (
|
|
273
|
-
resolve:(response:
|
|
269
|
+
resolve:(response: LambderResolverResponse)=>void,
|
|
274
270
|
reject:(err: Error)=>void
|
|
275
271
|
)=> {
|
|
276
272
|
try{
|
package/src/LambderCaller.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Cookies from 'js-cookie';
|
|
2
|
+
import { LambderApiResponse } from './LambderResponseBuilder';
|
|
2
3
|
|
|
3
4
|
type VoidFunction = ()=>void|Promise<void>;
|
|
4
5
|
type FetchTracker = { apiName: string, done: boolean, fetchEndCalled: boolean };
|
|
@@ -80,7 +81,7 @@ export default class LambderCaller {
|
|
|
80
81
|
|
|
81
82
|
};
|
|
82
83
|
|
|
83
|
-
async api(apiName: string, payload?: any, headers?: Record<string, any>, options?: {
|
|
84
|
+
async api<T>(apiName: string, payload?: any, headers?: Record<string, any>, options?: {
|
|
84
85
|
versionExpiredHandler?: VoidFunction,
|
|
85
86
|
sessionExpiredHandler?: VoidFunction,
|
|
86
87
|
messageHandler?: MessageHandler,
|
|
@@ -89,7 +90,7 @@ export default class LambderCaller {
|
|
|
89
90
|
errorHandler?: ErrorHandler,
|
|
90
91
|
fetchStartedHandler?: FetchStartEventHandler,
|
|
91
92
|
fetchEndedHandler?: FetchEndEventHandler,
|
|
92
|
-
}){
|
|
93
|
+
}): Promise<T|null>{
|
|
93
94
|
const fetchTracker: FetchTracker = { apiName, done: false, fetchEndCalled: false };
|
|
94
95
|
try {
|
|
95
96
|
this.fetchTrackerList.push(fetchTracker);
|
|
@@ -108,7 +109,7 @@ export default class LambderCaller {
|
|
|
108
109
|
}).then(res=>{
|
|
109
110
|
if(res.status >= 500) throw new Error("Request failed: " + res.status + " - " + res.statusText);
|
|
110
111
|
return res.json();
|
|
111
|
-
})
|
|
112
|
+
}) as LambderApiResponse<T>;
|
|
112
113
|
fetchTracker.done = true;
|
|
113
114
|
if(this.fetchEndedHandler){
|
|
114
115
|
fetchTracker.fetchEndCalled = true;
|
|
@@ -162,6 +163,7 @@ export default class LambderCaller {
|
|
|
162
163
|
});
|
|
163
164
|
}
|
|
164
165
|
if(this.errorHandler){ this.errorHandler(wrappedError); }
|
|
166
|
+
return null;
|
|
165
167
|
}
|
|
166
168
|
};
|
|
167
169
|
}
|
|
@@ -14,15 +14,23 @@ const CORS_HEADERS = convertToMultiHeader({
|
|
|
14
14
|
"Access-Control-Allow-Methods": "OPTIONS,POST",
|
|
15
15
|
});
|
|
16
16
|
|
|
17
|
-
export type
|
|
17
|
+
export type LambderResolverResponse = {
|
|
18
18
|
statusCode: number,
|
|
19
19
|
multiValueHeaders?: Record<string, string[]>,
|
|
20
20
|
body: string | null,
|
|
21
21
|
isBase64Encoded?: boolean,
|
|
22
22
|
};
|
|
23
23
|
|
|
24
|
+
export type LambderApiResponse<T> = {
|
|
25
|
+
payload?: T | null;
|
|
26
|
+
versionExpired?: boolean;
|
|
27
|
+
sessionExpired?: boolean;
|
|
28
|
+
notAuthorized?: boolean;
|
|
29
|
+
message?: any;
|
|
30
|
+
errorMessage?: any;
|
|
31
|
+
}
|
|
24
32
|
|
|
25
|
-
export default class
|
|
33
|
+
export default class LambderResponseBuilder {
|
|
26
34
|
private isCorsEnabled: boolean;
|
|
27
35
|
private publicPath: string;
|
|
28
36
|
private apiVersion: string|null;
|
|
@@ -56,14 +64,14 @@ export default class ResponseBuilder {
|
|
|
56
64
|
return fs.existsSync(absolutePath) && fs.statSync(absolutePath).isFile();
|
|
57
65
|
};
|
|
58
66
|
|
|
59
|
-
raw(param:
|
|
67
|
+
raw(param: LambderResolverResponse){
|
|
60
68
|
return param;
|
|
61
69
|
};
|
|
62
70
|
|
|
63
71
|
json(
|
|
64
72
|
data: Record<string, any>,
|
|
65
73
|
headers?: Record<string, string|string[]>
|
|
66
|
-
):
|
|
74
|
+
):LambderResolverResponse{
|
|
67
75
|
return this.raw({
|
|
68
76
|
statusCode: 200,
|
|
69
77
|
multiValueHeaders: {
|
|
@@ -75,7 +83,7 @@ export default class ResponseBuilder {
|
|
|
75
83
|
});
|
|
76
84
|
}
|
|
77
85
|
|
|
78
|
-
xml(data: string):
|
|
86
|
+
xml(data: string):LambderResolverResponse{
|
|
79
87
|
return this.raw({
|
|
80
88
|
statusCode: 200,
|
|
81
89
|
isBase64Encoded: true,
|
|
@@ -87,7 +95,7 @@ export default class ResponseBuilder {
|
|
|
87
95
|
html(
|
|
88
96
|
data: string,
|
|
89
97
|
headers?: Record<string, string|string[]>,
|
|
90
|
-
):
|
|
98
|
+
):LambderResolverResponse{
|
|
91
99
|
return this.raw({
|
|
92
100
|
statusCode: 200,
|
|
93
101
|
isBase64Encoded: true,
|
|
@@ -99,7 +107,7 @@ export default class ResponseBuilder {
|
|
|
99
107
|
status301(
|
|
100
108
|
url: string,
|
|
101
109
|
headers?: Record<string, string|string[]>,
|
|
102
|
-
):
|
|
110
|
+
):LambderResolverResponse{
|
|
103
111
|
return this.raw({
|
|
104
112
|
statusCode: 301,
|
|
105
113
|
multiValueHeaders: { "Location" : [url], ...convertToMultiHeader(headers) },
|
|
@@ -110,7 +118,7 @@ export default class ResponseBuilder {
|
|
|
110
118
|
status404(
|
|
111
119
|
data: string,
|
|
112
120
|
headers?: Record<string, string|string[]>,
|
|
113
|
-
):
|
|
121
|
+
):LambderResolverResponse{
|
|
114
122
|
return this.raw({
|
|
115
123
|
statusCode: 404,
|
|
116
124
|
isBase64Encoded: true,
|
|
@@ -119,7 +127,7 @@ export default class ResponseBuilder {
|
|
|
119
127
|
});
|
|
120
128
|
};
|
|
121
129
|
|
|
122
|
-
cors():
|
|
130
|
+
cors():LambderResolverResponse{
|
|
123
131
|
return this.raw({
|
|
124
132
|
statusCode: 200,
|
|
125
133
|
multiValueHeaders: this.isCorsEnabled ? CORS_HEADERS: {},
|
|
@@ -131,7 +139,7 @@ export default class ResponseBuilder {
|
|
|
131
139
|
fileBase64: string,
|
|
132
140
|
mimeType: string,
|
|
133
141
|
headers?: Record<string, string|string[]>,
|
|
134
|
-
):
|
|
142
|
+
):LambderResolverResponse{
|
|
135
143
|
return this.raw({
|
|
136
144
|
statusCode: 200,
|
|
137
145
|
isBase64Encoded: true,
|
|
@@ -144,7 +152,7 @@ export default class ResponseBuilder {
|
|
|
144
152
|
filePath: string,
|
|
145
153
|
headers?: Record<string, string|string[]>,
|
|
146
154
|
fallbackFilePath?: string,
|
|
147
|
-
):
|
|
155
|
+
):LambderResolverResponse{
|
|
148
156
|
if(!this.checkFileExist(filePath)){
|
|
149
157
|
if(fallbackFilePath && this.checkFileExist(fallbackFilePath)){
|
|
150
158
|
return this.file(fallbackFilePath, headers);
|
|
@@ -158,23 +166,14 @@ export default class ResponseBuilder {
|
|
|
158
166
|
return this.fileBase64(bodyBase64, mimeType || "", headers);
|
|
159
167
|
};
|
|
160
168
|
|
|
161
|
-
api(
|
|
169
|
+
api<T>(
|
|
162
170
|
{
|
|
163
171
|
payload,
|
|
164
172
|
versionExpired, sessionExpired, notAuthorized,
|
|
165
173
|
message = null, errorMessage = null,
|
|
166
|
-
|
|
167
|
-
}: {
|
|
168
|
-
payload?: any;
|
|
169
|
-
versionExpired?: boolean;
|
|
170
|
-
sessionExpired?: boolean;
|
|
171
|
-
notAuthorized?: boolean;
|
|
172
|
-
message?: any;
|
|
173
|
-
errorMessage?: any;
|
|
174
|
-
},
|
|
174
|
+
}: LambderApiResponse<T>,
|
|
175
175
|
headers?: Record<string, string|string[]>,
|
|
176
|
-
):
|
|
177
|
-
if(Object.keys(other).length) console.log("ERROR: Unexpected key in result: " + Object.keys(other).join(", "));
|
|
176
|
+
): LambderResolverResponse {
|
|
178
177
|
return this.json({
|
|
179
178
|
apiVersion: this.apiVersion,
|
|
180
179
|
payload,
|
package/src/Resolver.ts
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import LambderResponseBuilder, { LambderResolverResponse } from "./LambderResponseBuilder.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<LambderResponseBuilder, 'raw'>;
|
|
7
|
+
json: MethodType<LambderResponseBuilder, 'json'>;
|
|
8
|
+
xml: MethodType<LambderResponseBuilder, 'xml'>;
|
|
9
|
+
html: MethodType<LambderResponseBuilder, 'html'>;
|
|
10
|
+
status301: MethodType<LambderResponseBuilder, 'status301'>;
|
|
11
|
+
status404: MethodType<LambderResponseBuilder, 'status404'>;
|
|
12
|
+
cors: MethodType<LambderResponseBuilder, 'cors'>;
|
|
13
|
+
fileBase64: MethodType<LambderResponseBuilder, 'fileBase64'>;
|
|
14
|
+
file: MethodType<LambderResponseBuilder, 'file'>;
|
|
15
|
+
api: MethodType<LambderResponseBuilder, 'api'>;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
export default class Resolver extends
|
|
19
|
-
public resolve: (response:
|
|
18
|
+
export default class Resolver extends LambderResponseBuilder {
|
|
19
|
+
public resolve: (response: LambderResolverResponse) => void;
|
|
20
20
|
public reject: (err: Error) => void;
|
|
21
21
|
public die: DieResolverMethods;
|
|
22
22
|
|
|
@@ -26,7 +26,7 @@ export default class Resolver extends ResponseBuilder {
|
|
|
26
26
|
isCorsEnabled: boolean,
|
|
27
27
|
publicPath: string,
|
|
28
28
|
apiVersion?: string|null,
|
|
29
|
-
resolve: (response:
|
|
29
|
+
resolve: (response: LambderResolverResponse) => void,
|
|
30
30
|
reject: (err: Error) => void,
|
|
31
31
|
}
|
|
32
32
|
){
|
|
@@ -49,10 +49,10 @@ export default class Resolver extends ResponseBuilder {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
private autoResolve<
|
|
52
|
-
T extends (...args: any[]) =>
|
|
53
|
-
>(method: T): (...funcArgs: Parameters<T>) =>
|
|
54
|
-
return (...args: Parameters<T>):
|
|
55
|
-
const result:
|
|
52
|
+
T extends (...args: any[]) => LambderResolverResponse
|
|
53
|
+
>(method: T): (...funcArgs: Parameters<T>) => LambderResolverResponse {
|
|
54
|
+
return (...args: Parameters<T>): LambderResolverResponse => {
|
|
55
|
+
const result: LambderResolverResponse = method.apply(this, args);
|
|
56
56
|
this.resolve(result);
|
|
57
57
|
return result;
|
|
58
58
|
};
|
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 LambderResponseBuilder } from "./LambderResponseBuilder.js";
|
|
6
6
|
export { default as Resolver } from "./Resolver.js";
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export type ResolverResponse = {
|
|
2
|
-
statusCode: number;
|
|
3
|
-
multiValueHeaders?: Record<string, string[]>;
|
|
4
|
-
body: string | null;
|
|
5
|
-
isBase64Encoded?: boolean;
|
|
6
|
-
};
|
|
7
|
-
export default class ResponseBuilder {
|
|
8
|
-
private isCorsEnabled;
|
|
9
|
-
private publicPath;
|
|
10
|
-
private apiVersion;
|
|
11
|
-
constructor({ isCorsEnabled, publicPath, apiVersion }: {
|
|
12
|
-
isCorsEnabled: boolean;
|
|
13
|
-
publicPath: string;
|
|
14
|
-
apiVersion?: string | null;
|
|
15
|
-
});
|
|
16
|
-
private readFileSync;
|
|
17
|
-
private checkFileExist;
|
|
18
|
-
raw(param: ResolverResponse): ResolverResponse;
|
|
19
|
-
json(data: Record<string, any>, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
20
|
-
xml(data: string): ResolverResponse;
|
|
21
|
-
html(data: string, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
22
|
-
status301(url: string, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
23
|
-
status404(data: string, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
24
|
-
cors(): ResolverResponse;
|
|
25
|
-
fileBase64(fileBase64: string, mimeType: string, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
26
|
-
file(filePath: string, headers?: Record<string, string | string[]>, fallbackFilePath?: string): ResolverResponse;
|
|
27
|
-
api({ payload, versionExpired, sessionExpired, notAuthorized, message, errorMessage, ...other }: {
|
|
28
|
-
payload?: any;
|
|
29
|
-
versionExpired?: boolean;
|
|
30
|
-
sessionExpired?: boolean;
|
|
31
|
-
notAuthorized?: boolean;
|
|
32
|
-
message?: any;
|
|
33
|
-
errorMessage?: any;
|
|
34
|
-
}, headers?: Record<string, string | string[]>): ResolverResponse;
|
|
35
|
-
}
|