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 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,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 = new 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 resolverLight = new ResolverLight({
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, 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.39",
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,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 = new 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 resolverLight = new ResolverLight({
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, resolverLight);
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 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";