vortez 5.0.0-dev.19 → 5.0.0

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.
Files changed (106) hide show
  1. package/.gitignore +2 -0
  2. package/README.md +26 -9
  3. package/build/Template/Compiler.d.ts +70 -0
  4. package/build/Template/Compiler.js +135 -0
  5. package/build/Template/Compiler.js.map +1 -0
  6. package/build/Template/StreamCompiler.d.ts +16 -0
  7. package/build/Template/StreamCompiler.js +54 -0
  8. package/build/Template/StreamCompiler.js.map +1 -0
  9. package/build/Template/Template.d.ts +49 -0
  10. package/build/Template/Template.js +77 -0
  11. package/build/Template/Template.js.map +1 -0
  12. package/build/Vortez.d.ts +1 -1
  13. package/build/Vortez.js +1 -1
  14. package/build/Vortez.js.map +1 -1
  15. package/build/beta/JwtManager/JwtError.d.ts +8 -0
  16. package/build/beta/JwtManager/JwtError.js +10 -0
  17. package/build/beta/JwtManager/JwtError.js.map +1 -0
  18. package/build/beta/JwtManager/JwtManager.d.ts +3 -0
  19. package/build/beta/JwtManager/JwtManager.js +24 -7
  20. package/build/beta/JwtManager/JwtManager.js.map +1 -1
  21. package/build/server/BodyParser.d.ts +6 -0
  22. package/build/server/BodyParser.js +18 -3
  23. package/build/server/BodyParser.js.map +1 -1
  24. package/build/server/Request.d.ts +6 -4
  25. package/build/server/Request.js +15 -10
  26. package/build/server/Request.js.map +1 -1
  27. package/build/server/Response.d.ts +24 -9
  28. package/build/server/Response.js +160 -74
  29. package/build/server/Response.js.map +1 -1
  30. package/build/server/Server.js +29 -6
  31. package/build/server/Server.js.map +1 -1
  32. package/build/server/config/Config.d.ts +15 -13
  33. package/build/server/config/Config.js +8 -6
  34. package/build/server/config/Config.js.map +1 -1
  35. package/build/server/config/Loader.js +1 -1
  36. package/build/server/config/Loader.js.map +1 -1
  37. package/build/server/router/Router.d.ts +1 -1
  38. package/build/server/router/Router.js +3 -3
  39. package/build/server/router/Router.js.map +1 -1
  40. package/build/server/router/middleware/HttpMiddleware.js +1 -1
  41. package/build/server/router/middleware/HttpMiddleware.js.map +1 -1
  42. package/build/server/router/middleware/WsMiddleware.js +1 -1
  43. package/build/server/router/middleware/WsMiddleware.js.map +1 -1
  44. package/build/server/security/PathSecurity.d.ts +45 -0
  45. package/build/server/security/PathSecurity.js +108 -0
  46. package/build/server/security/PathSecurity.js.map +1 -0
  47. package/build/server/websocket/Websocket.js +4 -1
  48. package/build/server/websocket/Websocket.js.map +1 -1
  49. package/build/utilities/ConsoleUI.d.ts +2 -1
  50. package/build/utilities/ConsoleUI.js +2 -1
  51. package/build/utilities/ConsoleUI.js.map +1 -1
  52. package/build/utilities/DebugUI.d.ts +1 -1
  53. package/build/utilities/DebugUI.js +1 -1
  54. package/build/utilities/Encoding.d.ts +22 -0
  55. package/build/utilities/Encoding.js +26 -0
  56. package/build/utilities/Encoding.js.map +1 -0
  57. package/build/utilities/Env.js +7 -2
  58. package/build/utilities/Env.js.map +1 -1
  59. package/build/utilities/File.d.ts +10 -0
  60. package/build/utilities/File.js +19 -0
  61. package/build/utilities/File.js.map +1 -0
  62. package/build/utilities/Flatten.d.ts +18 -1
  63. package/build/utilities/Flatten.js +18 -1
  64. package/build/utilities/Flatten.js.map +1 -1
  65. package/build/utilities/Object.d.ts +16 -0
  66. package/build/utilities/Object.js +48 -0
  67. package/build/utilities/Object.js.map +1 -0
  68. package/build/utilities/Path.d.ts +31 -11
  69. package/build/utilities/Path.js +48 -15
  70. package/build/utilities/Path.js.map +1 -1
  71. package/build/utilities/Time.d.ts +21 -0
  72. package/build/utilities/Time.js +25 -0
  73. package/build/utilities/Time.js.map +1 -0
  74. package/build/utilities/Utilities.d.ts +43 -34
  75. package/build/utilities/Utilities.js +48 -38
  76. package/build/utilities/Utilities.js.map +1 -1
  77. package/changes.md +4 -0
  78. package/docs/ARCHITECTURE.md +142 -0
  79. package/global/style/template/error.css +29 -0
  80. package/global/style/template/folder.css +79 -0
  81. package/global/{Style/Template/Template.css → style/template/template.css} +60 -68
  82. package/global/template/error.vhtml +29 -0
  83. package/global/template/folder.vhtml +54 -0
  84. package/package.json +2 -2
  85. package/build/Template.d.ts +0 -46
  86. package/build/Template.js +0 -81
  87. package/build/Template.js.map +0 -1
  88. package/global/Style/Template/Error.css +0 -30
  89. package/global/Style/Template/Folder.css +0 -77
  90. package/global/Template/Error.vhtml +0 -29
  91. package/global/Template/Folder.vhtml +0 -41
  92. package/tests/Template/template.js +0 -18
  93. package/tests/Template/template.txt +0 -13
  94. package/tests/Template/template.vhtml +0 -23
  95. package/tests/config/config.js +0 -233
  96. package/tests/debug.js +0 -34
  97. package/tests/jwtManager/jwtManager.js +0 -342
  98. package/tests/router.js +0 -596
  99. package/tests/schema/schema.js +0 -368
  100. package/tests/test.env +0 -0
  101. package/tests/test.js +0 -131
  102. package/tests/test.vhtml +0 -14
  103. package/tests/utilities.js +0 -28
  104. package/tests/websocket.vhtml +0 -86
  105. /package/global/{Source/Logo_960.png → source/logo_960.png} +0 -0
  106. /package/global/{Source/Logo_SM_960.png → source/logo_SM_960.png} +0 -0
