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 +3 -1
- package/cjs/core/context.js +38 -5
- package/cjs/core/request.js +2 -0
- package/cjs/core/router.js +124 -13
- package/cjs/core/server.js +9 -13
- package/cjs/index.js +6 -5
- package/cjs/middleware/cacheControl.js +34 -1
- package/cjs/node/adapter.js +34 -1
- package/cjs/utils/regexRouter.js +58 -0
- package/cjs/utils/staticFile.js +35 -2
- package/cjs/ws/node.js +34 -1
- package/core/request.d.ts +6 -1
- package/core/request.js +2 -0
- package/core/router.d.ts +34 -30
- package/core/router.js +90 -12
- package/core/server.d.ts +1 -1
- package/core/server.js +9 -13
- package/helper/index.d.ts +4 -2
- package/index.d.ts +5 -4
- package/index.js +4 -4
- package/package.json +1 -1
- package/utils/regexRouter.d.ts +66 -0
- package/utils/regexRouter.js +53 -0
- package/cjs/utils/params.js +0 -94
- package/utils/params.d.ts +0 -7
- package/utils/params.js +0 -91
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
|
+
[](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/
|
|
55
|
+
import { nodeAdapter } from "tezx/node";
|
|
54
56
|
|
|
55
57
|
const app = new TezX();
|
|
56
58
|
app.use(logger());
|
package/cjs/core/context.js
CHANGED
|
@@ -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") {
|
package/cjs/core/request.js
CHANGED
|
@@ -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() {
|
package/cjs/core/router.js
CHANGED
|
@@ -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
|
|
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(
|
|
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, {
|
|
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
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
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
|
-
|
|
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
|
}
|
package/cjs/core/server.js
CHANGED
|
@@ -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
|
|
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
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const { success, params } = (0,
|
|
26
|
-
|
|
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:
|
|
33
|
-
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.#
|
|
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.
|
|
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
|
|
7
|
-
Object.defineProperty(exports, "
|
|
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.
|
|
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
|
};
|
package/cjs/node/adapter.js
CHANGED
|
@@ -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
|
+
}
|
package/cjs/utils/staticFile.js
CHANGED
|
@@ -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() {
|