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.
- package/README.md +122 -89
- package/bun/getConnInfo.d.ts +21 -0
- package/bun/getConnInfo.js +9 -0
- package/bun/index.d.ts +10 -4
- package/bun/index.js +8 -4
- package/bun/ws.d.ts +48 -0
- package/bun/ws.js +58 -0
- package/cjs/bun/getConnInfo.js +12 -0
- package/cjs/bun/index.js +35 -7
- package/cjs/bun/ws.js +63 -0
- package/cjs/core/config.js +2 -12
- package/cjs/core/context.js +131 -379
- package/cjs/core/error.js +49 -0
- package/cjs/core/request.js +79 -131
- package/cjs/core/router.js +54 -387
- package/cjs/core/server.js +83 -202
- package/cjs/deno/env.js +4 -4
- package/cjs/deno/getConnInfo.js +18 -0
- package/cjs/deno/index.js +11 -18
- package/cjs/deno/serveStatic.js +53 -0
- package/cjs/deno/ws.js +39 -0
- package/cjs/helper/index.js +46 -10
- package/cjs/index.js +5 -7
- package/cjs/jwt/node.js +94 -0
- package/cjs/jwt/web.js +178 -0
- package/cjs/middleware/basic-auth.js +42 -0
- package/cjs/middleware/bearer-auth.js +34 -0
- package/cjs/middleware/cache-control.js +44 -0
- package/cjs/middleware/cors.js +11 -21
- package/cjs/middleware/detect-bot.js +57 -0
- package/cjs/middleware/i18n.js +73 -60
- package/cjs/middleware/index.js +8 -46
- package/cjs/middleware/logger.js +9 -4
- package/cjs/middleware/pagination.js +3 -2
- package/cjs/middleware/powered-by.js +3 -2
- package/cjs/middleware/rate-limiter.js +38 -0
- package/cjs/middleware/request-id.js +4 -5
- package/cjs/middleware/sanitize-headers.js +22 -0
- package/cjs/middleware/secure-headers copy.js +143 -0
- package/cjs/middleware/secure-headers.js +157 -0
- package/cjs/middleware/{xssProtection.js → xss-protection.js} +5 -8
- package/cjs/node/env.js +7 -7
- package/cjs/node/getConnInfo.js +16 -0
- package/cjs/node/index.js +17 -18
- package/cjs/node/mount-node.js +59 -0
- package/cjs/node/serveStatic.js +56 -0
- package/cjs/node/toWebRequest.js +25 -0
- package/cjs/node/ws.js +82 -0
- package/cjs/registry/RadixRouter.js +148 -0
- package/cjs/registry/index.js +17 -0
- package/cjs/types/headers.js +2 -0
- package/cjs/types/index.js +13 -0
- package/cjs/utils/buffer.js +17 -0
- package/cjs/utils/colors.js +2 -0
- package/cjs/utils/cookie.js +59 -0
- package/cjs/utils/file.js +136 -0
- package/cjs/utils/formData.js +60 -10
- package/cjs/utils/generateID.js +37 -0
- package/cjs/utils/low-level.js +115 -0
- package/cjs/utils/{staticFile.js → mimeTypes.js} +0 -87
- package/cjs/utils/rateLimit.js +41 -0
- package/cjs/utils/response.js +65 -0
- package/cjs/{core/environment.js → utils/runtime.js} +2 -1
- package/cjs/utils/url.js +65 -30
- package/core/config.d.ts +2 -7
- package/core/config.js +2 -12
- package/core/context.d.ts +209 -164
- package/core/context.js +131 -346
- package/core/error.d.ts +96 -0
- package/core/error.js +44 -0
- package/core/request.d.ts +67 -107
- package/core/request.js +78 -130
- package/core/router.d.ts +138 -133
- package/core/router.js +53 -352
- package/core/server.d.ts +99 -38
- package/core/server.js +83 -202
- package/deno/env.js +3 -3
- package/deno/getConnInfo.d.ts +21 -0
- package/deno/getConnInfo.js +15 -0
- package/deno/index.d.ts +9 -4
- package/deno/index.js +7 -4
- package/deno/serveStatic.d.ts +28 -0
- package/deno/serveStatic.js +49 -0
- package/deno/ws.d.ts +42 -0
- package/deno/ws.js +36 -0
- package/helper/index.d.ts +29 -15
- package/helper/index.js +27 -7
- package/index.d.ts +10 -8
- package/index.js +4 -5
- package/jwt/node.d.ts +39 -0
- package/jwt/node.js +87 -0
- package/jwt/web.d.ts +14 -0
- package/jwt/web.js +174 -0
- package/middleware/basic-auth.d.ts +56 -0
- package/middleware/basic-auth.js +38 -0
- package/middleware/bearer-auth.d.ts +53 -0
- package/middleware/bearer-auth.js +30 -0
- package/middleware/cache-control.d.ts +30 -0
- package/middleware/cache-control.js +40 -0
- package/middleware/cors.d.ts +30 -3
- package/middleware/cors.js +12 -22
- package/middleware/detect-bot.d.ts +113 -0
- package/middleware/detect-bot.js +53 -0
- package/middleware/i18n.d.ts +166 -73
- package/middleware/i18n.js +73 -60
- package/middleware/index.d.ts +8 -32
- package/middleware/index.js +8 -44
- package/middleware/logger.d.ts +5 -2
- package/middleware/logger.js +9 -4
- package/middleware/pagination.d.ts +9 -6
- package/middleware/pagination.js +3 -2
- package/middleware/powered-by.d.ts +2 -1
- package/middleware/powered-by.js +3 -2
- package/middleware/{rateLimiter.d.ts → rate-limiter.d.ts} +15 -9
- package/middleware/rate-limiter.js +34 -0
- package/middleware/request-id.d.ts +2 -1
- package/middleware/request-id.js +5 -6
- package/middleware/{sanitizeHeader.d.ts → sanitize-headers.d.ts} +5 -19
- package/middleware/sanitize-headers.js +18 -0
- package/middleware/secure-headers copy.d.ts +15 -0
- package/middleware/secure-headers copy.js +136 -0
- package/middleware/secure-headers.d.ts +132 -0
- package/middleware/secure-headers.js +153 -0
- package/middleware/{xssProtection.d.ts → xss-protection.d.ts} +2 -1
- package/middleware/xss-protection.js +19 -0
- package/node/env.js +4 -4
- package/node/getConnInfo.d.ts +21 -0
- package/node/getConnInfo.js +13 -0
- package/node/index.d.ts +13 -4
- package/node/index.js +11 -4
- package/node/mount-node.d.ts +11 -0
- package/node/mount-node.js +56 -0
- package/node/serveStatic.d.ts +36 -0
- package/node/serveStatic.js +52 -0
- package/node/toWebRequest.js +22 -0
- package/node/ws.d.ts +56 -0
- package/node/ws.js +46 -0
- package/package.json +39 -30
- package/registry/RadixRouter.d.ts +40 -0
- package/registry/RadixRouter.js +144 -0
- package/registry/index.d.ts +2 -0
- package/registry/index.js +1 -0
- package/types/headers.d.ts +2 -0
- package/types/headers.js +1 -0
- package/types/index.d.ts +318 -18
- package/types/index.js +12 -1
- package/utils/buffer.d.ts +1 -0
- package/utils/buffer.js +14 -0
- package/utils/colors.d.ts +24 -0
- package/utils/colors.js +2 -0
- package/utils/cookie.d.ts +55 -0
- package/utils/cookie.js +53 -0
- package/utils/file.d.ts +38 -0
- package/utils/file.js +96 -0
- package/utils/formData.d.ts +41 -1
- package/utils/formData.js +58 -9
- package/utils/generateID.d.ts +42 -0
- package/utils/generateID.js +32 -0
- package/utils/httpStatusMap.d.ts +14 -0
- package/utils/low-level.d.ts +58 -0
- package/utils/low-level.js +108 -0
- package/utils/mimeTypes.d.ts +4 -0
- package/utils/{staticFile.js → mimeTypes.js} +0 -53
- package/utils/rateLimit.d.ts +18 -0
- package/utils/rateLimit.js +37 -0
- package/utils/response.d.ts +18 -0
- package/utils/response.js +58 -0
- package/{core/environment.d.ts → utils/runtime.d.ts} +1 -0
- package/{core/environment.js → utils/runtime.js} +1 -0
- package/utils/url.d.ts +42 -14
- package/utils/url.js +61 -27
- package/bun/adapter.d.ts +0 -127
- package/bun/adapter.js +0 -97
- package/cjs/bun/adapter.js +0 -100
- package/cjs/core/MiddlewareConfigure.js +0 -68
- package/cjs/core/common.js +0 -15
- package/cjs/deno/adpater.js +0 -67
- package/cjs/helper/common.js +0 -17
- package/cjs/middleware/basicAuth.js +0 -71
- package/cjs/middleware/cacheControl.js +0 -90
- package/cjs/middleware/detectBot.js +0 -104
- package/cjs/middleware/detectLocale.js +0 -43
- package/cjs/middleware/lazyLoadModules.js +0 -73
- package/cjs/middleware/rateLimiter.js +0 -24
- package/cjs/middleware/requestTimeout.js +0 -42
- package/cjs/middleware/sanitizeHeader.js +0 -51
- package/cjs/middleware/secureHeaders.js +0 -42
- package/cjs/node/adapter.js +0 -138
- package/cjs/utils/regexRouter.js +0 -58
- package/cjs/utils/state.js +0 -34
- package/cjs/utils/toWebRequest.js +0 -35
- package/cjs/ws/deno.js +0 -20
- package/cjs/ws/index.js +0 -53
- package/cjs/ws/node.js +0 -65
- package/core/MiddlewareConfigure.d.ts +0 -15
- package/core/MiddlewareConfigure.js +0 -63
- package/core/common.d.ts +0 -21
- package/core/common.js +0 -11
- package/deno/adpater.d.ts +0 -38
- package/deno/adpater.js +0 -64
- package/helper/common.d.ts +0 -5
- package/helper/common.js +0 -14
- package/middleware/basicAuth.d.ts +0 -81
- package/middleware/basicAuth.js +0 -67
- package/middleware/cacheControl.d.ts +0 -48
- package/middleware/cacheControl.js +0 -53
- package/middleware/detectBot.d.ts +0 -121
- package/middleware/detectBot.js +0 -98
- package/middleware/detectLocale.d.ts +0 -55
- package/middleware/detectLocale.js +0 -39
- package/middleware/lazyLoadModules.d.ts +0 -72
- package/middleware/lazyLoadModules.js +0 -69
- package/middleware/rateLimiter.js +0 -20
- package/middleware/requestTimeout.d.ts +0 -25
- package/middleware/requestTimeout.js +0 -38
- package/middleware/sanitizeHeader.js +0 -47
- package/middleware/secureHeaders.d.ts +0 -78
- package/middleware/secureHeaders.js +0 -38
- package/middleware/xssProtection.js +0 -22
- package/node/adapter.d.ts +0 -46
- package/node/adapter.js +0 -102
- package/utils/regexRouter.d.ts +0 -66
- package/utils/regexRouter.js +0 -53
- package/utils/state.d.ts +0 -50
- package/utils/state.js +0 -30
- package/utils/staticFile.d.ts +0 -10
- package/utils/toWebRequest.js +0 -32
- package/ws/deno.d.ts +0 -6
- package/ws/deno.js +0 -16
- package/ws/index.d.ts +0 -180
- package/ws/index.js +0 -50
- package/ws/node.d.ts +0 -7
- package/ws/node.js +0 -28
- /package/{utils → node}/toWebRequest.d.ts +0 -0
package/cjs/core/server.js
CHANGED
|
@@ -1,234 +1,115 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TezX = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
4
|
+
const RadixRouter_js_1 = require("../registry/RadixRouter.js");
|
|
5
|
+
const response_js_1 = require("../utils/response.js");
|
|
6
|
+
const url_js_1 = require("../utils/url.js");
|
|
7
7
|
const config_js_1 = require("./config.js");
|
|
8
8
|
const context_js_1 = require("./context.js");
|
|
9
|
+
const error_js_1 = require("./error.js");
|
|
9
10
|
const router_js_1 = require("./router.js");
|
|
10
11
|
class TezX extends router_js_1.Router {
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
#pathResolver;
|
|
13
|
+
#notFound = response_js_1.notFoundResponse;
|
|
14
|
+
#errorHandler = response_js_1.handleErrorResponse;
|
|
15
|
+
constructor({ basePath = "/", env = {}, debugMode = false, onPathResolve, routeRegistry = new RadixRouter_js_1.RadixRouter(), } = {}) {
|
|
15
16
|
if (debugMode) {
|
|
16
17
|
config_js_1.GlobalConfig.debugMode = debugMode;
|
|
17
18
|
}
|
|
18
19
|
super({ basePath, env });
|
|
19
|
-
|
|
20
|
+
if (!routeRegistry) {
|
|
21
|
+
throw new Error("routeRegistry is required for TezX initialization");
|
|
22
|
+
}
|
|
23
|
+
this.router = routeRegistry;
|
|
24
|
+
this.#pathResolver = onPathResolve;
|
|
20
25
|
this.serve = this.serve.bind(this);
|
|
21
26
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const { success, params } = (0, regexRouter_js_1.regexMatchRoute)(handler?.regex, pathname, handler?.paramNames || []);
|
|
26
|
-
if (success && handler) {
|
|
27
|
-
return {
|
|
28
|
-
callback: handler.callback,
|
|
29
|
-
middlewares: handler.middlewares,
|
|
30
|
-
params: params,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return null;
|
|
27
|
+
notFound(callback) {
|
|
28
|
+
this.#notFound = callback;
|
|
29
|
+
return this;
|
|
35
30
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
let node = this.triRouter;
|
|
40
|
-
if (priority == "static") {
|
|
41
|
-
for (let part of parts) {
|
|
42
|
-
if (node.children.has(part)) {
|
|
43
|
-
node = node.children.get(part);
|
|
44
|
-
}
|
|
45
|
-
else if (node.children.has(":")) {
|
|
46
|
-
node = node.children.get(":");
|
|
47
|
-
if (node.paramName)
|
|
48
|
-
params[node.paramName] = part;
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
for (let part of parts) {
|
|
57
|
-
if (node.children.has(":")) {
|
|
58
|
-
node = node.children.get(":");
|
|
59
|
-
if (node.paramName)
|
|
60
|
-
params[node.paramName] = part;
|
|
61
|
-
}
|
|
62
|
-
else if (node.children.has(part)) {
|
|
63
|
-
node = node.children.get(part);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (node?.handlers?.size && node?.pathname) {
|
|
71
|
-
const handlers = node.handlers.get(method) || node.handlers.get("ALL");
|
|
72
|
-
if (handlers) {
|
|
73
|
-
return {
|
|
74
|
-
middlewares: handlers.middlewares,
|
|
75
|
-
callback: handlers.callback,
|
|
76
|
-
params: params,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
findRoute(method, pathname) {
|
|
84
|
-
const route = this.#triRouter(method, pathname) ||
|
|
85
|
-
this.#regexRouter(method, pathname) ||
|
|
86
|
-
this.#triRouter(method, pathname, "param");
|
|
87
|
-
if (route) {
|
|
88
|
-
return {
|
|
89
|
-
...route,
|
|
90
|
-
middlewares: [...route.middlewares],
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
return null;
|
|
31
|
+
onError(callback) {
|
|
32
|
+
this.#errorHandler = callback;
|
|
33
|
+
return this;
|
|
94
34
|
}
|
|
95
|
-
#
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
35
|
+
async #chain(ctx, mLen, middlewares, hLen, handlers) {
|
|
36
|
+
let index = -1;
|
|
37
|
+
let res;
|
|
38
|
+
async function dispatch(i) {
|
|
39
|
+
if (i <= index)
|
|
40
|
+
throw new error_js_1.TezXError("next() called multiple times");
|
|
41
|
+
index = i;
|
|
42
|
+
if (i < mLen) {
|
|
43
|
+
const fn = middlewares[i];
|
|
44
|
+
if (typeof fn !== "function")
|
|
45
|
+
throw new TypeError(`Middleware[${i}] must be a function`);
|
|
46
|
+
res = (await fn(ctx, () => dispatch(i + 1)));
|
|
47
|
+
if (res !== undefined) {
|
|
48
|
+
ctx.res = res;
|
|
102
49
|
}
|
|
103
|
-
|
|
104
|
-
try {
|
|
105
|
-
const result = await currentMiddleware(ctx, next);
|
|
106
|
-
if (result instanceof Response) {
|
|
107
|
-
ctx.res = result;
|
|
108
|
-
}
|
|
109
|
-
if (result !== undefined) {
|
|
110
|
-
response = result;
|
|
111
|
-
}
|
|
112
|
-
return response;
|
|
113
|
-
}
|
|
114
|
-
catch (err) {
|
|
115
|
-
ctx.body = err;
|
|
116
|
-
throw err;
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
let res = await next();
|
|
120
|
-
if (res instanceof Response) {
|
|
121
|
-
return res;
|
|
122
|
-
}
|
|
123
|
-
if (typeof res == "function" && ctx.wsProtocol) {
|
|
124
|
-
return res;
|
|
125
|
-
}
|
|
126
|
-
if (!res && !ctx.body) {
|
|
127
|
-
throw new Error(`Handler failed: Middleware chain incomplete or response missing. Did you forget ${(0, colors_js_1.colorText)(" await next() ", "bgRed")} or to return a response? ${(0, colors_js_1.colorText)(` Path: ${ctx.pathname}, Method: ${ctx.method} `, "bgCyan")}`);
|
|
128
|
-
}
|
|
129
|
-
const resBody = res || ctx.body;
|
|
130
|
-
const toJson = {};
|
|
131
|
-
for (const [key, value] of ctx.headers.entries()) {
|
|
132
|
-
toJson[key] = value;
|
|
133
|
-
}
|
|
134
|
-
return ctx.send(resBody, toJson);
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
#findMiddleware(pathname) {
|
|
138
|
-
const parts = pathname.split("/").filter(Boolean);
|
|
139
|
-
let middlewares = [];
|
|
140
|
-
let node = this.triMiddlewares;
|
|
141
|
-
for (let part of parts) {
|
|
142
|
-
if (node.children.has(part)) {
|
|
143
|
-
node = node.children.get(part);
|
|
144
|
-
}
|
|
145
|
-
else if (node.children.has("*")) {
|
|
146
|
-
node = node.children.get("*");
|
|
50
|
+
return ctx.res;
|
|
147
51
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
52
|
+
const hi = i - mLen;
|
|
53
|
+
if (hi < hLen) {
|
|
54
|
+
const fn = handlers[hi];
|
|
55
|
+
if (typeof fn !== "function")
|
|
56
|
+
throw new TypeError(`Handler[${hi}] must be a function`);
|
|
57
|
+
res = (await fn(ctx, () => dispatch(i + 1)));
|
|
58
|
+
if (res !== undefined) {
|
|
59
|
+
ctx.res = res;
|
|
60
|
+
}
|
|
61
|
+
return ctx.res;
|
|
153
62
|
}
|
|
154
|
-
middlewares.push(...node.middlewares);
|
|
155
|
-
}
|
|
156
|
-
return middlewares;
|
|
157
|
-
}
|
|
158
|
-
async #resolvePath(pathname) {
|
|
159
|
-
let resolvePath = pathname;
|
|
160
|
-
if (this.#onPathResolve) {
|
|
161
|
-
resolvePath = await this.#onPathResolve(pathname);
|
|
162
|
-
config_js_1.GlobalConfig.debugging.warn(`${(0, colors_js_1.colorText)(" PATH RESOLVE ", "white")} ${(0, colors_js_1.colorText)(pathname, "red")} ➞ ${(0, colors_js_1.colorText)(resolvePath, "cyan")}`);
|
|
163
63
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
return resolvePath;
|
|
64
|
+
await dispatch(0);
|
|
65
|
+
return (ctx.res ??
|
|
66
|
+
(ctx.body !== undefined ? ctx.send(ctx.body) : this.#notFound(ctx)));
|
|
168
67
|
}
|
|
169
|
-
async #handleRequest(req,
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
const
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
68
|
+
async #handleRequest(req, method, args) {
|
|
69
|
+
if (!(req instanceof Request))
|
|
70
|
+
throw new error_js_1.TezXError("Invalid request object provided to tezX server.");
|
|
71
|
+
const rawPath = (0, url_js_1.getPathname)(req.url);
|
|
72
|
+
const pathname = this.#pathResolver
|
|
73
|
+
? await this.#pathResolver(rawPath)
|
|
74
|
+
: rawPath;
|
|
75
|
+
const ctx = new context_js_1.Context(req, pathname, method, this.env, args);
|
|
176
76
|
try {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
ctx.params = find.params;
|
|
181
|
-
const callback = find.callback;
|
|
182
|
-
let routeMiddlewares = find.middlewares || [];
|
|
183
|
-
combine.push(...routeMiddlewares, callback);
|
|
77
|
+
const staticHandler = this.staticFile?.[`${method} ${pathname}`];
|
|
78
|
+
if (staticHandler) {
|
|
79
|
+
return staticHandler(ctx);
|
|
184
80
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
81
|
+
const route = this.router?.search(method, pathname);
|
|
82
|
+
const mLen = route?.middlewares?.length;
|
|
83
|
+
const hLen = route?.handlers?.length;
|
|
84
|
+
if (!route || (hLen === 0 && mLen === 0)) {
|
|
85
|
+
return this.#notFound(ctx);
|
|
188
86
|
}
|
|
189
|
-
|
|
190
|
-
if (
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
websocket: response,
|
|
194
|
-
ctx: ctx,
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
return response;
|
|
87
|
+
ctx.params = route.params;
|
|
88
|
+
if (hLen === 1 && mLen === 0) {
|
|
89
|
+
return ((await route.handlers[0](ctx)) ??
|
|
90
|
+
(ctx.body !== undefined ? ctx.send(ctx.body) : this.#notFound(ctx)));
|
|
198
91
|
}
|
|
199
|
-
|
|
200
|
-
return (ctx) => {
|
|
201
|
-
let headers = response?.headers;
|
|
202
|
-
for (const [key, value] of headers.entries()) {
|
|
203
|
-
ctx.headers.set(key, value);
|
|
204
|
-
}
|
|
205
|
-
const statusText = response?.statusText || httpStatusMap_js_1.httpStatusMap[response?.status] || "";
|
|
206
|
-
const status = response.status || ctx.getStatus;
|
|
207
|
-
return new Response(response.body, {
|
|
208
|
-
status,
|
|
209
|
-
statusText,
|
|
210
|
-
headers: ctx.headers,
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
};
|
|
214
|
-
return finalResponse()(ctx);
|
|
92
|
+
return await this.#chain(ctx, mLen, route.middlewares, hLen, route.handlers);
|
|
215
93
|
}
|
|
216
94
|
catch (err) {
|
|
217
|
-
return this.#
|
|
95
|
+
return this.#errorHandler?.((0, error_js_1.TezXErrorParse)(err), ctx);
|
|
218
96
|
}
|
|
219
97
|
}
|
|
220
|
-
async
|
|
221
|
-
|
|
222
|
-
if (
|
|
223
|
-
|
|
98
|
+
async serve(req, ...args) {
|
|
99
|
+
const method = (req.method ?? "GET").toUpperCase();
|
|
100
|
+
if (method === "HEAD") {
|
|
101
|
+
const getRequest = new Request(req.url, { ...req, method: "GET" });
|
|
102
|
+
const headResponse = await this.#handleRequest(getRequest, method, args);
|
|
103
|
+
return new Response(null, {
|
|
104
|
+
status: headResponse.status,
|
|
105
|
+
statusText: headResponse.statusText,
|
|
106
|
+
headers: headResponse.headers,
|
|
107
|
+
});
|
|
224
108
|
}
|
|
225
|
-
|
|
226
|
-
let res = await config_js_1.GlobalConfig.onError(error, ctx);
|
|
227
|
-
ctx.setStatus = res.status;
|
|
228
|
-
return res;
|
|
229
|
-
}
|
|
230
|
-
async serve(req, options) {
|
|
231
|
-
return this.#handleRequest(req, options);
|
|
109
|
+
return this.#handleRequest(req, method, args);
|
|
232
110
|
}
|
|
233
111
|
}
|
|
234
112
|
exports.TezX = TezX;
|
|
113
|
+
if (!globalThis.TezX) {
|
|
114
|
+
globalThis.TezX = TezX;
|
|
115
|
+
}
|
package/cjs/deno/env.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.loadEnv = loadEnv;
|
|
4
|
-
const
|
|
4
|
+
const runtime_js_1 = require("../utils/runtime.js");
|
|
5
5
|
const colors_js_1 = require("../utils/colors.js");
|
|
6
|
+
const error_js_1 = require("../core/error.js");
|
|
6
7
|
function parseEnvFile(filePath, result) {
|
|
7
8
|
try {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
throw new Error(`Please use ${(0, colors_js_1.colorText)(`import {loadEnv} from "tezx/${runtime}"`, "bgRed")} environment`);
|
|
9
|
+
if (runtime_js_1.runtime !== "deno") {
|
|
10
|
+
throw new error_js_1.TezXError(`Please use ${(0, colors_js_1.colorText)(`import {loadEnv} from "tezx/${runtime_js_1.runtime}"`, "bgRed")} environment`);
|
|
11
11
|
}
|
|
12
12
|
let fileExists = false;
|
|
13
13
|
try {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConnInfo = getConnInfo;
|
|
4
|
+
function getConnInfo() {
|
|
5
|
+
return (ctx, next) => {
|
|
6
|
+
let connInfo = ctx.args?.[0];
|
|
7
|
+
if (connInfo && connInfo.remoteAddr) {
|
|
8
|
+
let remoteAddr = connInfo.remoteAddr;
|
|
9
|
+
ctx.req.remoteAddress = {
|
|
10
|
+
port: remoteAddr?.port,
|
|
11
|
+
address: remoteAddr?.hostname,
|
|
12
|
+
transport: remoteAddr?.transport,
|
|
13
|
+
family: remoteAddr?.family,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
return next();
|
|
17
|
+
};
|
|
18
|
+
}
|
package/cjs/deno/index.js
CHANGED
|
@@ -1,24 +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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
3
|
+
exports.upgradeWebSocket = exports.serveStatic = exports.loadEnv = exports.getConnInfo = void 0;
|
|
18
4
|
const env_js_1 = require("./env.js");
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
Object.defineProperty(exports, "loadEnv", { enumerable: true, get: function () { return env_js_1.loadEnv; } });
|
|
6
|
+
const getConnInfo_js_1 = require("./getConnInfo.js");
|
|
7
|
+
Object.defineProperty(exports, "getConnInfo", { enumerable: true, get: function () { return getConnInfo_js_1.getConnInfo; } });
|
|
8
|
+
const serveStatic_js_1 = require("./serveStatic.js");
|
|
9
|
+
Object.defineProperty(exports, "serveStatic", { enumerable: true, get: function () { return serveStatic_js_1.serveStatic; } });
|
|
10
|
+
const ws_js_1 = require("./ws.js");
|
|
11
|
+
Object.defineProperty(exports, "upgradeWebSocket", { enumerable: true, get: function () { return ws_js_1.upgradeWebSocket; } });
|
|
21
12
|
exports.default = {
|
|
22
|
-
|
|
13
|
+
serveStatic: serveStatic_js_1.serveStatic,
|
|
14
|
+
getConnInfo: getConnInfo_js_1.getConnInfo,
|
|
23
15
|
loadEnv: env_js_1.loadEnv,
|
|
16
|
+
upgradeWebSocket: ws_js_1.upgradeWebSocket,
|
|
24
17
|
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serveStatic = serveStatic;
|
|
4
|
+
exports.getFiles = getFiles;
|
|
5
|
+
const error_js_1 = require("../core/error.js");
|
|
6
|
+
const low_level_js_1 = require("../utils/low-level.js");
|
|
7
|
+
function serveStatic(...args) {
|
|
8
|
+
let route = "";
|
|
9
|
+
let dir;
|
|
10
|
+
let options = {};
|
|
11
|
+
switch (args.length) {
|
|
12
|
+
case 3:
|
|
13
|
+
[route, dir, options] = args;
|
|
14
|
+
break;
|
|
15
|
+
case 2:
|
|
16
|
+
if (typeof args[1] === "object") {
|
|
17
|
+
[dir, options] = args;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
[route, dir] = args;
|
|
21
|
+
}
|
|
22
|
+
break;
|
|
23
|
+
case 1:
|
|
24
|
+
[dir] = args;
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
throw new error_js_1.TezXError(`\x1b[1;31m404 Not Found\x1b[0m \x1b[1;32mInvalid arguments\x1b[0m`);
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
files: getFiles(dir, route, options),
|
|
31
|
+
options,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function getFiles(dir, basePath = "/", option = {}) {
|
|
35
|
+
const files = [];
|
|
36
|
+
for (const entry of Deno.readDirSync(dir)) {
|
|
37
|
+
const path = `${dir}/${entry.name}`;
|
|
38
|
+
if (entry.isDirectory) {
|
|
39
|
+
files.push(...getFiles(path, `${basePath}/${entry.name}`, option));
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const ext = (0, low_level_js_1.extensionExtract)(entry.name);
|
|
43
|
+
if (option?.extensions?.length && !option.extensions.includes(ext)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
files.push({
|
|
47
|
+
fileSource: path,
|
|
48
|
+
route: `/${(0, low_level_js_1.sanitizePathSplitBasePath)(basePath, entry.name).join("/")}`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return files;
|
|
53
|
+
}
|
package/cjs/deno/ws.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgradeWebSocket = upgradeWebSocket;
|
|
4
|
+
const error_js_1 = require("../core/error.js");
|
|
5
|
+
function upgradeWebSocket(callback, options = {}) {
|
|
6
|
+
const { onUpgradeError = (error, ctx) => {
|
|
7
|
+
ctx.setStatus = 401;
|
|
8
|
+
return ctx.text(error.message);
|
|
9
|
+
}, } = options;
|
|
10
|
+
return async (ctx, next) => {
|
|
11
|
+
const upgrade = ctx.req.header("upgrade")?.toLowerCase();
|
|
12
|
+
const connection = ctx.req.header("connection")?.toLowerCase();
|
|
13
|
+
const key = ctx.req.header("sec-websocket-key");
|
|
14
|
+
if (upgrade !== "websocket" || !connection?.includes("upgrade") || !key) {
|
|
15
|
+
ctx.setStatus = 401;
|
|
16
|
+
const error = new error_js_1.TezXError("Invalid WebSocket upgrade request.", 401);
|
|
17
|
+
return next ? next() : onUpgradeError(error, ctx);
|
|
18
|
+
}
|
|
19
|
+
ctx.wsProtocol = ctx.url?.startsWith("https") ? "wss" : "ws";
|
|
20
|
+
try {
|
|
21
|
+
if (typeof callback !== "function") {
|
|
22
|
+
throw new error_js_1.TezXError("Missing or invalid WebSocket callback handler.");
|
|
23
|
+
}
|
|
24
|
+
const { socket, response } = Deno.upgradeWebSocket(ctx.rawRequest, {
|
|
25
|
+
protocol: options.protocol,
|
|
26
|
+
idleTimeout: options.idleTimeout,
|
|
27
|
+
});
|
|
28
|
+
const event = callback(ctx);
|
|
29
|
+
socket.onopen = () => event.open?.(socket, ctx);
|
|
30
|
+
socket.onmessage = (e) => event.message?.(socket, e.data);
|
|
31
|
+
socket.onclose = (e) => event.close?.(socket, { code: e.code, reason: e.reason });
|
|
32
|
+
socket.onerror = (err) => event.error?.(socket, err);
|
|
33
|
+
return response;
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return onUpgradeError((0, error_js_1.TezXErrorParse)(err, 426), ctx);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
package/cjs/helper/index.js
CHANGED
|
@@ -1,20 +1,56 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.sanitizePathSplit = exports.
|
|
3
|
+
exports.useFormData = exports.setCookie = exports.sanitized = exports.sanitizePathSplitBasePath = exports.sanitizePathSplit = exports.runtime = exports.readStream = exports.normalizeHeaderKey = exports.httpStatusMap = exports.getFileBuffer = exports.getCookie = exports.generateUUID = exports.generateRandomBase64 = exports.generateID = exports.fileSize = exports.fileExists = exports.extensionExtract = exports.deleteCookie = exports.colorText = exports.allCookies = exports.GlobalConfig = void 0;
|
|
4
4
|
const config_js_1 = require("../core/config.js");
|
|
5
5
|
Object.defineProperty(exports, "GlobalConfig", { enumerable: true, get: function () { return config_js_1.GlobalConfig; } });
|
|
6
|
-
const environment_js_1 = require("../core/environment.js");
|
|
7
|
-
Object.defineProperty(exports, "Environment", { enumerable: true, get: function () { return environment_js_1.Environment; } });
|
|
8
6
|
const colors_js_1 = require("../utils/colors.js");
|
|
9
7
|
Object.defineProperty(exports, "colorText", { enumerable: true, get: function () { return colors_js_1.colorText; } });
|
|
10
|
-
const
|
|
11
|
-
Object.defineProperty(exports, "
|
|
12
|
-
|
|
13
|
-
Object.defineProperty(exports, "
|
|
8
|
+
const cookie_js_1 = require("../utils/cookie.js");
|
|
9
|
+
Object.defineProperty(exports, "allCookies", { enumerable: true, get: function () { return cookie_js_1.allCookies; } });
|
|
10
|
+
Object.defineProperty(exports, "deleteCookie", { enumerable: true, get: function () { return cookie_js_1.deleteCookie; } });
|
|
11
|
+
Object.defineProperty(exports, "getCookie", { enumerable: true, get: function () { return cookie_js_1.getCookie; } });
|
|
12
|
+
Object.defineProperty(exports, "setCookie", { enumerable: true, get: function () { return cookie_js_1.setCookie; } });
|
|
13
|
+
const file_js_1 = require("../utils/file.js");
|
|
14
|
+
Object.defineProperty(exports, "fileExists", { enumerable: true, get: function () { return file_js_1.fileExists; } });
|
|
15
|
+
Object.defineProperty(exports, "fileSize", { enumerable: true, get: function () { return file_js_1.fileSize; } });
|
|
16
|
+
Object.defineProperty(exports, "getFileBuffer", { enumerable: true, get: function () { return file_js_1.getFileBuffer; } });
|
|
17
|
+
Object.defineProperty(exports, "readStream", { enumerable: true, get: function () { return file_js_1.readStream; } });
|
|
18
|
+
const formData_js_1 = require("../utils/formData.js");
|
|
19
|
+
Object.defineProperty(exports, "useFormData", { enumerable: true, get: function () { return formData_js_1.useFormData; } });
|
|
20
|
+
const generateID_js_1 = require("../utils/generateID.js");
|
|
21
|
+
Object.defineProperty(exports, "generateID", { enumerable: true, get: function () { return generateID_js_1.generateID; } });
|
|
22
|
+
Object.defineProperty(exports, "generateRandomBase64", { enumerable: true, get: function () { return generateID_js_1.generateRandomBase64; } });
|
|
23
|
+
Object.defineProperty(exports, "generateUUID", { enumerable: true, get: function () { return generateID_js_1.generateUUID; } });
|
|
24
|
+
const httpStatusMap_js_1 = require("../utils/httpStatusMap.js");
|
|
25
|
+
Object.defineProperty(exports, "httpStatusMap", { enumerable: true, get: function () { return httpStatusMap_js_1.httpStatusMap; } });
|
|
26
|
+
const low_level_js_1 = require("../utils/low-level.js");
|
|
27
|
+
Object.defineProperty(exports, "extensionExtract", { enumerable: true, get: function () { return low_level_js_1.extensionExtract; } });
|
|
28
|
+
Object.defineProperty(exports, "normalizeHeaderKey", { enumerable: true, get: function () { return low_level_js_1.normalizeHeaderKey; } });
|
|
29
|
+
Object.defineProperty(exports, "sanitizePathSplit", { enumerable: true, get: function () { return low_level_js_1.sanitizePathSplit; } });
|
|
30
|
+
Object.defineProperty(exports, "sanitizePathSplitBasePath", { enumerable: true, get: function () { return low_level_js_1.sanitizePathSplitBasePath; } });
|
|
31
|
+
Object.defineProperty(exports, "sanitized", { enumerable: true, get: function () { return low_level_js_1.sanitized; } });
|
|
32
|
+
const runtime_js_1 = require("../utils/runtime.js");
|
|
33
|
+
Object.defineProperty(exports, "runtime", { enumerable: true, get: function () { return runtime_js_1.runtime; } });
|
|
14
34
|
exports.default = {
|
|
15
|
-
|
|
35
|
+
useFormData: formData_js_1.useFormData,
|
|
36
|
+
generateRandomBase64: generateID_js_1.generateRandomBase64,
|
|
37
|
+
runtime: runtime_js_1.runtime,
|
|
38
|
+
extensionExtract: low_level_js_1.extensionExtract,
|
|
39
|
+
normalizeHeaderKey: low_level_js_1.normalizeHeaderKey,
|
|
40
|
+
sanitizePathSplit: low_level_js_1.sanitizePathSplit,
|
|
41
|
+
sanitizePathSplitBasePath: low_level_js_1.sanitizePathSplitBasePath,
|
|
42
|
+
sanitized: low_level_js_1.sanitized,
|
|
43
|
+
allCookies: cookie_js_1.allCookies,
|
|
44
|
+
deleteCookie: cookie_js_1.deleteCookie,
|
|
45
|
+
getCookie: cookie_js_1.getCookie,
|
|
46
|
+
setCookie: cookie_js_1.setCookie,
|
|
47
|
+
fileExists: file_js_1.fileExists,
|
|
48
|
+
fileSize: file_js_1.fileSize,
|
|
49
|
+
getFileBuffer: file_js_1.getFileBuffer,
|
|
50
|
+
readStream: file_js_1.readStream,
|
|
51
|
+
generateID: generateID_js_1.generateID,
|
|
52
|
+
generateUUID: generateID_js_1.generateUUID,
|
|
53
|
+
httpStatusMap: httpStatusMap_js_1.httpStatusMap,
|
|
16
54
|
colorText: colors_js_1.colorText,
|
|
17
55
|
GlobalConfig: config_js_1.GlobalConfig,
|
|
18
|
-
sanitizePathSplit: url_js_1.sanitizePathSplit,
|
|
19
|
-
generateID: common_js_1.generateID,
|
|
20
56
|
};
|
package/cjs/index.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.version = exports.
|
|
3
|
+
exports.version = exports.TezXError = exports.TezX = exports.Router = void 0;
|
|
4
|
+
const error_js_1 = require("./core/error.js");
|
|
5
|
+
Object.defineProperty(exports, "TezXError", { enumerable: true, get: function () { return error_js_1.TezXError; } });
|
|
4
6
|
const router_js_1 = require("./core/router.js");
|
|
5
7
|
Object.defineProperty(exports, "Router", { enumerable: true, get: function () { return router_js_1.Router; } });
|
|
6
8
|
const server_js_1 = require("./core/server.js");
|
|
7
9
|
Object.defineProperty(exports, "TezX", { enumerable: true, get: function () { return server_js_1.TezX; } });
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, "compileRegexRoute", { enumerable: true, get: function () { return regexRouter_js_1.compileRegexRoute; } });
|
|
10
|
-
Object.defineProperty(exports, "regexMatchRoute", { enumerable: true, get: function () { return regexRouter_js_1.regexMatchRoute; } });
|
|
11
|
-
exports.version = "2.0.11";
|
|
10
|
+
exports.version = "3.0.0";
|
|
12
11
|
exports.default = {
|
|
13
12
|
Router: router_js_1.Router,
|
|
14
|
-
regexMatchRoute: regexRouter_js_1.regexMatchRoute,
|
|
15
|
-
compileRegexRoute: regexRouter_js_1.compileRegexRoute,
|
|
16
13
|
TezX: server_js_1.TezX,
|
|
17
14
|
version: exports.version,
|
|
15
|
+
TezXError: error_js_1.TezXError,
|
|
18
16
|
};
|