@@ -3,11 +3,13 @@ import _Algorithm from "./algorithm/Algorithm.js";
3
3
  import _JwtUtils from "./JwtUtils.js";
4
4
  import _KeyEntry from "./KeyEntry.js";
5
5
  import _Jwt from "./Jwt.js";
6
+ import _JwtError from "./JwtError.js";
6
7
  export { KeyGenerator } from "./KeyGenerator.js";
7
8
  export { Algorithm } from "./algorithm/Algorithm.js";
8
9
  export { JwtUtils } from "./JwtUtils.js";
9
10
  export { KeyEntry as KIDEntry } from "./KeyEntry.js";
10
11
  export { Jwt } from "./Jwt.js";
12
+ export { JwtError } from "./JwtError.js";
11
13
  export class JwtManager {
12
14
  KIDMap = {};
13
15
  defaultEntry;
@@ -45,28 +47,42 @@ export class JwtManager {
45
47
  const kid = header.kid || this.defaultEntry.kid;
46
48
  const entry = this.KIDMap[kid];
47
49
  if (!entry)
48
- throw new Error(`No key found for kid: ${kid}`);
50
+ throw new JwtManager.JwtError('KEY_NOT_FOUND', `No key found for kid: ${kid}`);
49
51
  const { signer, alg } = entry;
50
52
  header = { ...header, alg, kid, typ: 'jwt' };
51
53
  const encodedHeader = JwtManager.JwtUtils.objectToBase64Url(header);
52
54
  const encodedPayload = JwtManager.JwtUtils.objectToBase64Url(payload);
53
55
  const content = `${encodedHeader}.${encodedPayload}`;
54
- const signature = signer.sign(content);
56
+ let signature = '';
57
+ try {
58
+ signature = signer.sign(content);
59
+ }
60
+ catch (error) {
61
+ throw new JwtManager.JwtError('SIGN_FAILED', 'Failed to sign token', { cause: error });
62
+ }
55
63
  return `${content}.${signature}`;
56
64
  }
57
65
  parse(token) {
58
- const { header, payload, signature, encodedHeader, encodedPayload } = JwtManager.JwtUtils.getJwtParts(token);
66
+ let tokenParts;
67
+ try {
68
+ tokenParts = JwtManager.JwtUtils.getJwtParts(token);
69
+ }
70
+ catch (error) {
71
+ throw new JwtManager.JwtError('TOKEN_INVALID', 'Invalid token', { cause: error });
72
+ }
73
+ const { header, payload, signature, encodedHeader, encodedPayload } = tokenParts;
59
74
  const kid = header.kid || this.defaultEntry.kid;
60
75
  const entry = this.KIDMap[kid];
61
76
  if (!entry)
62
- throw new Error(`No key found for kid: ${kid}`);
77
+ throw new JwtManager.JwtError('KEY_NOT_FOUND', `No key found for kid: ${kid}`);
63
78
  const signer = entry.signer;
64
79
  const content = `${encodedHeader}.${encodedPayload}`;
65
- if (!signer.verify(content, signature))
66
- throw new Error('Invalid signature');
80
+ if (!signer.verify(content, signature)) {
81
+ throw new JwtManager.JwtError('INVALID_SIGNATURE', 'Invalid signature');
82
+ }
67
83
  const jwt = new JwtManager.Jwt(header, payload, signature, signer);
68
84
  if (jwt.expired)
69
- throw new Error('Token has expired');
85
+ throw new JwtManager.JwtError('TOKEN_EXPIRED', 'Token has expired');
70
86
  return jwt;
71
87
  }
72
88
  // toJSON(): object { return { algorithm: this.algorithmName }; }
@@ -90,6 +106,7 @@ export class JwtManager {
90
106
  JwtManager.JwtUtils = _JwtUtils;
91
107
  JwtManager.KeyEntry = _KeyEntry;
92
108
  JwtManager.Jwt = _Jwt;
109
+ JwtManager.JwtError = _JwtError;
93
110
  })(JwtManager || (JwtManager = {}));
