tezx 2.0.11 → 3.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 (234) hide show
  1. package/README.md +122 -89
  2. package/bun/getConnInfo.d.ts +21 -0
  3. package/bun/getConnInfo.js +9 -0
  4. package/bun/index.d.ts +10 -4
  5. package/bun/index.js +8 -4
  6. package/bun/ws.d.ts +48 -0
  7. package/bun/ws.js +58 -0
  8. package/cjs/bun/getConnInfo.js +12 -0
  9. package/cjs/bun/index.js +35 -7
  10. package/cjs/bun/ws.js +63 -0
  11. package/cjs/core/config.js +2 -12
  12. package/cjs/core/context.js +131 -379
  13. package/cjs/core/error.js +49 -0
  14. package/cjs/core/request.js +79 -131
  15. package/cjs/core/router.js +54 -387
  16. package/cjs/core/server.js +83 -202
  17. package/cjs/deno/env.js +4 -4
  18. package/cjs/deno/getConnInfo.js +18 -0
  19. package/cjs/deno/index.js +11 -18
  20. package/cjs/deno/serveStatic.js +53 -0
  21. package/cjs/deno/ws.js +39 -0
  22. package/cjs/helper/index.js +46 -10
  23. package/cjs/index.js +5 -7
  24. package/cjs/jwt/node.js +94 -0
  25. package/cjs/jwt/web.js +178 -0
  26. package/cjs/middleware/basic-auth.js +42 -0
  27. package/cjs/middleware/bearer-auth.js +34 -0
  28. package/cjs/middleware/cache-control.js +44 -0
  29. package/cjs/middleware/cors.js +11 -21
  30. package/cjs/middleware/detect-bot.js +57 -0
  31. package/cjs/middleware/i18n.js +73 -60
  32. package/cjs/middleware/index.js +8 -46
  33. package/cjs/middleware/logger.js +9 -4
  34. package/cjs/middleware/pagination.js +3 -2
  35. package/cjs/middleware/powered-by.js +3 -2
  36. package/cjs/middleware/rate-limiter.js +38 -0
  37. package/cjs/middleware/request-id.js +4 -5
  38. package/cjs/middleware/sanitize-headers.js +22 -0
  39. package/cjs/middleware/secure-headers copy.js +143 -0
  40. package/cjs/middleware/secure-headers.js +157 -0
  41. package/cjs/middleware/{xssProtection.js → xss-protection.js} +5 -8
  42. package/cjs/node/env.js +7 -7
  43. package/cjs/node/getConnInfo.js +16 -0
  44. package/cjs/node/index.js +17 -18
  45. package/cjs/node/mount-node.js +59 -0
  46. package/cjs/node/serveStatic.js +56 -0
  47. package/cjs/node/toWebRequest.js +25 -0
  48. package/cjs/node/ws.js +82 -0
  49. package/cjs/registry/RadixRouter.js +148 -0
  50. package/cjs/registry/index.js +17 -0
  51. package/cjs/types/headers.js +2 -0
  52. package/cjs/types/index.js +13 -0
  53. package/cjs/utils/buffer.js +17 -0
  54. package/cjs/utils/colors.js +2 -0
  55. package/cjs/utils/cookie.js +59 -0
  56. package/cjs/utils/file.js +136 -0
  57. package/cjs/utils/formData.js +60 -10
  58. package/cjs/utils/generateID.js +37 -0
  59. package/cjs/utils/low-level.js +115 -0
  60. package/cjs/utils/{staticFile.js → mimeTypes.js} +0 -87
  61. package/cjs/utils/rateLimit.js +41 -0
  62. package/cjs/utils/response.js +65 -0
  63. package/cjs/{core/environment.js → utils/runtime.js} +2 -1
  64. package/cjs/utils/url.js +65 -30
  65. package/core/config.d.ts +2 -7
  66. package/core/config.js +2 -12
  67. package/core/context.d.ts +209 -164
  68. package/core/context.js +131 -346
  69. package/core/error.d.ts +96 -0
  70. package/core/error.js +44 -0
  71. package/core/request.d.ts +67 -107
  72. package/core/request.js +78 -130
  73. package/core/router.d.ts +138 -133
  74. package/core/router.js +53 -352
  75. package/core/server.d.ts +99 -38
  76. package/core/server.js +83 -202
  77. package/deno/env.js +3 -3
  78. package/deno/getConnInfo.d.ts +21 -0
  79. package/deno/getConnInfo.js +15 -0
  80. package/deno/index.d.ts +9 -4
  81. package/deno/index.js +7 -4
  82. package/deno/serveStatic.d.ts +28 -0
  83. package/deno/serveStatic.js +49 -0
  84. package/deno/ws.d.ts +42 -0
  85. package/deno/ws.js +36 -0
  86. package/helper/index.d.ts +29 -15
  87. package/helper/index.js +27 -7
  88. package/index.d.ts +10 -8
  89. package/index.js +4 -5
  90. package/jwt/node.d.ts +39 -0
  91. package/jwt/node.js +87 -0
  92. package/jwt/web.d.ts +14 -0
  93. package/jwt/web.js +174 -0
  94. package/middleware/basic-auth.d.ts +56 -0
  95. package/middleware/basic-auth.js +38 -0
  96. package/middleware/bearer-auth.d.ts +53 -0
  97. package/middleware/bearer-auth.js +30 -0
  98. package/middleware/cache-control.d.ts +30 -0
  99. package/middleware/cache-control.js +40 -0
  100. package/middleware/cors.d.ts +30 -3
  101. package/middleware/cors.js +12 -22
  102. package/middleware/detect-bot.d.ts +113 -0
  103. package/middleware/detect-bot.js +53 -0
  104. package/middleware/i18n.d.ts +166 -73
  105. package/middleware/i18n.js +73 -60
  106. package/middleware/index.d.ts +8 -32
  107. package/middleware/index.js +8 -44
  108. package/middleware/logger.d.ts +5 -2
  109. package/middleware/logger.js +9 -4
  110. package/middleware/pagination.d.ts +9 -6
  111. package/middleware/pagination.js +3 -2
  112. package/middleware/powered-by.d.ts +2 -1
  113. package/middleware/powered-by.js +3 -2
  114. package/middleware/{rateLimiter.d.ts → rate-limiter.d.ts} +15 -9
  115. package/middleware/rate-limiter.js +34 -0
  116. package/middleware/request-id.d.ts +2 -1
  117. package/middleware/request-id.js +5 -6
  118. package/middleware/{sanitizeHeader.d.ts → sanitize-headers.d.ts} +5 -19
  119. package/middleware/sanitize-headers.js +18 -0
  120. package/middleware/secure-headers copy.d.ts +15 -0
  121. package/middleware/secure-headers copy.js +136 -0
  122. package/middleware/secure-headers.d.ts +132 -0
  123. package/middleware/secure-headers.js +153 -0
  124. package/middleware/{xssProtection.d.ts → xss-protection.d.ts} +2 -1
  125. package/middleware/xss-protection.js +19 -0
  126. package/node/env.js +4 -4
  127. package/node/getConnInfo.d.ts +21 -0
  128. package/node/getConnInfo.js +13 -0
  129. package/node/index.d.ts +13 -4
  130. package/node/index.js +11 -4
  131. package/node/mount-node.d.ts +11 -0
  132. package/node/mount-node.js +56 -0
  133. package/node/serveStatic.d.ts +36 -0
  134. package/node/serveStatic.js +52 -0
  135. package/node/toWebRequest.js +22 -0
  136. package/node/ws.d.ts +56 -0
  137. package/node/ws.js +46 -0
  138. package/package.json +39 -30
  139. package/registry/RadixRouter.d.ts +40 -0
  140. package/registry/RadixRouter.js +144 -0
  141. package/registry/index.d.ts +2 -0
  142. package/registry/index.js +1 -0
  143. package/types/headers.d.ts +2 -0
  144. package/types/headers.js +1 -0
  145. package/types/index.d.ts +318 -18
  146. package/types/index.js +12 -1
  147. package/utils/buffer.d.ts +1 -0
  148. package/utils/buffer.js +14 -0
  149. package/utils/colors.d.ts +24 -0
  150. package/utils/colors.js +2 -0
  151. package/utils/cookie.d.ts +55 -0
  152. package/utils/cookie.js +53 -0
  153. package/utils/file.d.ts +38 -0
  154. package/utils/file.js +96 -0
  155. package/utils/formData.d.ts +41 -1
  156. package/utils/formData.js +58 -9
  157. package/utils/generateID.d.ts +42 -0
  158. package/utils/generateID.js +32 -0
  159. package/utils/httpStatusMap.d.ts +14 -0
  160. package/utils/low-level.d.ts +58 -0
  161. package/utils/low-level.js +108 -0
  162. package/utils/mimeTypes.d.ts +4 -0
  163. package/utils/{staticFile.js → mimeTypes.js} +0 -53
  164. package/utils/rateLimit.d.ts +18 -0
  165. package/utils/rateLimit.js +37 -0
  166. package/utils/response.d.ts +18 -0
  167. package/utils/response.js +58 -0
  168. package/{core/environment.d.ts → utils/runtime.d.ts} +1 -0
  169. package/{core/environment.js → utils/runtime.js} +1 -0
  170. package/utils/url.d.ts +42 -14
  171. package/utils/url.js +61 -27
  172. package/bun/adapter.d.ts +0 -127
  173. package/bun/adapter.js +0 -97
  174. package/cjs/bun/adapter.js +0 -100
  175. package/cjs/core/MiddlewareConfigure.js +0 -68
  176. package/cjs/core/common.js +0 -15
  177. package/cjs/deno/adpater.js +0 -67
  178. package/cjs/helper/common.js +0 -17
  179. package/cjs/middleware/basicAuth.js +0 -71
  180. package/cjs/middleware/cacheControl.js +0 -90
  181. package/cjs/middleware/detectBot.js +0 -104
  182. package/cjs/middleware/detectLocale.js +0 -43
  183. package/cjs/middleware/lazyLoadModules.js +0 -73
  184. package/cjs/middleware/rateLimiter.js +0 -24
  185. package/cjs/middleware/requestTimeout.js +0 -42
  186. package/cjs/middleware/sanitizeHeader.js +0 -51
  187. package/cjs/middleware/secureHeaders.js +0 -42
  188. package/cjs/node/adapter.js +0 -138
  189. package/cjs/utils/regexRouter.js +0 -58
  190. package/cjs/utils/state.js +0 -34
  191. package/cjs/utils/toWebRequest.js +0 -35
  192. package/cjs/ws/deno.js +0 -20
  193. package/cjs/ws/index.js +0 -53
  194. package/cjs/ws/node.js +0 -65
  195. package/core/MiddlewareConfigure.d.ts +0 -15
  196. package/core/MiddlewareConfigure.js +0 -63
  197. package/core/common.d.ts +0 -21
  198. package/core/common.js +0 -11
  199. package/deno/adpater.d.ts +0 -38
  200. package/deno/adpater.js +0 -64
  201. package/helper/common.d.ts +0 -5
  202. package/helper/common.js +0 -14
  203. package/middleware/basicAuth.d.ts +0 -81
  204. package/middleware/basicAuth.js +0 -67
  205. package/middleware/cacheControl.d.ts +0 -48
  206. package/middleware/cacheControl.js +0 -53
  207. package/middleware/detectBot.d.ts +0 -121
  208. package/middleware/detectBot.js +0 -98
  209. package/middleware/detectLocale.d.ts +0 -55
  210. package/middleware/detectLocale.js +0 -39
  211. package/middleware/lazyLoadModules.d.ts +0 -72
  212. package/middleware/lazyLoadModules.js +0 -69
  213. package/middleware/rateLimiter.js +0 -20
  214. package/middleware/requestTimeout.d.ts +0 -25
  215. package/middleware/requestTimeout.js +0 -38
  216. package/middleware/sanitizeHeader.js +0 -47
  217. package/middleware/secureHeaders.d.ts +0 -78
  218. package/middleware/secureHeaders.js +0 -38
  219. package/middleware/xssProtection.js +0 -22
  220. package/node/adapter.d.ts +0 -46
  221. package/node/adapter.js +0 -102
  222. package/utils/regexRouter.d.ts +0 -66
  223. package/utils/regexRouter.js +0 -53
  224. package/utils/state.d.ts +0 -50
  225. package/utils/state.js +0 -30
  226. package/utils/staticFile.d.ts +0 -10
  227. package/utils/toWebRequest.js +0 -32
  228. package/ws/deno.d.ts +0 -6
  229. package/ws/deno.js +0 -16
  230. package/ws/index.d.ts +0 -180
  231. package/ws/index.js +0 -50
  232. package/ws/node.d.ts +0 -7
  233. package/ws/node.js +0 -28
  234. /package/{utils → node}/toWebRequest.d.ts +0 -0
