tezx 2.0.6 → 2.0.8

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
@@ -2,6 +2,8 @@
2
2
 
3
3
  **TezX** is a cutting-edge, high-performance, and lightweight JavaScript framework designed for speed, scalability, and flexibility. Built with modern web development needs in mind, TezX enables efficient routing, middleware management, and static file serving with minimal configuration. It is fully compatible with **Node.js, Deno, and Bun**, making it a truly cross-environment framework.
4
4
 
5
+ [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tezxjs/TezX)
6
+
5
7
  ---
6
8
 
7
9
  ## 🚀 Key Features
@@ -50,7 +52,7 @@ import { TezX } from "https://deno.land/x/tezx/mod.ts";
50
52
  ```ts
51
53
  import { TezX } from "tezx";
52
54
  import { logger } from "tezx/middleware";
53
- import { nodeAdapter } from "tezx/adapter";
55
+ import { nodeAdapter } from "tezx/node";
54
56
 
55
57
  const app = new TezX();
56
58
  app.use(logger());
@@ -1,4 +1,37 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.Context = void 0;
4
37
  const state_js_1 = require("../utils/state.js");
@@ -215,7 +248,7 @@ class Context {
215
248
  let fileExists = false;
216
249
  const runtime = environment_js_1.Environment.getEnvironment;
217
250
  if (runtime === "node") {
218
- const { existsSync } = await Promise.resolve().then(() => require("node:fs"));
251
+ const { existsSync } = await Promise.resolve().then(() => __importStar(require("node:fs")));
219
252
  fileExists = existsSync(filePath);
220
253
  }
221
254
  else if (runtime === "bun") {
@@ -235,7 +268,7 @@ class Context {
235
268
  }
236
269
  let fileBuffer;
237
270
  if (runtime === "node") {
238
- const { readFileSync } = await Promise.resolve().then(() => require("node:fs"));
271
+ const { readFileSync } = await Promise.resolve().then(() => __importStar(require("node:fs")));
239
272
  fileBuffer = await readFileSync(filePath);
240
273
  }
241
274
  else if (runtime === "bun") {
@@ -265,7 +298,7 @@ class Context {
265
298
  const resolvedPath = filePath;
266
299
  let fileExists = false;
267
300
  if (runtime === "node") {
268
- const { existsSync } = await Promise.resolve().then(() => require("node:fs"));
301
+ const { existsSync } = await Promise.resolve().then(() => __importStar(require("node:fs")));
269
302
  fileExists = existsSync(resolvedPath);
270
303
  }
271
304
  else if (runtime === "bun") {
@@ -285,7 +318,7 @@ class Context {
285
318
  }
286
319
  let fileSize = 0;
287
320
  if (runtime === "node") {
288
- const { statSync } = await Promise.resolve().then(() => require("node:fs"));
321
+ const { statSync } = await Promise.resolve().then(() => __importStar(require("node:fs")));
289
322
  fileSize = statSync(resolvedPath).size;
290
323
  }
291
324
  else if (runtime === "bun") {
@@ -299,7 +332,7 @@ class Context {
299
332
  const mimeType = staticFile_js_1.mimeTypes[ext] || staticFile_js_1.defaultMimeType;
300
333
  let fileStream;
301
334
  if (runtime === "node") {
302
- const { createReadStream } = await Promise.resolve().then(() => require("node:fs"));
335
+ const { createReadStream } = await Promise.resolve().then(() => __importStar(require("node:fs")));
303
336
  fileStream = createReadStream(resolvedPath);
304
337
  }
305
338
  else if (runtime === "bun") {
@@ -6,6 +6,7 @@ const url_js_1 = require("../utils/url.js");
6
6
  class Request {
7
7
  url;
8
8
  method;
9
+ pathname;
9
10
  urlRef = {
10
11
  protocol: undefined,
11
12
  origin: undefined,
@@ -28,6 +29,7 @@ class Request {
28
29
  this.method = method;
29
30
  this.params = params;
30
31
  this.rawRequest = req;
32
+ this.pathname = parse.pathname;
31
33
  this.query = parse.query;
32
34
  }
33
35
  get headers() {
@@ -1,10 +1,44 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.Router = exports.TrieRouter = void 0;
37
+ const regexRouter_js_1 = require("../utils/regexRouter.js");
4
38
  const staticFile_js_1 = require("../utils/staticFile.js");
5
39
  const url_js_1 = require("../utils/url.js");
6
40
  const config_js_1 = require("./config.js");
7
- const MiddlewareConfigure_js_1 = require("./MiddlewareConfigure.js");
41
+ const MiddlewareConfigure_js_1 = __importStar(require("./MiddlewareConfigure.js"));
8
42
  class TrieRouter {
9
43
  children = new Map();
10
44
  handlers = new Map();
@@ -195,25 +229,57 @@ class Router extends MiddlewareConfigure_js_1.default {
195
229
  this.#addRoute(method, path, callback, middlewares);
196
230
  }
197
231
  #addRoute(method, path, callback, middlewares) {
198
- const parts = (0, url_js_1.sanitizePathSplit)(this.basePath, path);
199
232
  let finalMiddleware = middlewares;
200
233
  if (!config_js_1.GlobalConfig.allowDuplicateMw) {
201
234
  finalMiddleware = new Set(middlewares);
202
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,
254
+ paramNames: [],
255
+ regex: regex,
256
+ middlewares: finalMiddleware
257
+ });
258
+ }
259
+ const parts = (0, url_js_1.sanitizePathSplit)(this.basePath, path);
203
260
  let p = parts.join("/");
204
261
  if (url_js_1.wildcardOrOptionalParamRegex.test(`/${p}`)) {
205
- let handler = this.routers.get(p);
262
+ let strPath = `string://${p}`;
263
+ let { paramNames, regex } = (0, regexRouter_js_1.compileRegexRoute)(parts);
264
+ let handler = this.routers.get(strPath);
206
265
  if (!handler) {
207
266
  handler = new Map();
208
267
  handler.set(method, {
209
268
  callback: callback,
269
+ regex: regex,
270
+ paramNames: paramNames,
210
271
  middlewares: finalMiddleware,
211
272
  });
212
- return this.routers.set(p, handler);
273
+ return this.routers.set(strPath, handler);
213
274
  }