94
111
  export default JwtManager;
95
112
  //# sourceMappingURL=JwtManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JwtManager.js","sourceRoot":"","sources":["../../../src/beta/JwtManager/JwtManager.ts"],"names":[],"mappings":"AACA,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,SAAS,MAAM,eAAe,CAAC;AACtC,OAAO,IAAI,MAAM,UAAU,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,OAAO,UAAU;IACT,MAAM,GAAsB,EAAE,CAAC;IAC/B,YAAY,CAAsB;IAE5C,YACI,KAA2B,EAC3B,GAAG,OAA+B;QAElC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACrD,OAAO,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,OAAO,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAChD,CAAC;IACD;;;;;OAKG;IACI,MAAM,CAAC,KAA2B;QACrC,MAAM,QAAQ,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IACzC,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,GAAW,IAAU,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D;;;;;;OAMG;IACI,IAAI,CAAC,OAA+B,EAAE,SAAyC,EAAE;QACpF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAE5D,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAE9B,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAE7C,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,GAAG,aAAa,IAAI,cAAc,EAAE,CAAC;QAErD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvC,OAAO,GAAG,OAAO,IAAI,SAAS,EAAE,CAAC;IACrC,CAAC;IACM,KAAK,CAAC,KAAa;QACtB,MAAM,EACF,MAAM,EAAE,OAAO,EAAE,SAAS,EAC1B,aAAa,EAAE,cAAc,EAChC,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,EAAE,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,aAAa,IAAI,cAAc,EAAE,CAAC;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAE7E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,GAAG,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAEtD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,iEAAiE;IACjE,oFAAoF;IAEpF;;;;;OAKG;IACI,MAAM,CAAC,cAAc,CAAC,KAA2B;QACpD,IAAI,KAAK,YAAY,UAAU,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QACvD,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;QAC3C,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;CACJ;AACD,WAAiB,UAAU;IACT,oBAAS,GAAG,UAAU,CAAC;IACvB,uBAAY,GAAG,aAAa,CAAC;IAC7B,mBAAQ,GAAG,SAAS,CAAC;IACrB,mBAAQ,GAAG,SAAS,CAAC;IACrB,cAAG,GAAG,IAAI,CAAC;AAM7B,CAAC,EAXgB,UAAU,KAAV,UAAU,QAW1B;AACD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"JwtManager.js","sourceRoot":"","sources":["../../../src/beta/JwtManager/JwtManager.ts"],"names":[],"mappings":"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"}