@@ -1,65 +1,17 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.Router = exports.TrieRouter = void 0;
37
- const regexRouter_js_1 = require("../utils/regexRouter.js");
38
- const staticFile_js_1 = require("../utils/staticFile.js");
39
- const url_js_1 = require("../utils/url.js");
40
- const config_js_1 = require("./config.js");
41
- const MiddlewareConfigure_js_1 = __importStar(require("./MiddlewareConfigure.js"));
42
- class TrieRouter {
43
- children = new Map();
44
- handlers = new Map();
45
- pathname;
46
- paramName;
47
- isParam = false;
48
- constructor(pathname = "/") {
49
- this.children = new Map();
50
- this.pathname = pathname;
51
- }
52
- }
53
- exports.TrieRouter = TrieRouter;
54
- class Router extends MiddlewareConfigure_js_1.default {
55
- routers = new Map();
3
+ exports.Router = void 0;
4
+ const low_level_js_1 = require("../utils/low-level.js");
5
+ const error_js_1 = require("./error.js");
6
+ class Router {
56
7
  env = {};
57
- triRouter;
8
+ router;
9
+ route = [];
10
+ staticFile = Object.create(null);
11
+ basePath;
58
12
  constructor({ basePath = "/", env = {} } = {}) {
59
- super(basePath);
60
13
  this.basePath = basePath;
61
14
  this.env = { ...env };
62
- this.triRouter = new TrieRouter(basePath);
63
15
  this.get = this.get.bind(this);
64
16
  this.post = this.post.bind(this);
65
17
  this.put = this.put.bind(this);
@@ -68,57 +20,30 @@ class Router extends MiddlewareConfigure_js_1.default {
68
20
  this.addRouter = this.addRouter.bind(this);
69
21
  this.group = this.group.bind(this);
70
22
  }
71
- static(...args) {
72
- let route = "";
73
- let dir;
74
- let options = {};
75
- switch (args.length) {
76
- case 3:
77
- [route, dir, options] = args;
78
- break;
79
- case 2:
80
- if (typeof args[1] === "object") {
81
- [dir, options] = args;
82
- }
83
- else {
84
- [route, dir] = args;
85
- }
86
- break;
87
- case 1:
88
- [dir] = args;
89
- break;
90
- default:
91
- throw new Error(`\x1b[1;31m404 Not Found\x1b[0m \x1b[1;32mInvalid arguments\x1b[0m`);
23
+ static(serveStatic) {
24
+ if (Array.isArray(serveStatic?.files)) {
25
+ serveStatic?.files.forEach((r) => {
26
+ this.staticFile[`GET ${r?.route}`] = (ctx) => {
27
+ if (serveStatic?.options?.cacheControl) {
28
+ ctx.setHeader("Cache-Control", serveStatic?.options.cacheControl);
29
+ }
30
+ let headers = serveStatic?.options?.headers;
31
+ if (headers) {
32
+ for (const key in headers) {
33
+ let value = headers?.[key];
34
+ ctx.headers.set(key, value);
35
+ }
36
+ }
37
+ return ctx.sendFile(r.fileSource);
38
+ };
39
+ });
92
40
  }
93
- (0, staticFile_js_1.getFiles)(dir, route, this, options);
94
41
  return this;
95
42
  }
96
43
  get(path, ...args) {
97
44
  this.#registerRoute("GET", path, ...args);
98
45
  return this;
99
46
  }
100
- sse(path, handler) {
101
- this.get(path, async (ctx) => {
102
- let res = await handler(ctx);
103
- const headersMap = {};
104
- if (res instanceof Response) {
105
- for (const [key, value] of res.headers.entries()) {
106
- headersMap[key.toLowerCase()] = value;
107
- }
108
- res = res.body;
109
- }
110
- const headers = {
111
- ...headersMap,
112
- "content-type": "text/event-stream",
113
- "cache-control": "no-cache",
114
- connection: "keep-alive",
115
- };
116
- return new Response(res, {
117
- status: 200,
118
- headers,
119
- });
120
- });
121
- }
122
47
  post(path, ...args) {
123
48
  this.#registerRoute("POST", path, ...args);
124
49
  return this;
@@ -139,27 +64,26 @@ class Router extends MiddlewareConfigure_js_1.default {
139
64
  this.#registerRoute("OPTIONS", path, ...args);
140
65
  return this;
141
66
  }
142
- head(path, ...args) {
143
- this.#registerRoute("HEAD", path, ...args);
144
- return this;
145
- }
146
67
  all(path, ...args) {
147
68
  this.#registerRoute("ALL", path, ...args);
148
69
  return this;
149
70
  }
150
- addRoute(method, path, ...args) {
151
- this.#registerRoute(method, path, ...args);
71
+ when(methods, path, ...args) {
72
+ const methodList = Array.isArray(methods) ? methods : [methods];
73
+ for (const method of methodList) {
74
+ this.#registerRoute(method.toUpperCase(), path, ...args);
75
+ }
152
76
  return this;
153
77
  }
154
78
  addRouter(path, router) {
155
- return this.#routeAddTriNode(path, router);
79
+ return this.#addRouterInstance(path, router);
156
80
  }
157
81
  group(prefix, callback) {
158
82
  const router = new Router({
159
83
  basePath: prefix,
160
84
  });
161
85
  callback(router);
162
- this.#routeAddTriNode("/", router);
86
+ this.#addRouterInstance("/", router);
163
87
  return this;
164
88
  }
165
89
  use(...args) {
@@ -196,15 +120,26 @@ class Router extends MiddlewareConfigure_js_1.default {
196
120
  else if (args[0] instanceof Router) {
197
121
  router = args[0];
198
122
  }
199
- this.#addRouteMiddleware(path, middlewares);
123
+ if (middlewares?.length) {
124
+ this.#addRoute("ALL", path, middlewares);
125
+ }
200
126
  if (router && router instanceof Router) {
201
127
  this.addRouter(path, router);
202
128
  }
203
129
  return this;
204
130
  }
131
+ #addRoute(method, path, handlers) {
132
+ let pattern = `/${(0, low_level_js_1.sanitizePathSplitBasePath)(this.basePath, path).join("/")}`;
133
+ this.router?.addRoute(method, pattern, handlers);
134
+ this.route.push({
135
+ method: method,
136
+ pattern: pattern,
137
+ handlers: handlers,
138
+ });
139
+ }
205
140
  #registerRoute(method, path, ...args) {
206
141
  if (args.length === 0) {
207
- throw new Error("At least one handler is required.");
142
+ throw new error_js_1.TezXError("At least one handler is required.");
208
143
  }
209
144
  let middlewares = [];
210
145
  let callback;
@@ -221,290 +156,22 @@ class Router extends MiddlewareConfigure_js_1.default {
221
156
  callback = args[0];
222
157
  }
223
158
  if (typeof callback !== "function") {
224
- throw new Error("Route callback function is missing or invalid.");
159
+ throw new error_js_1.TezXError("Route callback function is missing or invalid.");
225
160
  }
226
161
  if (!middlewares.every((middleware) => typeof middleware === "function")) {
227
- throw new Error("Middleware must be a function or an array of functions.");
162
+ throw new error_js_1.TezXError("Middleware must be a function or an array of functions.");
228
163
  }
229
- this.#addRoute(method, path, callback, middlewares);
164
+ this.#addRoute(method, path, [...middlewares, callback]);
230
165
  }
231
- #addRoute(method, path, callback, middlewares) {
232
- let finalMiddleware = middlewares;
233
- if (!config_js_1.GlobalConfig.allowDuplicateMw) {
234
- finalMiddleware = new Set(middlewares);
235
- }
236
- if (path instanceof RegExp) {
237
- let regex = (0, regexRouter_js_1.addBaseToRegex)(this.basePath, path);
238
- let regexPath = `regex://${regex?.source}`;
239
- let handler = this.routers.get(regexPath);
240
- if (!handler) {
241
- handler = new Map();
242
- handler.set(method, {
243
- callback: callback,
244
- paramNames: [],
245
- regex: regex,
246
- middlewares: finalMiddleware,
247
- });
248
- return this.routers.set(regexPath, handler);
249
- }
250
- if (!config_js_1.GlobalConfig.overwriteMethod && handler.has(method))
251
- return;
252
- return handler.set(method, {
253
- callback: callback,
254
- paramNames: [],
255
- regex: regex,
256
- middlewares: finalMiddleware
257
- });
258
- }
259
- const parts = (0, url_js_1.sanitizePathSplit)(this.basePath, path);
260
- let p = parts.join("/");
261
- if (url_js_1.wildcardOrOptionalParamRegex.test(`/${p}`)) {
262
- let strPath = `string://${p}`;
263
- let { paramNames, regex } = (0, regexRouter_js_1.compileRegexRoute)(parts);
264
- let handler = this.routers.get(strPath);
265
- if (!handler) {
266
- handler = new Map();
267
- handler.set(method, {
268
- callback: callback,
269
- regex: regex,
270
- paramNames: paramNames,
271
- middlewares: finalMiddleware,
272
- });
273
- return this.routers.set(strPath, handler);
274
- }
275
- if (!config_js_1.GlobalConfig.overwriteMethod && handler.has(method))
276
- return;
277
- return handler.set(method, {
278
- callback: callback,
279
- regex: regex,
280
- paramNames: paramNames,
281
- middlewares: finalMiddleware
282
- });
283
- }
284
- let node = this.triRouter;
285
- for (const part of parts) {
286
- if (part.startsWith(":")) {
287
- if (!node.children.has(":")) {
288
- node.children.set(":", new TrieRouter());
289
- }
290
- node = node.children.get(":");
291
- node.isParam = true;
292
- if (!node.paramName) {
293
- node.paramName = part.slice(1);
294
- }
295
- }
296
- else {
297
- if (!node.children.has(part)) {
298
- node.children.set(part, new TrieRouter());
299
- }
300
- node = node.children.get(part);
301
- }
302
- }
303
- if (!config_js_1.GlobalConfig.overwriteMethod && node.handlers.has(method))
304
- return;
305
- node.handlers.set(method, {
306
- callback: callback,
307
- middlewares: finalMiddleware,
308
- });
309
- node.pathname = `/${p}`;
310
- }
311
- #addRouteMiddleware(path, middlewareFunctions) {
312
- this.addMiddleware(path, middlewareFunctions);
313
- }
314
- #routeAddTriNode(path, router) {
166
+ #addRouterInstance(path, router) {
315
167
  this.env = { ...this.env, ...router.env };
316
168
  if (!(router instanceof Router)) {
317
- throw new Error("Router instance is required.");
318
- }
319
- const parts = (0, url_js_1.sanitizePathSplit)(this.basePath, path);
320
- if (router.routers.size) {
321
- for (const [segment, handlers] of router.routers) {
322
- if (segment.indexOf("string://") == 0) {
323
- let pattern = segment.replace(/^string:\/\//, "");
324
- let joined = [...parts, pattern].join("/");
325
- let strPath = `string://${joined}`;
326
- if (this.routers.has(strPath)) {
327
- const baseRouter = this.routers.get(strPath);
328
- for (const [method, handler] of handlers) {
329
- let { regex, paramNames } = baseRouter?.get(method);
330
- handler.regex = regex;
331
- handler.paramNames = paramNames;
332
- if (!config_js_1.GlobalConfig.overwriteMethod && baseRouter.has(method))
333
- continue;
334
- baseRouter.set(method, handler);
335
- }
336
- }
337
- else {
338
- let h = new Map();
339
- for (const [method, { callback, middlewares }] of handlers) {
340
- let { paramNames, regex } = (0, regexRouter_js_1.compileRegexRoute)(joined);
341
- h.set(method, {
342
- callback: callback,
343
- middlewares: middlewares,
344
- paramNames,
345
- regex
346
- });
347
- }
348
- this.routers.set(strPath, h);
349
- }
350
- }
351
- else {
352
- let pattern = segment.replace("regex://", "");
353
- let base = parts?.join("/");
354
- let regex = (0, regexRouter_js_1.addBaseToRegex)(base, new RegExp(pattern));
355
- let regexPath = `regex://${regex.source}`;
356
- if (this.routers.has(regexPath)) {
357
- const baseRouter = this.routers.get(regexPath);
358
- for (const [method, handler] of handlers) {
359
- handler.regex = regex;
360
- handler.paramNames = [];
361
- if (!config_js_1.GlobalConfig.overwriteMethod && baseRouter.has(method))
362
- continue;
363
- baseRouter.set(method, handler);
364
- }
365
- }
366
- else {
367
- let h = new Map();
368
- for (const [method, { callback, middlewares }] of handlers) {
369
- h.set(method, {
370
- callback: callback,
371
- middlewares: middlewares,
372
- paramNames: [],
373
- regex
374
- });
375
- }
376
- this.routers.set(regexPath, h);
377
- }
378
- }
379
- }
380
- }
381
- let rootNode = this.triRouter;
382
- let rootMiddlewares = this.triMiddlewares;
383
- if (parts.length == 0) {
384
- this.#addMiddlewareHandlerIDsTriNode(rootNode, rootMiddlewares, router);
385
- }
386
- else {
387
- for (const part of parts) {
388
- if (part.startsWith(":")) {
389
- if (!rootNode.children.has(":")) {
390
- rootNode.children.set(":", new TrieRouter());
391
- }
392
- rootNode = rootNode.children.get(":");
393
- rootNode.isParam = true;
394
- if (!rootNode.paramName) {
395
- rootNode.paramName = part.slice(1);
396
- }
397
- }
398
- else {
399
- if (!rootNode.children.has(part)) {
400
- rootNode.children.set(part, new TrieRouter());
401
- }
402
- rootNode = rootNode.children.get(part);
403
- }
404
- }
405
- for (const part of parts) {
406
- if (part.startsWith("*")) {
407
- if (!rootMiddlewares.children.has("*")) {
408
- rootMiddlewares.children.set("*", new MiddlewareConfigure_js_1.TriMiddleware());
409
- }
410
- rootMiddlewares = rootMiddlewares.children.get("*");
411
- }
412
- else if (part.startsWith(":")) {
413
- const isOptional = part?.endsWith("?");
414
- if (isOptional) {
415
- rootMiddlewares.isOptional = isOptional;
416
- continue;
417
- }
418
- if (!rootMiddlewares.children.has(":")) {
419
- rootMiddlewares.children.set(":", new MiddlewareConfigure_js_1.TriMiddleware());
420
- }
421
- rootMiddlewares = rootMiddlewares.children.get(":");
422
- }
423
- else {
424
- if (!rootMiddlewares.children.has(part)) {
425
- rootMiddlewares.children.set(part, new MiddlewareConfigure_js_1.TriMiddleware());
426
- }
427
- rootMiddlewares = rootMiddlewares.children.get(part);
428
- }
429
- }
430
- this.#addMiddlewareHandlerIDsTriNode(rootNode, rootMiddlewares, router);
431
- }
432
- }
433
- #addMiddlewareHandlerIDsTriNode(rootNode, rootMiddlewares, router) {
434
- function addSubRouter(children, node) {
435
- let rtN = node;
436
- for (const element of children) {
437
- const pathSegment = element[0];
438
- const subRouter = element[1];
439
- if (rtN.children.has(pathSegment)) {
440
- let findNode = rtN.children.get(pathSegment);
441
- for (const [method, handlers] of subRouter.handlers) {
442
- if (!config_js_1.GlobalConfig.overwriteMethod && node.handlers.has(method))
443
- return;
444
- findNode.handlers.set(method, handlers);
445
- }
446
- if (subRouter.children.size) {
447
- addSubRouter(subRouter.children, findNode);
448
- }
449
- }
450
- else {
451
- rtN.children.set(pathSegment, subRouter);
452
- }
453
- }
454
- }
455
- let routerNode = router.triRouter;
456
- const routerMiddlewares = router.triMiddlewares;
457
- for (const [method, handlers] of routerNode.handlers) {
458
- if (!config_js_1.GlobalConfig.overwriteMethod) {
459
- rootNode.handlers.set(method, handlers);
460
- continue;
461
- }
462
- if (!rootNode.handlers.has(method)) {
463
- rootNode.handlers.set(method, handlers);
464
- }
465
- }
466
- if (routerNode.children.size > 0) {
467
- addSubRouter(routerNode.children, rootNode);
468
- }
469
- function addMiddleware(children, node) {
470
- let n = node;
471
- for (const [path, middlewareNode] of children) {
472
- if (n.children.has(path)) {
473
- let findNode = n.children.get(path);
474
- if (config_js_1.GlobalConfig.allowDuplicateMw) {
475
- findNode.middlewares.push(...middlewareNode.middlewares);
476
- }
477
- else {
478
- for (const mw of middlewareNode.middlewares) {
479
- if (findNode.middlewares.has(mw)) {
480
- middlewareNode.middlewares.delete(mw);
481
- }
482
- findNode.middlewares.add(mw);
483
- }
484
- }
485
- if (middlewareNode.children.size) {
486
- addMiddleware(middlewareNode.children, findNode);
487
- }
488
- }
489
- else {
490
- n.children.set(path, middlewareNode);
491
- }
492
- }
493
- }
494
- if (config_js_1.GlobalConfig.allowDuplicateMw) {
495
- rootMiddlewares.middlewares.push(...routerMiddlewares.middlewares);
496
- }
497
- else {
498
- for (const mw of routerMiddlewares.middlewares) {
499
- if (rootMiddlewares.middlewares.has(mw)) {
500
- routerMiddlewares.middlewares.delete(mw);
501
- }
502
- rootMiddlewares.middlewares.add(mw);
503
- }
504
- }
505
- if (routerMiddlewares.children.size > 0) {
506
- addMiddleware(routerMiddlewares.children, rootMiddlewares);
169
+ throw new error_js_1.TezXError("Router instance is required.");
507
170
  }
171
+ router.route.forEach((r) => {
172
+ this.#addRoute(r?.method, `/${(0, low_level_js_1.sanitizePathSplitBasePath)(path, r?.pattern).join("/")}`, r?.handlers);
173
+ });
174
+ Object.assign(this.staticFile, router.staticFile);
508
175
  }
509
176
  }
510
177
  exports.Router = Router;