lambder 1.0.138 → 1.0.140

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/Readme.md CHANGED
@@ -435,7 +435,7 @@ lambder.addApi("getCompanyName", async (ctx, res) => {
435
435
  return res.die.status404(data, headers);
436
436
  return res.die.cors();
437
437
  return res.die.fileBase64(fileBase64, mimeType, headers);
438
- return res.die.file(filePath, headers, fallbackFilePath);
438
+ return await res.die.file(filePath, headers, fallbackFilePath);
439
439
  return await res.die.ejsFile(filePath, pageData, headers);
440
440
  return await res.die.ejsTemplate(template, pageData, headers);
441
441
  return res.die.api(payload, { versionExpired, sessionExpired, notAuthorized, message, errorMessage }, headers);
@@ -16,7 +16,7 @@ export default class LambderResolver extends LambderResponseBuilder {
16
16
  status404: this.autoResolve(this.status404),
17
17
  cors: this.autoResolve(this.cors),
18
18
  fileBase64: this.autoResolve(this.fileBase64),
19
- file: this.autoResolve(this.file),
19
+ file: this.autoResolvePromise(this.file),
20
20
  ejsFile: this.autoResolvePromise(this.ejsFile),
21
21
  ejsTemplate: this.autoResolvePromise(this.ejsTemplate),
22
22
  api: this.autoResolve(this.api),
@@ -44,7 +44,7 @@ export default class LambderResponseBuilder<TContract extends ApiContractShape =
44
44
  status404(data: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
45
45
  cors(): LambderResolverResponse;
46
46
  fileBase64(fileBase64: string, mimeType: string, headers?: Record<string, string | string[]>): LambderResolverResponse;
47
- file(filePath: string, headers?: Record<string, string | string[]>, fallbackFilePath?: string): LambderResolverResponse;
47
+ file(filePath: string, headers?: Record<string, string | string[]>, fallbackFilePath?: string): Promise<LambderResolverResponse>;
48
48
  ejsTemplate(template: string, pageData: Record<string, any>, headers?: Record<string, string | string[]>): Promise<LambderResolverResponse>;
49
49
  ejsFile(filePath: string, pageData: Record<string, any>, headers?: Record<string, string | string[]>): Promise<LambderResolverResponse>;
50
50
  api<T = any>(payload: T | null, { versionExpired, sessionExpired, notAuthorized, message, errorMessage, logList, }?: LambderApiResponseConfig, headers?: Record<string, string | string[]>): LambderResolverResponse;
@@ -21,9 +21,9 @@ export default class LambderResponseBuilder {
21
21
  this.ctx = ctx;
22
22
  }
23
23
  ;
24
- readPublicFileSync(filePath) {
25
- const fs = getFS();
26
- const path = getPath();
24
+ async readPublicFileSync(filePath) {
25
+ const fs = await getFS();
26
+ const path = await getPath();
27
27
  if (!fs || !path) {
28
28
  throw new Error("File system operations are not available in browser environment");
29
29
  }
@@ -36,9 +36,9 @@ export default class LambderResponseBuilder {
36
36
  return fs.readFileSync(absolutePath);
37
37
  }
38
38
  ;
39
- checkPublicFileExist(filePath) {
40
- const fs = getFS();
41
- const path = getPath();
39
+ async checkPublicFileExist(filePath) {
40
+ const fs = await getFS();
41
+ const path = await getPath();
42
42
  if (!fs || !path) {
43
43
  return false;
44
44
  }
@@ -144,15 +144,17 @@ export default class LambderResponseBuilder {
144
144
  });
145
145
  }
146
146
  ;
147
- file(filePath, headers, fallbackFilePath) {
148
- if (!this.checkPublicFileExist(filePath)) {
149
- if (fallbackFilePath && this.checkPublicFileExist(fallbackFilePath)) {
150
- return this.file(fallbackFilePath, headers);
147
+ async file(filePath, headers, fallbackFilePath) {
148
+ const doesFileExist = await this.checkPublicFileExist(filePath);
149
+ if (!doesFileExist && fallbackFilePath) {
150
+ const doesFallbackExist = await this.checkPublicFileExist(fallbackFilePath);
151
+ if (doesFallbackExist) {
152
+ return await this.file(fallbackFilePath, headers);
151
153
  }
152
154
  return this.json({ error: "File not found: " + filePath });
153
155
  }
154
156
  const mimeType = mimeTypeResolver.lookup(filePath);
155
- const body = this.readPublicFileSync(filePath);
157
+ const body = await this.readPublicFileSync(filePath);
156
158
  if (body === "forbidden-public-path") {
157
159
  throw { error: "Forbidden public path: " + filePath };
158
160
  }
@@ -6,9 +6,9 @@ export default class LambderUtils {
6
6
  this.ejsPath = ejsPath;
7
7
  }
8
8
  ;
9
- readEjsFileSync(filePath) {
10
- const fs = getFS();
11
- const path = getPath();
9
+ async readEjsFileSync(filePath) {
10
+ const fs = await getFS();
11
+ const path = await getPath();
12
12
  if (!fs || !path) {
13
13
  throw new Error("File system operations are not available in browser environment");
14
14
  }
@@ -24,9 +24,9 @@ export default class LambderUtils {
24
24
  return String(fs.readFileSync(absolutePath));
25
25
  }
26
26
  ;
27
- checkEjsFileExist(filePath) {
28
- const fs = getFS();
29
- const path = getPath();
27
+ async checkEjsFileExist(filePath) {
28
+ const fs = await getFS();
29
+ const path = await getPath();
30
30
  if (!fs || !path) {
31
31
  return false;
32
32
  }
@@ -52,10 +52,11 @@ export default class LambderUtils {
52
52
  }
53
53
  ;
54
54
  async renderEjsFile(filePath, pageData) {
55
- if (!this.checkEjsFileExist(filePath)) {
55
+ const doesFileExist = await this.checkEjsFileExist(filePath);
56
+ if (!doesFileExist) {
56
57
  return "File not found: " + filePath;
57
58
  }
58
- const template = this.readEjsFileSync(filePath);
59
+ const template = await this.readEjsFileSync(filePath);
59
60
  return this.renderEjs(template, pageData);
60
61
  }
61
62
  ;
@@ -1,2 +1,2 @@
1
- export declare function getFS(): any;
2
- export declare function getPath(): any;
1
+ export declare function getFS(): Promise<any>;
2
+ export declare function getPath(): Promise<any>;
@@ -2,24 +2,29 @@
2
2
  // This file provides optional Node.js modules that fail gracefully in browser environments
3
3
  let fs = null;
4
4
  let path = null;
5
- // Try to import Node.js modules if available
6
- try {
7
- // @ts-ignore - conditional import
8
- if (typeof process !== 'undefined' && process.versions?.node) {
9
- // Use eval to prevent bundlers from trying to resolve these at build time
10
- const requireFunc = eval('typeof require !== "undefined" ? require : null');
11
- if (requireFunc) {
12
- fs = requireFunc('fs');
13
- path = requireFunc('path');
5
+ export async function getFS() {
6
+ try {
7
+ if (fs) {
8
+ return fs;
14
9
  }
10
+ fs = await import('fs');
11
+ return fs;
12
+ }
13
+ catch (e) {
14
+ // Silently fail - we're in a browser environment
15
+ return null;
15
16
  }
16
17
  }
17
- catch (e) {
18
- // Silently fail - we're in a browser environment
19
- }
20
- export function getFS() {
21
- return fs;
22
- }
23
- export function getPath() {
24
- return path;
18
+ export async function getPath() {
19
+ try {
20
+ if (path) {
21
+ return path;
22
+ }
23
+ path = await import('path');
24
+ return path;
25
+ }
26
+ catch (e) {
27
+ // Silently fail - we're in a browser environment
28
+ return null;
29
+ }
25
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lambder",
3
- "version": "1.0.138",
3
+ "version": "1.0.140",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -57,7 +57,7 @@ export default class LambderResolver<
57
57
  status404: this.autoResolve(this.status404),
58
58
  cors: this.autoResolve(this.cors),
59
59
  fileBase64: this.autoResolve(this.fileBase64),
60
- file: this.autoResolve(this.file),
60
+ file: this.autoResolvePromise(this.file),
61
61
  ejsFile: this.autoResolvePromise(this.ejsFile),
62
62
  ejsTemplate: this.autoResolvePromise(this.ejsTemplate),
63
63
  api: this.autoResolve(this.api),
@@ -61,9 +61,9 @@ export default class LambderResponseBuilder<TContract extends ApiContractShape =
61
61
  this.ctx = ctx;
62
62
  };
63
63
 
64
- private readPublicFileSync(filePath: string){
65
- const fs = getFS();
66
- const path = getPath();
64
+ private async readPublicFileSync(filePath: string){
65
+ const fs = await getFS();
66
+ const path = await getPath();
67
67
 
68
68
  if (!fs || !path) {
69
69
  throw new Error("File system operations are not available in browser environment");
@@ -76,13 +76,11 @@ export default class LambderResponseBuilder<TContract extends ApiContractShape =
76
76
  return fs.readFileSync(absolutePath);
77
77
  };
78
78
 
79
- private checkPublicFileExist(filePath: string){
80
- const fs = getFS();
81
- const path = getPath();
79
+ private async checkPublicFileExist(filePath: string){
80
+ const fs = await getFS();
81
+ const path = await getPath();
82
82
 
83
- if (!fs || !path) {
84
- return false;
85
- }
83
+ if (!fs || !path) { return false; }
86
84
 
87
85
  const publicPath = path.resolve(this.publicPath);
88
86
  const absolutePath = path.join(this.publicPath, filePath);
@@ -199,19 +197,21 @@ export default class LambderResponseBuilder<TContract extends ApiContractShape =
199
197
  });
200
198
  };
201
199
 
202
- file(
200
+ async file(
203
201
  filePath: string,
204
202
  headers?: Record<string, string|string[]>,
205
203
  fallbackFilePath?: string,
206
- ):LambderResolverResponse{
207
- if(!this.checkPublicFileExist(filePath)){
208
- if(fallbackFilePath && this.checkPublicFileExist(fallbackFilePath)){
209
- return this.file(fallbackFilePath, headers);
204
+ ):Promise<LambderResolverResponse>{
205
+ const doesFileExist = await this.checkPublicFileExist(filePath);
206
+ if(!doesFileExist && fallbackFilePath){
207
+ const doesFallbackExist = await this.checkPublicFileExist(fallbackFilePath);
208
+ if(doesFallbackExist){
209
+ return await this.file(fallbackFilePath, headers);
210
210
  }
211
211
  return this.json({ error: "File not found: " + filePath })
212
212
  }
213
213
  const mimeType = mimeTypeResolver.lookup(filePath);
214
- const body = this.readPublicFileSync(filePath);
214
+ const body = await this.readPublicFileSync(filePath);
215
215
  if (body === "forbidden-public-path") {
216
216
  throw { error: "Forbidden public path: " + filePath };
217
217
  }
@@ -12,9 +12,9 @@ export default class LambderUtils {
12
12
  this.ejsPath = ejsPath;
13
13
  };
14
14
 
15
- private readEjsFileSync(filePath: string){
16
- const fs = getFS();
17
- const path = getPath();
15
+ private async readEjsFileSync(filePath: string){
16
+ const fs = await getFS();
17
+ const path = await getPath();
18
18
 
19
19
  if (!fs || !path) {
20
20
  throw new Error("File system operations are not available in browser environment");
@@ -27,9 +27,9 @@ export default class LambderUtils {
27
27
  return String(fs.readFileSync(absolutePath));
28
28
  };
29
29
 
30
- private checkEjsFileExist(filePath: string){
31
- const fs = getFS();
32
- const path = getPath();
30
+ private async checkEjsFileExist(filePath: string){
31
+ const fs = await getFS();
32
+ const path = await getPath();
33
33
 
34
34
  if (!fs || !path) {
35
35
  return false;
@@ -59,10 +59,11 @@ export default class LambderUtils {
59
59
  filePath: string,
60
60
  pageData: Record<string, any>,
61
61
  ):Promise<string>{
62
- if(!this.checkEjsFileExist(filePath)){
62
+ const doesFileExist = await this.checkEjsFileExist(filePath);
63
+ if(!doesFileExist){
63
64
  return "File not found: " + filePath;
64
65
  }
65
- const template = this.readEjsFileSync(filePath);
66
+ const template = await this.readEjsFileSync(filePath);
66
67
  return this.renderEjs(template, pageData);
67
68
  };
68
69
 
@@ -4,25 +4,24 @@
4
4
  let fs: any = null;
5
5
  let path: any = null;
6
6
 
7
- // Try to import Node.js modules if available
8
- try {
9
- // @ts-ignore - conditional import
10
- if (typeof process !== 'undefined' && process.versions?.node) {
11
- // Use eval to prevent bundlers from trying to resolve these at build time
12
- const requireFunc = eval('typeof require !== "undefined" ? require : null');
13
- if (requireFunc) {
14
- fs = requireFunc('fs');
15
- path = requireFunc('path');
16
- }
7
+ export async function getFS(): Promise<any> {
8
+ try {
9
+ if(fs){ return fs; }
10
+ fs = await import('fs');
11
+ return fs;
12
+ } catch (e) {
13
+ // Silently fail - we're in a browser environment
14
+ return null;
17
15
  }
18
- } catch (e) {
19
- // Silently fail - we're in a browser environment
20
16
  }
21
17
 
22
- export function getFS() {
23
- return fs;
24
- }
25
-
26
- export function getPath() {
27
- return path;
18
+ export async function getPath(): Promise<any> {
19
+ try {
20
+ if(path){ return path; }
21
+ path = await import('path');
22
+ return path;
23
+ } catch (e) {
24
+ // Silently fail - we're in a browser environment
25
+ return null;
26
+ }
28
27
  }