lambder 1.0.38 → 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 CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
2
2
  import Resolver from "./Resolver.js";
3
- import ResolverLight, { ResolverResponse } from "./ResolverLight.js";
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, resolver: ResolverLight) => ResolverResponse | Promise<ResolverResponse>;
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 ResolverLight from "./ResolverLight.js";
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,23 +147,30 @@ export default class Lambder {
147
147
  this._hookList[hookEvent].sort((a, b) => a.priority - b.priority);
148
148
  }
149
149
  }
150
- async render(event, lambdaContext) {
151
- let eventRenderContext = null;
152
- const resolverLight = new ResolverLight({
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({
153
160
  isCorsEnabled: this.isCorsEnabled,
154
161
  publicPath: this.publicPath,
155
162
  apiVersion: this.apiVersion,
163
+ resolve, reject
156
164
  });
165
+ }
166
+ ;
167
+ async render(event, lambdaContext) {
168
+ let eventRenderContext = null;
157
169
  try {
158
170
  let renderContext = createContext(event, lambdaContext);
159
171
  eventRenderContext = renderContext;
160
172
  return await new Promise(async (resolve, reject) => {
161
- const resolver = new Resolver({
162
- isCorsEnabled: this.isCorsEnabled,
163
- publicPath: this.publicPath,
164
- apiVersion: this.apiVersion,
165
- resolve, reject
166
- });
173
+ const resolver = this.getResolver(resolve, reject);
167
174
  if (renderContext.method === "OPTIONS")
168
175
  return resolver.cors();
169
176
  const firstMatchedAction = await (async () => {
@@ -193,9 +200,10 @@ export default class Lambder {
193
200
  });
194
201
  }
195
202
  catch (err) {
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, resolverLight);
206
+ return this.globalErrorHandler(wrappedError, eventRenderContext, responseBuilder);
199
207
  }
200
208
  return { statusCode: 500, body: "Internal Server Error.", };
201
209
  }
@@ -1,18 +1,18 @@
1
- import ResolverLight, { ResolverResponse } from "./ResolverLight.js";
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<ResolverLight, 'raw'>;
5
- json: MethodType<ResolverLight, 'json'>;
6
- xml: MethodType<ResolverLight, 'xml'>;
7
- html: MethodType<ResolverLight, 'html'>;
8
- status301: MethodType<ResolverLight, 'status301'>;
9
- status404: MethodType<ResolverLight, 'status404'>;
10
- cors: MethodType<ResolverLight, 'cors'>;
11
- fileBase64: MethodType<ResolverLight, 'fileBase64'>;
12
- file: MethodType<ResolverLight, 'file'>;
13
- api: MethodType<ResolverLight, 'api'>;
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 ResolverLight {
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 ResolverLight from "./ResolverLight.js";
2
- export default class Resolver extends ResolverLight {
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),
@@ -7,7 +7,7 @@ export type ResolverResponse = {
7
7
  isBase64Encoded?: boolean;
8
8
  [key: string]: any;
9
9
  };
10
- export default class ResolverLight {
10
+ export default class ResponseBuilder {
11
11
  private isCorsEnabled;
12
12
  private publicPath;
13
13
  private apiVersion;
@@ -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 ResolverLight {
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 ResolverLight } from "./ResolverLight.js";
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 ResolverLight } from "./ResolverLight.js";
4
+ export { default as ResponseBuilder } from "./ResponseBuilder.js";
5
5
  export { default as Resolver } from "./Resolver.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lambder",
3
- "version": "1.0.38",
3
+ "version": "1.0.40",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
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 ResolverLight, { ResolverResponse } from "./ResolverLight.js";
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, resolver: ResolverLight) => ResolverResponse|Promise<ResolverResponse>;
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,18 +222,28 @@ 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,
228
244
  lambdaContext: Context
229
245
  ): Promise<ResolverResponse>{
230
246
  let eventRenderContext:RenderContext|null = null;
231
- const resolverLight = new ResolverLight({
232
- isCorsEnabled: this.isCorsEnabled,
233
- publicPath: this.publicPath,
234
- apiVersion: this.apiVersion,
235
- })
236
-
237
247
  try {
238
248
  let renderContext = createContext(event, lambdaContext);
239
249
  eventRenderContext = renderContext;
@@ -242,12 +252,7 @@ export default class Lambder {
242
252
  resolve:(renderResult: ResolverResponse)=>void,
243
253
  reject:(err: Error)=>void
244
254
  )=> {
245
- const resolver = new Resolver({
246
- isCorsEnabled: this.isCorsEnabled,
247
- publicPath: this.publicPath,
248
- apiVersion: this.apiVersion,
249
- resolve, reject
250
- });
255
+ const resolver = this.getResolver(resolve, reject);
251
256
  if(renderContext.method === "OPTIONS") return resolver.cors();
252
257
 
253
258
  const firstMatchedAction = await (async () => {
@@ -275,9 +280,10 @@ export default class Lambder {
275
280
  return renderResult;
276
281
  });
277
282
  }catch(err){
283
+ const responseBuilder = this.getResponseBuilder();
278
284
  const wrappedError = err instanceof Error ? err : new Error("Error: " + String(err));
279
285
  if(this.globalErrorHandler){
280
- return this.globalErrorHandler(wrappedError, eventRenderContext, resolverLight);
286
+ return this.globalErrorHandler(wrappedError, eventRenderContext, responseBuilder);
281
287
  }
282
288
  return { statusCode: 500, body: "Internal Server Error.", }
283
289
 
package/src/Resolver.ts CHANGED
@@ -1,21 +1,21 @@
1
- import ResolverLight, { ResolverResponse } from "./ResolverLight.js";
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<ResolverLight, 'raw'>;
7
- json: MethodType<ResolverLight, 'json'>;
8
- xml: MethodType<ResolverLight, 'xml'>;
9
- html: MethodType<ResolverLight, 'html'>;
10
- status301: MethodType<ResolverLight, 'status301'>;
11
- status404: MethodType<ResolverLight, 'status404'>;
12
- cors: MethodType<ResolverLight, 'cors'>;
13
- fileBase64: MethodType<ResolverLight, 'fileBase64'>;
14
- file: MethodType<ResolverLight, 'file'>;
15
- api: MethodType<ResolverLight, 'api'>;
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 ResolverLight {
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 ResolverLight {
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 ResolverLight } from "./ResolverLight.js";
5
+ export { default as ResponseBuilder } from "./ResponseBuilder.js";
6
6
  export { default as Resolver } from "./Resolver.js";