@@ -59,6 +59,12 @@ export declare class BodyParser {
59
59
  * @param body - The request body.
60
60
  */
61
61
  private inferBoundary;
62
+ /**
63
+ * Safely decodes a URI component, returning the original value if decoding fails.
64
+ * @param value - The value to decode.
65
+ * @returns The decoded value or the original if decoding fails.
66
+ */
67
+ private safeDecodeURIComponent;
62
68
  }
63
69
  export declare namespace BodyParser {
64
70
  namespace Body {
@@ -41,8 +41,9 @@ export class BodyParser {
41
41
  this.httpRequest.on('end', () => resolve(Buffer.concat(chunks)));
42
42
  this.httpRequest.on('error', (error) => reject(Error('fail parsing request body', { cause: error })));
43
43
  this.httpRequest.on('data', (chunk) => {
44
- if (chunks.length > 1e+8)
45
- return void this.httpRequest.destroy();
44
+ const size = chunks.reduce((total, current) => total + current.length, 0) + chunk.length;
45
+ if (size > 1e+8)
46
+ return void this.httpRequest.destroy(Error('Request body is too large'));
46
47
  chunks.push(chunk);
47
48
  });
48
49
  });
@@ -90,7 +91,8 @@ export class BodyParser {
90
91
  const fragments = decoded.split('&');
91
92
  fragments.forEach((pair) => {
92
93
  const [key, value] = pair.split('=');
93
- content[decodeURIComponent(key)] = decodeURIComponent(value);
94
+ const normalizedKey = this.safeDecodeURIComponent(key.replace(/\+/g, ' '));
95
+ content[normalizedKey] = this.safeDecodeURIComponent((value ?? '').replace(/\+/g, ' '));
94
96
  });
95
97
  return {
96
98
  mimeType: 'application/x-www-form-urlencoded',
@@ -157,6 +159,19 @@ export class BodyParser {
157
159
  return null;
158
160
  return result[1];
159
161
  }
162
+ /**
163
+ * Safely decodes a URI component, returning the original value if decoding fails.
164
+ * @param value - The value to decode.
165
+ * @returns The decoded value or the original if decoding fails.
166
+ */
167
+ safeDecodeURIComponent(value) {
168
+ try {
169
+ return decodeURIComponent(value);
170
+ }
171
+ catch {
172
+ return value;
173
+ }
174
+ }
160
175
  }
161
176
  export default BodyParser;
162
177
  //# sourceMappingURL=BodyParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BodyParser.js","sourceRoot":"","sources":["../../src/server/BodyParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BodyParser.js","sourceRoot":"","sources":["../../src/server/BodyParser.ts"],"names":[],"mappings":"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"}
@@ -13,15 +13,15 @@ export declare class Request {
13
13
  headers: Request.Headers;
14
14
  /** Contains the request cookies. */
15
15
  cookies: Cookie;
16
- /** Contains the POST data sent. */
16
+ /** Contains the query string parameters sent. */
17
17
  searchParams: Request.SearchParams;
18
18
  /** Contains the IP address of the requester. */
19
19
  ip?: string | string[];
20
20
  /** Contains the request method. */
21
21
  method: Request.Method;
22
- /** Contains the POSTParser. */
23
- session: Session;
24
22
  /** Contains the session of the device that made the request. */
23
+ session: Session;
24
+ /** Contains the request body parser. */
25
25
  private body;
26
26
  /** Contains the HTTP request received by the server. */
27
27
  private httpRequest;
@@ -45,6 +45,7 @@ export declare class Request {
45
45
  * @param Url - The URL received from the HTTP request.
46
46
  */
47
47
  private getSearchParams;
48
+ private normalizeUrl;
48
49
  }
49
50
  export declare namespace Request {
50
51
  export import BodyParser = _BodyParser;
@@ -58,6 +59,7 @@ export declare namespace Request {
58
59
  }
59
60
  interface SearchParams extends Document {
60
61
  }
61
- type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'ALL';
62
+ type KnownMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'ALL';
63
+ type Method = KnownMethod | (string & {});
62
64
  }
63
65
  export default Request;
@@ -13,15 +13,15 @@ export class Request {
13
13
  headers;
14
14
  /** Contains the request cookies. */
15
15
  cookies;
16
- /** Contains the POST data sent. */
16
+ /** Contains the query string parameters sent. */
17
17
  searchParams;
18
18
  /** Contains the IP address of the requester. */
19
19
  ip;
20
20
  /** Contains the request method. */
21
21
  method;
22
- /** Contains the POSTParser. */
23
- session;
24
22
  /** Contains the session of the device that made the request. */
23
+ session;
24
+ /** Contains the request body parser. */
25
25
  body;
26
26
  /** Contains the HTTP request received by the server. */
27
27
  httpRequest;
@@ -37,12 +37,12 @@ export class Request {
37
37
  const forwardedIP = httpRequest.headers['x-forwarded-for'];
38
38
  const remoteIP = httpRequest.socket.remoteAddress;
39
39
  const method = httpRequest.method ?? 'GET';
40
- const url = httpRequest.url ?? '/';
40
+ let url = httpRequest.url ?? '/';
41
41
  this.httpRequest = httpRequest;
42
42
  this.ip = forwardedIP ? forwardedIP : remoteIP ? remoteIP : '0.0.0.0';
43
43
  this.method = this.getMethod(method);
44
44
  this.url = url.split('?')[0];
45
- this.url = decodeURI(this.url.endsWith('/') ? this.url : this.url + '/');
45
+ this.url = this.normalizeUrl(this.url);
46
46
  this.headers = httpRequest.headers;
47
47
  this.cookies = new Cookie(this.headers.cookie);
48
48
  this.session = Session.get(this.cookies);
@@ -55,11 +55,9 @@ export class Request {
55
55
  * @param method - The method used for the request.
56
56
  */
57
57
  getMethod(method) {
58
- return method == 'POST'
59
- ? 'POST'
60
- : method == 'PUT' ? 'PUT'
61
- : method == 'DELETE' ? 'DELETE'
62
- : 'GET';
58
+ method = method.trim().toUpperCase();
59
+ method = method.length > 0 ? method : 'GET';
60
+ return method;
63
61
  }
64
62
  /**
65
63
  * Retrieves the data sent via URL QUERY.
@@ -71,6 +69,13 @@ export class Request {
71
69
  UrlObject.searchParams.forEach((value, name) => searchParams[name] = value);
72
70
  return searchParams;
73
71
  }
72
+ normalizeUrl(url) {
73
+ url = url.split('?')[0];
74
+ url = decodeURI(url.endsWith('/') ? url : url + '/');
75
+ url = url.length > 1 && url.endsWith('/') ? url.slice(0, -1) : url;
76
+ url = url.startsWith('/') ? url : '/' + url;
77
+ return url;
78
+ }
74
79
  }
75
80
  (function (Request) {
76
81
  Request.BodyParser = _BodyParser;
@@ -1 +1 @@
1
- {"version":3,"file":"Request.js","sourceRoot":"","sources":["../../src/server/Request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Request.js","sourceRoot":"","sources":["../../src/server/Request.ts"],"names":[],"mappings":"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"}
@@ -5,9 +5,13 @@
5
5
  */
6
6
  import HTTP from 'http';
7
7
  import FS from 'fs';
8
+ import { Readable } from 'stream';
8
9
  import Request from './Request.js';
9
10
  import Config from './config/Config.js';
10
11
  export declare class Response {
12
+ static readonly contentTypeMap: Response.contentTypeMap;
13
+ static readonly acceptRangeFormats: string[];
14
+ private static readonly version;
11
15
  /** Contains the request received by the server. */
12
16
  request: Request;
13
17
  /** Contains the list of server response templates. */
@@ -29,7 +33,7 @@ export declare class Response {
29
33
  * More types will be supported over time.
30
34
  * @param extension - The file extension.
31
35
  */
32
- generateHeaders(extension: string): Request.Headers;
36
+ generateHeaders(extension: string): HTTP.OutgoingHttpHeaders;
33
37
  /**
34
38
  * Sends response headers.
35
39
  * @param code - The HTTP status code.
@@ -41,7 +45,17 @@ export declare class Response {
41
45
  * @param data - The data to be sent.
42
46
  * @param encode - The encoding used for the response.
43
47
  */
44
- send(data: Response.data, options?: Response.options): void;
48
+ send(data: Response.data, options?: Response.options): Promise<void>;
49
+ /**
50
+ * Sends a readable stream as a response.
51
+ * @param data - The readable stream to be sent.
52
+ * @param options - The response options.
53
+ * @throws If an error occurs while sending the stream.
54
+ * @returns A promise that resolves when the stream has been sent.
55
+ * @remarks This method is used for sending large data, such as files or templates, without loading them entirely into memory.
56
+ * It handles backpressure and ensures efficient streaming of data to the client.
57
+ */
58
+ private sendReadable;
45
59
  /**
46
60
  * Sends a file as a response.
47
61
  * @param path - The file path to send.
@@ -51,11 +65,11 @@ export declare class Response {
51
65
  sendFile(path: string, options?: Response.options): Promise<void>;
52
66
  /**
53
67
  * Sends the listing of a folder as a response.
54
- * @param basePath - The routing rule base path.
55
- * @param relativePath - The relative path received in the request.
68
+ * @param base - The routing rule base path.
69
+ * @param plus - The relative path received in the request.
56
70
  * @throws If the folder does not exist or is invalid.
57
71
  */
58
- sendFolder(basePath: string, relativePath: string): Promise<void>;
72
+ sendFolder(base: string, plus?: string): Promise<void>;
59
73
  /**
60
74
  * Sends a `.vhtml` template as a response.
61
75
  * @param path - The template file path.
@@ -69,25 +83,26 @@ export declare class Response {
69
83
  * @param data - The data to send.
70
84
  * @param options - The response options.
71
85
  */
72
- sendJson(data: any, options?: Response.options): void;
86
+ sendJson(data: any, options?: Response.options): Promise<void>;
73
87
  /**
74
88
  * Sends an error as a response.
75
89
  * @param status - The HTTP status code of the error.
76
90
  * @param message - The error message.
77
91
  */
78
92
  sendError(status: number, message: string): Promise<void>;
79
- private fileExist;
93
+ private getFsErrorStatus;
94
+ private static loadVersion;
80
95
  }
81
96
  export declare namespace Response {
82
97
  interface options {
83
98
  status?: number;
84
- headers?: Request.Headers;
99
+ headers?: HTTP.OutgoingHttpHeaders;
85
100
  encode?: BufferEncoding;
86
101
  }
87
102
  interface contentTypeMap {
88
103
  [key: string]: string | undefined;
89
104
  }
90
- type data = string | Buffer | FS.ReadStream;
105
+ type data = string | Buffer | Readable | FS.ReadStream;
91
106
  type Extensions = ('HTML' | 'JS' | 'CSS' | 'JSON' | 'XML' | 'TXT' | 'SVG' | 'PNG' | 'JPG' | 'JPEG' | 'MP3' | 'WAV' | 'MP4');
92
107
  }
93
108
  export default Response;