lambder 1.0.13 → 1.0.15

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "editor.codeActionsOnSave": {
3
- "source.fixAll.eslint": true
3
+ "source.fixAll.eslint": "explicit"
4
4
  },
5
5
  "eslint.validate": [
6
6
  "javascript",
@@ -16,6 +16,9 @@
16
16
  "**/dist/": true,
17
17
  "**/package-lock.json": true,
18
18
  "**/.git/": true,
19
- },
19
+ },
20
+ "cSpell.words": [
21
+ "lambder"
22
+ ],
20
23
  }
21
24
 
@@ -52,7 +52,7 @@ export default class Resolver {
52
52
  private apiVersion;
53
53
  resolve: Function;
54
54
  reject: Function;
55
- die: Partial<IResolverMethods>;
55
+ die: IResolverMethods;
56
56
  constructor({ isCorsEnabled, publicPath, apiVersion, resolve, reject }: {
57
57
  isCorsEnabled: boolean;
58
58
  publicPath: string;
package/dist/Resolver.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import fs from "fs";
2
- import * as pathLibrary from "path";
2
+ import * as path from "path";
3
3
  import mimeTypeResolver from "mime-types";
4
4
  const convertToMultiHeader = (headers) => Object.fromEntries(Object.entries(headers || {}).map(([k, v]) => [k, Array.isArray(v) ? v : [v]]));
5
5
  const CORS_HEADERS = convertToMultiHeader({
@@ -21,22 +21,23 @@ export default class Resolver {
21
21
  this.apiVersion = apiVersion ?? null;
22
22
  this.resolve = resolve;
23
23
  this.reject = reject;
24
- this.die = new Proxy(this, {
25
- get: (target, prop) => {
26
- const origProp = target[prop];
27
- if (typeof origProp === 'function') {
28
- return (...args) => {
29
- this.resolve(origProp.apply(this, args));
30
- };
31
- }
32
- return origProp;
33
- }
34
- });
24
+ this.die = {
25
+ raw: this.raw,
26
+ json: this.json,
27
+ xml: this.xml,
28
+ html: this.html,
29
+ status301: this.status301,
30
+ status404: this.status404,
31
+ cors: this.cors,
32
+ fileBase64: this.fileBase64,
33
+ file: this.file,
34
+ api: this.api,
35
+ };
35
36
  }
36
37
  ;
37
38
  readFileSync(filePath) {
38
- const publicPath = pathLibrary.resolve(this.publicPath);
39
- const absolutePath = pathLibrary.join(publicPath, filePath);
39
+ const publicPath = path.resolve(this.publicPath);
40
+ const absolutePath = path.join(publicPath, filePath);
40
41
  console.log("readFileSync", { filePath, publicPath, absolutePath });
41
42
  if (!absolutePath.includes(publicPath)) {
42
43
  return "forbiddenpath";
@@ -45,8 +46,8 @@ export default class Resolver {
45
46
  }
46
47
  ;
47
48
  checkFileExist(filePath) {
48
- const publicPath = pathLibrary.resolve(this.publicPath);
49
- const absolutePath = pathLibrary.join(this.publicPath, filePath);
49
+ const publicPath = path.resolve(this.publicPath);
50
+ const absolutePath = path.join(this.publicPath, filePath);
50
51
  console.log("checkFileExist", { filePath, publicPath, absolutePath });
51
52
  if (!absolutePath.includes(publicPath)) {
52
53
  return false;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
2
2
  import Resolver, { ResolverResponse } from "./Resolver.js";
3
- type RawResolvedContext = {
3
+ type RenderContext = {
4
4
  host: string;
5
5
  url: string;
6
6
  method: string;
@@ -14,9 +14,7 @@ type RawResolvedContext = {
14
14
  [key: string]: any;
15
15
  };
16
16
  headers: APIGatewayProxyEventHeaders;
17
- };
18
- type RenderContext = RawResolvedContext & {
19
- runContext: Context;
17
+ lambdaContext: Context;
20
18
  };
21
19
  type ConditionFunction = (renderContext: RenderContext) => boolean | Promise<boolean>;
22
20
  type ActionFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse | Promise<ResolverResponse>;
@@ -25,7 +23,7 @@ type HookBeforeRenderFunction = (renderContext: RenderContext, resolver: Resolve
25
23
  type HookAfterRenderFunction = (renderContext: RenderContext, resolver: Resolver, renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
26
24
  type HookFallbackFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse | Promise<ResolverResponse>;
27
25
  type HookCompletedFunction = (renderResult: ResolverResponse) => ResolverResponse | Promise<ResolverResponse>;
28
- export declare const resolveEvent: (event: APIGatewayProxyEvent, resolve: Function, reject: Function) => RawResolvedContext;
26
+ export declare const createContext: (event: APIGatewayProxyEvent, lambdaContext: Context, resolve: Function, reject: Function) => RenderContext;
29
27
  export default class Lambder {
30
28
  private apiPath;
31
29
  private apiVersion;
@@ -53,6 +51,6 @@ export default class Lambder {
53
51
  addHook(hookEvent: 'fallback', hookFn: HookFallbackFunction, priority?: number): Promise<void>;
54
52
  addHook(hookEvent: 'completed', hookFn: HookCompletedFunction, priority?: number): Promise<void>;
55
53
  addModule(moduleFn: Function): Promise<void>;
56
- render(event: APIGatewayProxyEvent, runContext: Context): Promise<ResolverResponse>;
54
+ render(event: APIGatewayProxyEvent, lambdaContext: Context): Promise<ResolverResponse>;
57
55
  }
58
56
  export {};
package/dist/index.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
- export const resolveEvent = (event, resolve, reject) => {
4
+ export const createContext = (event, lambdaContext, resolve, reject) => {
5
5
  const host = event.headers.Host || event.headers.host || "";
6
6
  const url = event.path;
7
7
  const get = event.queryStringParameters || {};
@@ -22,7 +22,7 @@ export const resolveEvent = (event, resolve, reject) => {
22
22
  if (/^(((\d+\.)+\d+)|(([a-f\d]+:)+[a-f\d]+))$/.test(host)) {
23
23
  reject(new Error("[404] Host cannot be an ip address: " + host));
24
24
  }
25
- return { host, url, method, get, post, cookie, headers };
25
+ return { host, url, method, get, post, cookie, headers, lambdaContext };
26
26
  };
27
27
  export default class Lambder {
28
28
  apiPath;
@@ -110,7 +110,7 @@ export default class Lambder {
110
110
  async addModule(moduleFn) {
111
111
  await moduleFn(this);
112
112
  }
113
- async render(event, runContext) {
113
+ async render(event, lambdaContext) {
114
114
  return await new Promise(async (resolve, reject) => {
115
115
  const resolver = new Resolver({
116
116
  isCorsEnabled: this.isCorsEnabled,
@@ -118,8 +118,7 @@ export default class Lambder {
118
118
  apiVersion: this.apiVersion,
119
119
  resolve, reject,
120
120
  });
121
- const eventContext = resolveEvent(event, resolve, reject);
122
- let renderContext = { ...eventContext, runContext };
121
+ let renderContext = createContext(event, lambdaContext, resolve, reject);
123
122
  if (renderContext.method === "OPTIONS")
124
123
  return resolver.cors();
125
124
  let firstMatchedAction = null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lambder",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/src/Resolver.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import fs from "fs";
2
- import * as pathLibrary from "path";
2
+ import * as path from "path";
3
3
  import mimeTypeResolver from "mime-types";
4
4
 
5
5
  const convertToMultiHeader = (
@@ -49,7 +49,7 @@ export default class Resolver {
49
49
  private apiVersion: string|null;
50
50
  resolve: Function;
51
51
  reject: Function;
52
- die: Partial<IResolverMethods>;
52
+ die: IResolverMethods;
53
53
 
54
54
  constructor(
55
55
  { isCorsEnabled, publicPath, apiVersion, resolve, reject }:
@@ -66,30 +66,31 @@ export default class Resolver {
66
66
  this.apiVersion = apiVersion ?? null;
67
67
  this.resolve = resolve;
68
68
  this.reject = reject;
69
- this.die = new Proxy(this, {
70
- get: (target, prop: keyof IResolverMethods) => {
71
- const origProp = target[prop];
72
- if (typeof origProp === 'function') {
73
- return (...args: any[]) => {
74
- this.resolve((origProp as Function).apply(this, args));
75
- };
76
- }
77
- return origProp;
78
- }
79
- });
69
+ this.die = {
70
+ raw: this.raw,
71
+ json: this.json,
72
+ xml: this.xml,
73
+ html: this.html,
74
+ status301: this.status301,
75
+ status404: this.status404,
76
+ cors: this.cors,
77
+ fileBase64: this.fileBase64,
78
+ file: this.file,
79
+ api: this.api,
80
+ }
80
81
  };
81
82
 
82
83
  private readFileSync(filePath: string){
83
- const publicPath = pathLibrary.resolve(this.publicPath);
84
- const absolutePath = pathLibrary.join(publicPath, filePath);
84
+ const publicPath = path.resolve(this.publicPath);
85
+ const absolutePath = path.join(publicPath, filePath);
85
86
  console.log("readFileSync", { filePath, publicPath, absolutePath });
86
87
  if(!absolutePath.includes(publicPath)){ return "forbiddenpath"; }
87
88
  return fs.readFileSync(absolutePath);
88
89
  };
89
90
 
90
91
  private checkFileExist(filePath: string){
91
- const publicPath = pathLibrary.resolve(this.publicPath);
92
- const absolutePath = pathLibrary.join(this.publicPath, filePath);
92
+ const publicPath = path.resolve(this.publicPath);
93
+ const absolutePath = path.join(this.publicPath, filePath);
93
94
  console.log("checkFileExist", { filePath, publicPath, absolutePath });
94
95
  if(!absolutePath.includes(publicPath)){ return false; }
95
96
  return fs.existsSync(absolutePath) && fs.statSync(absolutePath).isFile();
package/src/index.ts CHANGED
@@ -4,7 +4,7 @@ import cookieParser from "cookie";
4
4
  import type { APIGatewayProxyEvent, APIGatewayProxyEventHeaders, Context } from "aws-lambda";
5
5
  import Resolver, { ResolverResponse } from "./Resolver.js";
6
6
 
7
- type RawResolvedContext = {
7
+ type RenderContext = {
8
8
  host: string;
9
9
  url: string;
10
10
  method: string;
@@ -12,12 +12,9 @@ type RawResolvedContext = {
12
12
  post: { [key: string]: any };
13
13
  cookie: { [key: string]: any };
14
14
  headers: APIGatewayProxyEventHeaders;
15
+ lambdaContext: Context;
15
16
  };
16
17
 
17
- type RenderContext = RawResolvedContext & {
18
- runContext: Context,
19
- }
20
-
21
18
  type ConditionFunction = (renderContext: RenderContext) => boolean|Promise<boolean>;
22
19
  type ActionFunction = (renderContext: RenderContext, resolver: Resolver) => ResolverResponse|Promise<ResolverResponse>;
23
20
  type ActionType = { conditionFn: ConditionFunction, actionFn: ActionFunction };
@@ -34,11 +31,12 @@ type HookListType = {
34
31
  hookFn: HookCreatedFunction|HookBeforeRenderFunction|HookAfterRenderFunction|HookFallbackFunction|HookCompletedFunction,
35
32
  }[];
36
33
 
37
- export const resolveEvent = (
34
+ export const createContext = (
38
35
  event: APIGatewayProxyEvent,
36
+ lambdaContext: Context,
39
37
  resolve: Function,
40
38
  reject: Function
41
- ):RawResolvedContext => {
39
+ ):RenderContext => {
42
40
  const host = event.headers.Host || event.headers.host || "";
43
41
  const url = event.path;
44
42
  const get: { [key:string]: any } = event.queryStringParameters || {};
@@ -52,7 +50,7 @@ export const resolveEvent = (
52
50
  catch(e){ post = querystring.parse(decodedBody) || {}; }
53
51
  }catch(e){}
54
52
  if(/^(((\d+\.)+\d+)|(([a-f\d]+:)+[a-f\d]+))$/.test(host)){ reject(new Error("[404] Host cannot be an ip address: " + host)); }
55
- return { host, url, method, get, post, cookie, headers };
53
+ return { host, url, method, get, post, cookie, headers, lambdaContext };
56
54
  }
57
55
 
58
56
 
@@ -167,7 +165,7 @@ export default class Lambder {
167
165
 
168
166
  async render(
169
167
  event: APIGatewayProxyEvent,
170
- runContext: Context
168
+ lambdaContext: Context
171
169
  ): Promise<ResolverResponse>{
172
170
  return await new Promise(async (
173
171
  resolve:(renderResult: ResolverResponse)=>void,
@@ -180,8 +178,7 @@ export default class Lambder {
180
178
  apiVersion: this.apiVersion,
181
179
  resolve, reject,
182
180
  });
183
- const eventContext:RawResolvedContext = resolveEvent(event, resolve, reject);
184
- let renderContext:RenderContext = { ...eventContext, runContext };
181
+ let renderContext:RenderContext = createContext(event, lambdaContext, resolve, reject)
185
182
 
186
183
  if(renderContext.method === "OPTIONS") return resolver.cors();
187
184