214
275
  if (!config_js_1.GlobalConfig.overwriteMethod && handler.has(method))
215
276
  return;
216
- return handler.set(method, { callback, middlewares: finalMiddleware });
277
+ return handler.set(method, {
278
+ callback,
279
+ regex: regex,
280
+ paramNames: paramNames,
281
+ middlewares: finalMiddleware
282
+ });
217
283
  }
218
284
  let node = this.triRouter;
219
285
  for (const part of parts) {
@@ -253,17 +319,62 @@ class Router extends MiddlewareConfigure_js_1.default {
253
319
  const parts = (0, url_js_1.sanitizePathSplit)(this.basePath, path);
254
320
  if (router.routers.size) {
255
321
  for (const [segment, handlers] of router.routers) {
256
- let path = parts.length ? parts.join("/") + "/" + segment : segment;
257
- if (this.routers.has(path)) {
258
- const baseRouter = this.routers.get(path);
259
- for (const [method, handler] of handlers) {
260
- if (!config_js_1.GlobalConfig.overwriteMethod && baseRouter.has(method))
261
- return;
262
- baseRouter.set(method, handler);
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);
263
349
  }
264
350
  }
265
351
  else {
266
- this.routers.set(path, new Map(handlers));
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
+ }
267
378
  }
268
379
  }
269
380
  }
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TezX = void 0;
4
4
  const colors_js_1 = require("../utils/colors.js");
5
5
  const httpStatusMap_js_1 = require("../utils/httpStatusMap.js");
6
- const params_js_1 = require("../utils/params.js");
6
+ const regexRouter_js_1 = require("../utils/regexRouter.js");
7
7
  const config_js_1 = require("./config.js");
8
8
  const context_js_1 = require("./context.js");
9
9
  const router_js_1 = require("./router.js");
@@ -19,18 +19,14 @@ class TezX extends router_js_1.Router {
19
19
  this.#onPathResolve = onPathResolve;
20
20
  this.serve = this.serve.bind(this);
21
21
  }
22
- #hashRouter(method, pathname) {
23
- const routers = this.routers;
24
- for (let pattern of this.routers.keys()) {
25
- const { success, params } = (0, params_js_1.useParams)({
26
- path: pathname,
27
- urlPattern: pattern,
28
- });
29
- const handlers = routers.get(pattern)?.get(method) || routers.get(pattern)?.get("ALL");
30
- if (success && handlers) {
22
+ #regexRouter(method, pathname) {
23
+ for (let pattern of this.routers.values()) {
24
+ const handler = pattern?.get(method) || pattern?.get("ALL");
25
+ const { success, params } = (0, regexRouter_js_1.regexMatchRoute)(handler?.regex, pathname, handler?.paramNames || []);
26
+ if (success && handler) {
31
27
  return {
32
- callback: handlers.callback,
33
- middlewares: handlers.middlewares,
28
+ callback: handler.callback,
29
+ middlewares: handler.middlewares,
34
30
  params: params,
35
31
  };
36
32
  }
@@ -86,7 +82,7 @@ class TezX extends router_js_1.Router {
86
82
  }
87
83
  findRoute(method, pathname) {
88
84
  const route = this.#triRouter(method, pathname) ||
89
- this.#hashRouter(method, pathname) ||
85
+ this.#regexRouter(method, pathname) ||
90
86
  this.#triRouter(method, pathname, "param");
91
87
  if (route) {
92
88
  return {
package/cjs/index.js CHANGED
@@ -1,18 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.version = exports.useParams = exports.TezX = exports.Router = void 0;
3
+ exports.version = exports.compileRegexRoute = exports.regexMatchRoute = exports.TezX = exports.Router = void 0;
4
4
  const router_js_1 = require("./core/router.js");
5
5
  const server_js_1 = require("./core/server.js");
6
- const params_js_1 = require("./utils/params.js");
7
- Object.defineProperty(exports, "useParams", { enumerable: true, get: function () { return params_js_1.useParams; } });
6
+ const regexRouter_js_1 = require("./utils/regexRouter.js");
7
+ Object.defineProperty(exports, "regexMatchRoute", { enumerable: true, get: function () { return regexRouter_js_1.regexMatchRoute; } });
8
+ Object.defineProperty(exports, "compileRegexRoute", { enumerable: true, get: function () { return regexRouter_js_1.compileRegexRoute; } });
8
9
  var router_js_2 = require("./core/router.js");
9
10
  Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_js_2.Router; } });
10
11
  var server_js_2 = require("./core/server.js");
11
12
  Object.defineProperty(exports, "TezX", { enumerable: true, get: function () { return server_js_2.TezX; } });
12
- exports.version = "2.0.6";
13
+ exports.version = "2.0.8";
13
14
  exports.default = {
14
15
  Router: router_js_1.Router,
16
+ regexMatchRoute: regexRouter_js_1.regexMatchRoute, compileRegexRoute: regexRouter_js_1.compileRegexRoute,
15
17
  TezX: server_js_1.TezX,
16
- useParams: params_js_1.useParams,
17
18
  version: exports.version,
18
19
  };
@@ -1,4 +1,37 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.cacheControl = void 0;
4
37
  const config_js_1 = require("../core/config.js");
@@ -51,7 +84,7 @@ const cacheControl = (options) => {
51
84
  };
52
85
  exports.cacheControl = cacheControl;
53
86
  const generateETag = async (content, weak = false) => {
54
- const crypto = await Promise.resolve().then(() => require("node:crypto"));
87
+ const crypto = await Promise.resolve().then(() => __importStar(require("node:crypto")));
55
88
  const hash = crypto.createHash("md5").update(content).digest("hex");
56
89
  return weak ? `W/"${hash}"` : `"${hash}"`;
57
90
  };
@@ -1,4 +1,37 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.nodeAdapter = nodeAdapter;
4
37
  const node_buffer_1 = require("node:buffer");
@@ -45,7 +78,7 @@ function nodeAdapter(TezX, options = {}) {
45
78
  res.statusMessage = statusText;
46
79
  }
47
80
  res.writeHead(response.status, [...response.headers.entries()]);
48
- const { Readable } = await Promise.resolve().then(() => require("node:stream"));
81
+ const { Readable } = await Promise.resolve().then(() => __importStar(require("node:stream")));
49
82
  const body = response.body;
50
83
  if (response.headers.get("Content-Type") === "text/event-stream") {
51
84
  req.socket.setTimeout(0);
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.compileRegexRoute = compileRegexRoute;
4
+ exports.addBaseToRegex = addBaseToRegex;
5
+ exports.regexMatchRoute = regexMatchRoute;
6
+ const url_js_1 = require("./url.js");
7
+ function compileRegexRoute(seg) {
8
+ const segments = typeof seg == 'string' ? seg.split("/").filter(Boolean) : seg;
9
+ let regexStr = "^";
10
+ const paramNames = [];
11
+ for (let seg of segments) {
12
+ if (seg.startsWith(":")) {
13
+ const isOptional = seg.endsWith("?");
14
+ const name = seg.replace(":", "").replace("?", "");
15
+ paramNames.push(name);
16
+ regexStr += isOptional
17
+ ? `(?:\\/([^\\/]+))?`
18
+ : `\\/([^\\/]+)`;
19
+ }
20
+ else if (seg.startsWith("*")) {
21
+ const name = seg.slice(1) || "*";
22
+ paramNames.push(name);
23
+ regexStr += `\\/(.+)`;
24
+ }
25
+ else {
26
+ regexStr += `\\/${seg}`;
27
+ }
28
+ }
29
+ regexStr += "\\/?$";
30
+ return {
31
+ regex: new RegExp(regexStr),
32
+ paramNames,
33
+ };
34
+ }
35
+ function addBaseToRegex(basePath, routeRegex) {
36
+ basePath = "/" + (0, url_js_1.sanitizePathSplit)("/", basePath)?.join("/");
37
+ if (basePath === "/")
38
+ basePath = "";
39
+ let body = routeRegex.source.replace(/^(\^)/, '').replace(/(\$)$/, '');
40
+ body = body.replace(/\\\//g, "/");
41
+ if (body.startsWith("/")) {
42
+ body = body.slice(1);
43
+ }
44
+ const cleaned = body.replace(/^\/+|\/+$/g, "").replace(/\/?\?$/, "");
45
+ const combined = basePath + "/" + cleaned + "/?";
46
+ const finalRegex = new RegExp(`^${combined}$`);
47
+ return finalRegex;
48
+ }
49
+ function regexMatchRoute(regex, url, paramNames) {
50
+ const match = url.match(regex);
51
+ if (!match)
52
+ return { success: false, params: {} };
53
+ const params = {};
54
+ paramNames.forEach((name, idx) => {
55
+ params[name] = match[idx + 1] ?? null;
56
+ });
57
+ return { params, success: true };
58
+ }
@@ -1,4 +1,37 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.defaultMimeType = exports.mimeTypes = void 0;
4
37
  exports.getFiles = getFiles;
@@ -126,8 +159,8 @@ async function getFiles(dir, basePath = "/", ref, option) {
126
159
  }
127
160
  }
128
161
  else {
129
- const fs = await Promise.resolve().then(() => require("node:fs/promises"));
130
- const path = await Promise.resolve().then(() => require("node:path"));
162
+ const fs = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
163
+ const path = await Promise.resolve().then(() => __importStar(require("node:path")));
131
164
  const entries = await fs.readdir(dir, { withFileTypes: true });
132
165
  for (const entry of entries) {
133
166
  const fullPath = path.join(dir, entry.name);
package/cjs/ws/node.js CHANGED
@@ -1,10 +1,43 @@
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.NodeTransport = void 0;
4
37
  class NodeTransport {
5
38
  wss;
6
39
  async upgrade(ctx, event, options) {
7
- let { WebSocketServer } = await Promise.resolve().then(() => require("ws"));
40
+ let { WebSocketServer } = await Promise.resolve().then(() => __importStar(require("ws")));
8
41
  return (ctx, server) => {
9
42
  this.wss = new WebSocketServer({
10
43
  noServer: true,
package/core/request.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { UrlRef } from "../utils/url.js";
1
+ import type { UrlRef } from "../utils/url.js";
2
2
  import { TezXServeOptions } from "./server.js";
3
3
  export type FormDataOptions = {
4
4
  maxSize?: number;
@@ -29,6 +29,11 @@ export declare class Request {
29
29
  * @type {HTTPMethod}
30
30
  */
31
31
  readonly method: HTTPMethod;
32
+ /**
33
+ * Request path without query parameters
34
+ * @type {string}
35
+ */
36
+ readonly pathname: string;
32
37
  /** Parsed URL reference containing components like query parameters, pathname, etc. */
33
38
  readonly urlRef: UrlRef;
34
39
  /** Query parameters extracted from the URL */
package/core/request.js CHANGED
@@ -3,6 +3,7 @@ import { urlParse } from "../utils/url.js";
3
3
  export class Request {
4
4
  url;
5
5
  method;
6
+ pathname;
6
7
  urlRef = {
7
8
  protocol: undefined,
8
9
  origin: undefined,
@@ -25,6 +26,7 @@ export class Request {
25
26
  this.method = method;
26
27
  this.params = params;
27
28
  this.rawRequest = req;
29
+ this.pathname = parse.pathname;
28
30
  this.query = parse.query;
29
31
  }
30
32
  get headers() {