tezx 2.0.11 → 3.0.0-beta
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 +124 -89
- package/dist/bun/getConnInfo.d.ts +21 -0
- package/dist/bun/getConnInfo.js +9 -0
- package/dist/bun/index.d.ts +11 -0
- package/dist/bun/index.js +9 -0
- package/dist/bun/ws.d.ts +11 -0
- package/dist/bun/ws.js +34 -0
- package/dist/cjs/bun/getConnInfo.js +12 -0
- package/dist/cjs/bun/index.js +17 -0
- package/dist/cjs/bun/ws.js +37 -0
- package/{cjs → dist/cjs}/core/config.js +2 -11
- package/dist/cjs/core/context.js +179 -0
- package/dist/cjs/core/request.js +98 -0
- package/dist/cjs/core/router.js +197 -0
- package/dist/cjs/core/server.js +126 -0
- package/{cjs → dist/cjs}/deno/env.js +3 -4
- package/dist/cjs/deno/getConnInfo.js +18 -0
- package/dist/cjs/deno/index.js +14 -0
- package/dist/cjs/deno/ws.js +38 -0
- package/dist/cjs/helper/index.js +43 -0
- package/dist/cjs/index.js +13 -0
- package/{cjs/middleware/basicAuth.js → dist/cjs/middleware/basic-auth/index.js} +19 -17
- package/{cjs/middleware/cacheControl.js → dist/cjs/middleware/cache-control/index.js} +8 -7
- package/{cjs/middleware/cors.js → dist/cjs/middleware/cors/index.js} +9 -8
- package/{cjs/middleware/detectBot.js → dist/cjs/middleware/detect-bot/index.js} +5 -43
- package/{cjs/middleware/detectLocale.js → dist/cjs/middleware/detect-locale/index.js} +6 -4
- package/{cjs/middleware/i18n.js → dist/cjs/middleware/i18n/index.js} +21 -7
- package/{cjs/middleware/lazyLoadModules.js → dist/cjs/middleware/lazy-loader/index.js} +6 -5
- package/{cjs/middleware/logger.js → dist/cjs/middleware/logger/index.js} +2 -1
- package/{cjs/middleware/pagination.js → dist/cjs/middleware/pagination/index.js} +2 -1
- package/{cjs/middleware/powered-by.js → dist/cjs/middleware/powered-by/index.js} +3 -2
- package/{cjs/middleware/rateLimiter.js → dist/cjs/middleware/rate-limiter/index.js} +7 -7
- package/dist/cjs/middleware/request-id/index.js +17 -0
- package/{cjs/middleware/requestTimeout.js → dist/cjs/middleware/request-timeout/index.js} +4 -3
- package/dist/cjs/middleware/sanitize-headers/index.js +54 -0
- package/{cjs/middleware/secureHeaders.js → dist/cjs/middleware/secure-headers/index.js} +9 -8
- package/{cjs/middleware/xssProtection.js → dist/cjs/middleware/xss-protection/index.js} +6 -5
- package/{cjs → dist/cjs}/node/env.js +3 -4
- package/dist/cjs/node/getConnInfo.js +16 -0
- package/dist/cjs/node/index.js +20 -0
- package/dist/cjs/node/mount-node.js +56 -0
- package/dist/cjs/node/toWebRequest.js +21 -0
- package/dist/cjs/node/ws.js +48 -0
- package/dist/cjs/registry/RadixRouter.js +146 -0
- package/{cjs/node → dist/cjs/registry}/index.js +1 -8
- package/dist/cjs/types/index.js +15 -0
- package/{cjs → dist/cjs}/utils/colors.js +2 -0
- package/dist/cjs/utils/cookie.js +59 -0
- package/dist/cjs/utils/file.js +114 -0
- package/dist/cjs/utils/formData.js +57 -0
- package/dist/cjs/utils/generateID.js +26 -0
- package/dist/cjs/utils/low-level.js +115 -0
- package/dist/cjs/utils/rateLimit.js +41 -0
- package/{cjs → dist/cjs}/utils/regexRouter.js +2 -2
- package/dist/cjs/utils/response.js +45 -0
- package/{cjs/core/environment.js → dist/cjs/utils/runtime.js} +2 -1
- package/{cjs → dist/cjs}/utils/staticFile.js +16 -51
- package/dist/cjs/utils/url.js +70 -0
- package/{core → dist/core}/config.d.ts +2 -6
- package/{core → dist/core}/config.js +2 -11
- package/dist/core/context.d.ts +249 -0
- package/dist/core/context.js +175 -0
- package/dist/core/request.d.ts +96 -0
- package/dist/core/request.js +94 -0
- package/dist/core/router.d.ts +208 -0
- package/dist/core/router.js +193 -0
- package/dist/core/server.d.ts +145 -0
- package/dist/core/server.js +122 -0
- package/{deno → dist/deno}/env.js +1 -2
- package/dist/deno/getConnInfo.d.ts +21 -0
- package/dist/deno/getConnInfo.js +15 -0
- package/dist/deno/index.d.ts +12 -0
- package/dist/deno/index.js +9 -0
- package/dist/deno/ws.d.ts +42 -0
- package/dist/deno/ws.js +35 -0
- package/dist/helper/index.d.ts +46 -0
- package/dist/helper/index.js +21 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +9 -0
- package/{middleware/basicAuth.d.ts → dist/middleware/basic-auth/index.d.ts} +6 -4
- package/{middleware/basicAuth.js → dist/middleware/basic-auth/index.js} +16 -14
- package/{middleware/cacheControl.d.ts → dist/middleware/cache-control/index.d.ts} +4 -3
- package/{middleware/cacheControl.js → dist/middleware/cache-control/index.js} +8 -7
- package/dist/middleware/cors/index.d.ts +51 -0
- package/{middleware/cors.js → dist/middleware/cors/index.js} +10 -9
- package/{middleware/detectBot.d.ts → dist/middleware/detect-bot/index.d.ts} +12 -22
- package/{middleware/detectBot.js → dist/middleware/detect-bot/index.js} +3 -39
- package/{middleware/detectLocale.d.ts → dist/middleware/detect-locale/index.d.ts} +3 -2
- package/{middleware/detectLocale.js → dist/middleware/detect-locale/index.js} +6 -4
- package/{middleware/i18n.d.ts → dist/middleware/i18n/index.d.ts} +3 -2
- package/{middleware/i18n.js → dist/middleware/i18n/index.js} +21 -7
- package/{middleware/lazyLoadModules.d.ts → dist/middleware/lazy-loader/index.d.ts} +3 -2
- package/{middleware/lazyLoadModules.js → dist/middleware/lazy-loader/index.js} +4 -3
- package/{middleware/logger.d.ts → dist/middleware/logger/index.d.ts} +4 -3
- package/{middleware/logger.js → dist/middleware/logger/index.js} +3 -2
- package/{middleware/pagination.d.ts → dist/middleware/pagination/index.d.ts} +3 -2
- package/{middleware/pagination.js → dist/middleware/pagination/index.js} +2 -1
- package/{middleware/powered-by.d.ts → dist/middleware/powered-by/index.d.ts} +3 -2
- package/dist/middleware/powered-by/index.js +7 -0
- package/{middleware/rateLimiter.d.ts → dist/middleware/rate-limiter/index.d.ts} +12 -4
- package/{middleware/rateLimiter.js → dist/middleware/rate-limiter/index.js} +5 -5
- package/{middleware/request-id.d.ts → dist/middleware/request-id/index.d.ts} +3 -2
- package/dist/middleware/request-id/index.js +13 -0
- package/{middleware/requestTimeout.d.ts → dist/middleware/request-timeout/index.d.ts} +5 -4
- package/{middleware/requestTimeout.js → dist/middleware/request-timeout/index.js} +4 -3
- package/{middleware/sanitizeHeader.d.ts → dist/middleware/sanitize-headers/index.d.ts} +3 -9
- package/dist/middleware/sanitize-headers/index.js +50 -0
- package/{middleware/secureHeaders.d.ts → dist/middleware/secure-headers/index.d.ts} +3 -3
- package/{middleware/secureHeaders.js → dist/middleware/secure-headers/index.js} +9 -8
- package/{middleware/xssProtection.d.ts → dist/middleware/xss-protection/index.d.ts} +4 -3
- package/{middleware/xssProtection.js → dist/middleware/xss-protection/index.js} +6 -5
- package/{node → dist/node}/env.js +1 -2
- package/dist/node/getConnInfo.d.ts +21 -0
- package/dist/node/getConnInfo.js +13 -0
- package/dist/node/index.d.ts +16 -0
- package/dist/node/index.js +13 -0
- package/dist/node/mount-node.d.ts +11 -0
- package/dist/node/mount-node.js +53 -0
- package/dist/node/toWebRequest.js +18 -0
- package/dist/node/ws.d.ts +56 -0
- package/dist/node/ws.js +45 -0
- package/dist/registry/RadixRouter.d.ts +47 -0
- package/dist/registry/RadixRouter.js +142 -0
- package/dist/registry/index.d.ts +2 -0
- package/dist/registry/index.js +1 -0
- package/dist/types/index.d.ts +322 -0
- package/dist/types/index.js +12 -0
- package/dist/utils/colors.d.ts +46 -0
- package/{utils → dist/utils}/colors.js +2 -0
- package/dist/utils/cookie.d.ts +55 -0
- package/dist/utils/cookie.js +53 -0
- package/dist/utils/file.d.ts +34 -0
- package/dist/utils/file.js +75 -0
- package/dist/utils/formData.d.ts +41 -0
- package/dist/utils/formData.js +53 -0
- package/dist/utils/generateID.d.ts +33 -0
- package/dist/utils/generateID.js +22 -0
- package/dist/utils/httpStatusMap.d.ts +15 -0
- package/dist/utils/low-level.d.ts +58 -0
- package/dist/utils/low-level.js +108 -0
- package/dist/utils/rateLimit.d.ts +19 -0
- package/dist/utils/rateLimit.js +37 -0
- package/{utils → dist/utils}/regexRouter.js +2 -2
- package/dist/utils/response.d.ts +8 -0
- package/dist/utils/response.js +39 -0
- package/{core/environment.d.ts → dist/utils/runtime.d.ts} +1 -0
- package/{core/environment.js → dist/utils/runtime.js} +1 -0
- package/{utils → dist/utils}/staticFile.d.ts +2 -2
- package/{utils → dist/utils}/staticFile.js +16 -18
- package/dist/utils/url.d.ts +42 -0
- package/dist/utils/url.js +64 -0
- package/package.json +108 -51
- package/bun/adapter.d.ts +0 -127
- package/bun/adapter.js +0 -97
- package/bun/index.d.ts +0 -9
- package/bun/index.js +0 -8
- package/cjs/bun/adapter.js +0 -100
- package/cjs/bun/index.js +0 -24
- package/cjs/core/MiddlewareConfigure.js +0 -68
- package/cjs/core/common.js +0 -15
- package/cjs/core/context.js +0 -425
- package/cjs/core/request.js +0 -152
- package/cjs/core/router.js +0 -510
- package/cjs/core/server.js +0 -234
- package/cjs/deno/adpater.js +0 -67
- package/cjs/deno/index.js +0 -24
- package/cjs/helper/common.js +0 -17
- package/cjs/helper/index.js +0 -20
- package/cjs/index.js +0 -18
- package/cjs/middleware/index.js +0 -68
- package/cjs/middleware/request-id.js +0 -15
- package/cjs/middleware/sanitizeHeader.js +0 -51
- package/cjs/node/adapter.js +0 -138
- package/cjs/types/index.js +0 -2
- package/cjs/utils/formData.js +0 -13
- package/cjs/utils/state.js +0 -34
- package/cjs/utils/toWebRequest.js +0 -35
- package/cjs/utils/url.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/core/context.d.ts +0 -215
- package/core/context.js +0 -388
- package/core/request.d.ts +0 -136
- package/core/request.js +0 -148
- package/core/router.d.ts +0 -219
- package/core/router.js +0 -472
- package/core/server.d.ts +0 -71
- package/core/server.js +0 -230
- package/deno/adpater.d.ts +0 -38
- package/deno/adpater.js +0 -64
- package/deno/index.d.ts +0 -9
- package/deno/index.js +0 -8
- package/helper/common.d.ts +0 -5
- package/helper/common.js +0 -14
- package/helper/index.d.ts +0 -32
- package/helper/index.js +0 -13
- package/index.d.ts +0 -18
- package/index.js +0 -12
- package/middleware/cors.d.ts +0 -10
- package/middleware/index.d.ts +0 -38
- package/middleware/index.js +0 -50
- package/middleware/powered-by.js +0 -6
- package/middleware/request-id.js +0 -11
- package/middleware/sanitizeHeader.js +0 -47
- package/node/adapter.d.ts +0 -46
- package/node/adapter.js +0 -102
- package/node/index.d.ts +0 -9
- package/node/index.js +0 -8
- package/types/index.d.ts +0 -59
- package/types/index.js +0 -1
- package/utils/colors.d.ts +0 -22
- package/utils/formData.d.ts +0 -1
- package/utils/formData.js +0 -10
- package/utils/httpStatusMap.d.ts +0 -1
- package/utils/state.d.ts +0 -50
- package/utils/state.js +0 -30
- package/utils/toWebRequest.js +0 -32
- package/utils/url.d.ts +0 -14
- package/utils/url.js +0 -30
- 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/{cjs → dist/cjs}/utils/debugging.js +0 -0
- /package/{cjs → dist/cjs}/utils/httpStatusMap.js +0 -0
- /package/{deno → dist/deno}/env.d.ts +0 -0
- /package/{node → dist/node}/env.d.ts +0 -0
- /package/{utils → dist/node}/toWebRequest.d.ts +0 -0
- /package/{utils → dist/utils}/debugging.d.ts +0 -0
- /package/{utils → dist/utils}/debugging.js +0 -0
- /package/{utils → dist/utils}/httpStatusMap.js +0 -0
- /package/{utils → dist/utils}/regexRouter.d.ts +0 -0
package/README.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
# TezX
|
|
1
|
+
# ⚡ TezX – High-Performance JavaScript Framework
|
|
2
2
|
|
|
3
|
-
**TezX** is a
|
|
3
|
+
**TezX** is a modern, high-performance, and lightweight JavaScript framework designed for speed, scalability, and cross-environment compatibility. It offers an intuitive API for routing, middleware management, and static file serving—making it ideal for building web applications with **Node.js**, **Deno**, and **Bun**.
|
|
4
4
|
|
|
5
5
|
[](https://deepwiki.com/tezxjs/TezX)
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 🚀
|
|
9
|
+
## 🚀 Features at a Glance
|
|
10
10
|
|
|
11
|
-
- ⚡ **
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- 🔌 **
|
|
15
|
-
- 🧭 **
|
|
16
|
-
- 🔐 **Security
|
|
17
|
-
- 📡 **Efficient HTTP
|
|
18
|
-
- 🌍 **Cross-Environment
|
|
11
|
+
- ⚡ **Ultra-Fast Performance** – Built for speed and concurrency.
|
|
12
|
+
- 🧩 **Minimal & Intuitive API** – Clean and easy to use.
|
|
13
|
+
- 🗂 **Static File Serving** – Serve files with a single command.
|
|
14
|
+
- 🔌 **Middleware Support** – Stack and compose custom logic.
|
|
15
|
+
- 🧭 **Flexible Routing** – Dynamic and pattern-based routing.
|
|
16
|
+
- 🔐 **Security-First Design** – Secure by default.
|
|
17
|
+
- 📡 **Efficient HTTP Engine** – High-concurrency request handling.
|
|
18
|
+
- 🌍 **Cross-Environment** – Works with Node.js, Deno, and Bun.
|
|
19
19
|
|
|
20
20
|
---
|
|
21
21
|
|
|
@@ -25,11 +25,9 @@
|
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
npm install tezx
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
```bash
|
|
28
|
+
# or
|
|
31
29
|
yarn add tezx
|
|
32
|
-
|
|
30
|
+
```
|
|
33
31
|
|
|
34
32
|
### Bun
|
|
35
33
|
|
|
@@ -42,7 +40,7 @@ bun add tezx
|
|
|
42
40
|
|
|
43
41
|
```ts
|
|
44
42
|
import { TezX } from "https://deno.land/x/tezx/mod.ts";
|
|
45
|
-
```
|
|
43
|
+
```
|
|
46
44
|
-->
|
|
47
45
|
|
|
48
46
|
---
|
|
@@ -51,58 +49,58 @@ import { TezX } from "https://deno.land/x/tezx/mod.ts";
|
|
|
51
49
|
|
|
52
50
|
```ts
|
|
53
51
|
import { TezX } from "tezx";
|
|
54
|
-
import { logger } from "tezx/
|
|
55
|
-
import {
|
|
52
|
+
import { logger } from "tezx/logger";
|
|
53
|
+
import { createServer } from "node:http";
|
|
54
|
+
import { mountTezXOnNode } from "tezx/node";
|
|
56
55
|
|
|
57
56
|
const app = new TezX();
|
|
58
57
|
app.use(logger());
|
|
59
|
-
|
|
60
58
|
app.static("/", "./static");
|
|
61
59
|
|
|
62
|
-
app.get("/", (ctx) =>
|
|
63
|
-
|
|
60
|
+
app.get("/", (ctx) =>
|
|
61
|
+
ctx.html(`
|
|
64
62
|
<h1>Welcome to TezX</h1>
|
|
65
|
-
<p>A modern, high-performance cross-
|
|
66
|
-
`)
|
|
67
|
-
|
|
63
|
+
<p>A modern, high-performance, cross-runtime JavaScript framework.</p>
|
|
64
|
+
`)
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const server = createServer();
|
|
68
|
+
mountTezXOnNode(app, server);
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
const PORT = process.env.PORT || 3000;
|
|
71
|
+
server.listen(PORT, () => {
|
|
72
|
+
console.log(`🚀 TezX is running at http://localhost:${PORT}`);
|
|
71
73
|
});
|
|
72
74
|
```
|
|
73
75
|
|
|
74
76
|
---
|
|
75
77
|
|
|
76
|
-
## ▶
|
|
78
|
+
## ▶ Starting the Server
|
|
77
79
|
|
|
78
80
|
### Node.js
|
|
79
81
|
|
|
80
82
|
```bash
|
|
81
83
|
node server.js
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
For development:
|
|
85
|
-
|
|
86
|
-
```bash
|
|
84
|
+
# or
|
|
87
85
|
npm install -g nodemon
|
|
88
86
|
nodemon server.js
|
|
89
87
|
```
|
|
90
88
|
|
|
91
|
-
###
|
|
89
|
+
### Bun
|
|
92
90
|
|
|
93
91
|
```bash
|
|
94
|
-
|
|
92
|
+
bun run server.js
|
|
95
93
|
```
|
|
96
94
|
|
|
97
|
-
###
|
|
95
|
+
### Deno
|
|
98
96
|
|
|
99
97
|
```bash
|
|
100
|
-
|
|
98
|
+
deno run --allow-all server.ts
|
|
101
99
|
```
|
|
102
100
|
|
|
103
101
|
---
|
|
104
102
|
|
|
105
|
-
##
|
|
103
|
+
## 🔌 Middleware Usage
|
|
106
104
|
|
|
107
105
|
```ts
|
|
108
106
|
app.use((ctx, next) => {
|
|
@@ -113,22 +111,24 @@ app.use((ctx, next) => {
|
|
|
113
111
|
|
|
114
112
|
---
|
|
115
113
|
|
|
116
|
-
##
|
|
114
|
+
## 🗂 Static File Serving
|
|
117
115
|
|
|
118
116
|
```ts
|
|
119
117
|
app.static("/public", "./public");
|
|
120
118
|
```
|
|
121
119
|
|
|
122
|
-
|
|
120
|
+
Accessible via: `http://localhost:3000/public/filename.ext`
|
|
123
121
|
|
|
124
122
|
---
|
|
125
123
|
|
|
126
|
-
##
|
|
124
|
+
## 🧭 Routing
|
|
127
125
|
|
|
128
126
|
```ts
|
|
129
127
|
app.get("/about", (ctx) => ctx.html("<h1>About Us</h1>"));
|
|
130
128
|
|
|
131
|
-
app.post("/submit", (ctx) =>
|
|
129
|
+
app.post("/submit", (ctx) =>
|
|
130
|
+
ctx.json({ message: "Form submitted successfully" })
|
|
131
|
+
);
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
---
|
|
@@ -145,72 +145,101 @@ app.onError((err, ctx) => {
|
|
|
145
145
|
|
|
146
146
|
## 🧪 Development Setup
|
|
147
147
|
|
|
148
|
-
### Clone and Install
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
git clone https://github.com/tezxjs/tezx-app-example
|
|
152
|
-
cd tezx-app-example
|
|
153
|
-
npm install tezx@latest
|
|
154
|
-
```
|
|
155
|
-
|
|
156
148
|
### Run Dev Server
|
|
157
149
|
|
|
158
150
|
```bash
|
|
159
151
|
npm run dev
|
|
152
|
+
# or
|
|
153
|
+
bun run dev
|
|
160
154
|
```
|
|
161
155
|
|
|
162
|
-
|
|
156
|
+
Access: [http://localhost:3000](http://localhost:3000)
|
|
163
157
|
|
|
164
158
|
---
|
|
165
159
|
|
|
166
160
|
## ⚙️ Platform-Specific Scripts
|
|
167
161
|
|
|
168
|
-
### Node.js
|
|
162
|
+
### Node.js – `package.json`
|
|
169
163
|
|
|
170
164
|
```json
|
|
171
|
-
|
|
172
|
-
"
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
165
|
+
{
|
|
166
|
+
"scripts": {
|
|
167
|
+
"clean": "rm -rf dist",
|
|
168
|
+
"build:cjs": "tsc --module CommonJS --outDir dist/cjs --removeComments",
|
|
169
|
+
"build:esm": "tsc --module ESNext --outDir dist/mjs --removeComments",
|
|
170
|
+
"build:dts": "tsc --module ESNext --outDir dist/types --declaration --emitDeclarationOnly",
|
|
171
|
+
"build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:dts",
|
|
172
|
+
"start": "node dist/index.js",
|
|
173
|
+
"nodemon": "nodemon src/index.ts",
|
|
174
|
+
"dev": "tsx watch src/index.ts"
|
|
175
|
+
}
|
|
180
176
|
}
|
|
181
177
|
```
|
|
182
178
|
|
|
183
|
-
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
### Bun – `package.json`
|
|
184
182
|
|
|
185
183
|
```json
|
|
186
|
-
|
|
187
|
-
"
|
|
184
|
+
{
|
|
185
|
+
"scripts": {
|
|
186
|
+
"dev": "bun run --hot --watch src/index.ts"
|
|
187
|
+
}
|
|
188
188
|
}
|
|
189
189
|
```
|
|
190
190
|
|
|
191
|
-
`src/index.ts
|
|
191
|
+
#### Example: `src/index.ts`
|
|
192
192
|
|
|
193
193
|
```ts
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
194
|
+
Bun.serve({
|
|
195
|
+
port: 3001,
|
|
196
|
+
reusePort: true,
|
|
197
|
+
fetch(req, server) {
|
|
198
|
+
return app.serve(req, server);
|
|
199
|
+
},
|
|
200
|
+
websocket: {
|
|
201
|
+
open(ws) {
|
|
202
|
+
console.log("WebSocket connected");
|
|
203
|
+
return ws.data?.open?.(ws);
|
|
204
|
+
},
|
|
205
|
+
message(ws, msg) {
|
|
206
|
+
return ws.data?.message?.(ws, msg);
|
|
207
|
+
},
|
|
208
|
+
close(ws, code, reason) {
|
|
209
|
+
return ws.data?.close?.(ws, { code, reason });
|
|
210
|
+
},
|
|
211
|
+
ping(ws, data) {
|
|
212
|
+
return ws.data?.ping?.(ws, data);
|
|
213
|
+
},
|
|
214
|
+
pong(ws, data) {
|
|
215
|
+
return ws.data?.pong?.(ws, data);
|
|
216
|
+
},
|
|
217
|
+
drain(ws) {
|
|
218
|
+
return ws.data?.drain?.(ws);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
197
221
|
});
|
|
222
|
+
|
|
223
|
+
console.log(`🚀 Server running at http://localhost:${process.env.PORT}`);
|
|
198
224
|
```
|
|
199
225
|
|
|
200
|
-
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
### Deno – `package.json`
|
|
201
229
|
|
|
202
230
|
```json
|
|
203
|
-
|
|
204
|
-
"
|
|
231
|
+
{
|
|
232
|
+
"scripts": {
|
|
233
|
+
"dev": "deno run --watch --allow-all --unstable-sloppy-imports src/index.ts"
|
|
234
|
+
}
|
|
205
235
|
}
|
|
206
236
|
```
|
|
207
237
|
|
|
208
|
-
`src/index.ts
|
|
238
|
+
#### Example: `src/index.ts`
|
|
209
239
|
|
|
210
240
|
```ts
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
console.log(message);
|
|
241
|
+
Deno.serve({ port: Number(Deno.env.get("PORT") || 5000) }, (req, connInfo) => {
|
|
242
|
+
return app.serve(req, connInfo);
|
|
214
243
|
});
|
|
215
244
|
```
|
|
216
245
|
|
|
@@ -218,39 +247,47 @@ denoAdapter(app).listen(3000, (message) => {
|
|
|
218
247
|
|
|
219
248
|
## 🏗 Build & Deployment
|
|
220
249
|
|
|
221
|
-
### Compile TypeScript
|
|
222
|
-
|
|
223
|
-
Using `tsc`:
|
|
250
|
+
### Compile TypeScript
|
|
224
251
|
|
|
225
252
|
```bash
|
|
226
253
|
npm run build
|
|
227
254
|
```
|
|
228
255
|
|
|
256
|
+
Outputs:
|
|
257
|
+
|
|
258
|
+
- CommonJS (`dist/cjs`)
|
|
259
|
+
- ESM (`dist/mjs`)
|
|
260
|
+
- Type Declarations (`dist/types`)
|
|
261
|
+
|
|
229
262
|
---
|
|
230
263
|
|
|
231
264
|
## 🤝 Contributing
|
|
232
265
|
|
|
233
|
-
We welcome contributions!
|
|
266
|
+
We welcome all contributions! Here's how to get started:
|
|
234
267
|
|
|
235
268
|
- Fork the repository
|
|
269
|
+
- Create a new branch
|
|
236
270
|
- Submit a pull request
|
|
237
|
-
- Open
|
|
271
|
+
- Open issues for bugs or ideas
|
|
238
272
|
|
|
239
|
-
GitHub: [https://github.com/tezxjs](https://github.com/tezxjs)
|
|
273
|
+
👉 GitHub: [https://github.com/tezxjs](https://github.com/tezxjs)
|
|
240
274
|
|
|
241
275
|
---
|
|
242
276
|
|
|
243
|
-
## 💖
|
|
277
|
+
## 💖 Support TezX
|
|
278
|
+
|
|
279
|
+
TezX is open-source and developed with love. If you find it helpful:
|
|
244
280
|
|
|
245
|
-
|
|
281
|
+
- 🌟 Star the project on [GitHub](https://github.com/tezxjs/TezX)
|
|
282
|
+
- 💸 [Sponsor on GitHub](https://github.com/sponsors/srakib17)
|
|
246
283
|
|
|
247
|
-
- 🌟 [Star on GitHub](https://github.com/tezxjs/TezX)
|
|
248
284
|
<!-- - ☕ [Buy Me a Coffee](https://www.buymeacoffee.com/srakib17) -->
|
|
249
|
-
- 💸 Become a sponsor on [GitHub Sponsors](https://github.com/sponsors/srakib17)
|
|
250
285
|
|
|
251
|
-
Your support helps
|
|
286
|
+
Your support helps improve and maintain TezX for everyone.
|
|
252
287
|
|
|
253
|
-
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## 🙌 Sponsor
|
|
254
291
|
|
|
255
292
|
[](https://papernxt.com)
|
|
256
293
|
|
|
@@ -258,6 +295,4 @@ Your support helps us maintain and improve TezX for developers around the world.
|
|
|
258
295
|
|
|
259
296
|
## 📜 License
|
|
260
297
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
---
|
|
298
|
+
This project is licensed under the [MIT License](./LICENSE).
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Middleware } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Middleware to extract and inject connection information into the request context.
|
|
4
|
+
*
|
|
5
|
+
* This middleware reads the socket's remote address information (like IP, port, and family)
|
|
6
|
+
* from the request object and attaches it to `ctx.req.remoteAddress`.
|
|
7
|
+
*
|
|
8
|
+
* @returns {Middleware<any>} The middleware function that sets `ctx.req.remoteAddress`.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* import { getConnInfo } from "tezx/bun";
|
|
12
|
+
*
|
|
13
|
+
* app.use(getConnInfo());
|
|
14
|
+
*
|
|
15
|
+
* // Access later in route handler:
|
|
16
|
+
* router.get("/", (ctx) => {
|
|
17
|
+
* const ip = ctx.req.remoteAddress?.address;
|
|
18
|
+
* return new Response(`Your IP: ${ip}`);
|
|
19
|
+
* });
|
|
20
|
+
*/
|
|
21
|
+
export declare function getConnInfo(): Middleware<any>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { loadEnv } from "../node/env.js";
|
|
2
|
+
import { getConnInfo } from "./getConnInfo.js";
|
|
3
|
+
import upgradeWebSocket from "./ws.js";
|
|
4
|
+
export type { WebSocketCallback, WebSocketEvent, WebSocketOptions } from "../types/index.js";
|
|
5
|
+
export { getConnInfo, loadEnv, upgradeWebSocket };
|
|
6
|
+
declare const _default: {
|
|
7
|
+
getConnInfo: typeof getConnInfo;
|
|
8
|
+
loadEnv: typeof loadEnv;
|
|
9
|
+
upgradeWebSocket: typeof upgradeWebSocket;
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
package/dist/bun/ws.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Middleware, WebSocketCallback, WebSocketOptions } from "../types/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a middleware that upgrades an HTTP request to a WebSocket connection
|
|
4
|
+
* if the request meets the WebSocket upgrade protocol.
|
|
5
|
+
*
|
|
6
|
+
* Supports Bun natively. Node.js requires `req` + `socket` to be passed correctly.
|
|
7
|
+
*/
|
|
8
|
+
export declare function upgradeWebSocket<T extends Record<string, any> & {
|
|
9
|
+
wsProtocol: "wss" | "ws";
|
|
10
|
+
}, Path extends string = any>(callback: WebSocketCallback, options?: WebSocketOptions): Middleware<T, Path>;
|
|
11
|
+
export default upgradeWebSocket;
|
package/dist/bun/ws.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export function upgradeWebSocket(callback, options = {}) {
|
|
2
|
+
const { onUpgradeError = (error, ctx) => {
|
|
3
|
+
ctx.setStatus = 401;
|
|
4
|
+
return ctx.text(error.message);
|
|
5
|
+
}, } = options;
|
|
6
|
+
return async (ctx, next) => {
|
|
7
|
+
const upgrade = ctx.req.header("upgrade")?.toLowerCase();
|
|
8
|
+
const connection = ctx.req.header("connection")?.toLowerCase();
|
|
9
|
+
const key = ctx.req.header("sec-websocket-key");
|
|
10
|
+
if (upgrade !== "websocket" || !connection?.includes("upgrade") || !key) {
|
|
11
|
+
if (next) {
|
|
12
|
+
ctx.body = { error: "401 Bad Request: Invalid WebSocket headers" };
|
|
13
|
+
return next();
|
|
14
|
+
}
|
|
15
|
+
ctx.setStatus = 401;
|
|
16
|
+
return onUpgradeError(new Error("401 Bad Request: Invalid WebSocket headers"), ctx);
|
|
17
|
+
}
|
|
18
|
+
ctx.wsProtocol = ctx.url?.startsWith("https") ? "wss" : "ws";
|
|
19
|
+
if (!callback) {
|
|
20
|
+
throw new Error("WebSocket callback is missing. Please provide a valid callback function to handle the WebSocket events.");
|
|
21
|
+
}
|
|
22
|
+
let args = ctx.args[0];
|
|
23
|
+
if (!args?.upgrade) {
|
|
24
|
+
return onUpgradeError(new Error("Bun server instance missing for WebSocket"), ctx);
|
|
25
|
+
}
|
|
26
|
+
const success = args.upgrade(ctx.rawRequest, {
|
|
27
|
+
data: callback(ctx)
|
|
28
|
+
});
|
|
29
|
+
if (success)
|
|
30
|
+
return undefined;
|
|
31
|
+
return next();
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export default upgradeWebSocket;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getConnInfo = getConnInfo;
|
|
4
|
+
function getConnInfo() {
|
|
5
|
+
return (ctx, next) => {
|
|
6
|
+
let server = ctx.args?.[0];
|
|
7
|
+
if (server && server.requestIP) {
|
|
8
|
+
ctx.req.remoteAddress = server.requestIP(ctx.rawRequest);
|
|
9
|
+
}
|
|
10
|
+
return next();
|
|
11
|
+
};
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.upgradeWebSocket = exports.loadEnv = exports.getConnInfo = void 0;
|
|
7
|
+
const env_js_1 = require("../node/env.js");
|
|
8
|
+
Object.defineProperty(exports, "loadEnv", { enumerable: true, get: function () { return env_js_1.loadEnv; } });
|
|
9
|
+
const getConnInfo_js_1 = require("./getConnInfo.js");
|
|
10
|
+
Object.defineProperty(exports, "getConnInfo", { enumerable: true, get: function () { return getConnInfo_js_1.getConnInfo; } });
|
|
11
|
+
const ws_js_1 = __importDefault(require("./ws.js"));
|
|
12
|
+
exports.upgradeWebSocket = ws_js_1.default;
|
|
13
|
+
exports.default = {
|
|
14
|
+
getConnInfo: getConnInfo_js_1.getConnInfo,
|
|
15
|
+
loadEnv: env_js_1.loadEnv,
|
|
16
|
+
upgradeWebSocket: ws_js_1.default
|
|
17
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.upgradeWebSocket = upgradeWebSocket;
|
|
4
|
+
function upgradeWebSocket(callback, options = {}) {
|
|
5
|
+
const { onUpgradeError = (error, ctx) => {
|
|
6
|
+
ctx.setStatus = 401;
|
|
7
|
+
return ctx.text(error.message);
|
|
8
|
+
}, } = options;
|
|
9
|
+
return async (ctx, next) => {
|
|
10
|
+
const upgrade = ctx.req.header("upgrade")?.toLowerCase();
|
|
11
|
+
const connection = ctx.req.header("connection")?.toLowerCase();
|
|
12
|
+
const key = ctx.req.header("sec-websocket-key");
|
|
13
|
+
if (upgrade !== "websocket" || !connection?.includes("upgrade") || !key) {
|
|
14
|
+
if (next) {
|
|
15
|
+
ctx.body = { error: "401 Bad Request: Invalid WebSocket headers" };
|
|
16
|
+
return next();
|
|
17
|
+
}
|
|
18
|
+
ctx.setStatus = 401;
|
|
19
|
+
return onUpgradeError(new Error("401 Bad Request: Invalid WebSocket headers"), ctx);
|
|
20
|
+
}
|
|
21
|
+
ctx.wsProtocol = ctx.url?.startsWith("https") ? "wss" : "ws";
|
|
22
|
+
if (!callback) {
|
|
23
|
+
throw new Error("WebSocket callback is missing. Please provide a valid callback function to handle the WebSocket events.");
|
|
24
|
+
}
|
|
25
|
+
let args = ctx.args[0];
|
|
26
|
+
if (!args?.upgrade) {
|
|
27
|
+
return onUpgradeError(new Error("Bun server instance missing for WebSocket"), ctx);
|
|
28
|
+
}
|
|
29
|
+
const success = args.upgrade(ctx.rawRequest, {
|
|
30
|
+
data: callback(ctx)
|
|
31
|
+
});
|
|
32
|
+
if (success)
|
|
33
|
+
return undefined;
|
|
34
|
+
return next();
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
exports.default = upgradeWebSocket;
|
|
@@ -2,20 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GlobalConfig = void 0;
|
|
4
4
|
const debugging_js_1 = require("../utils/debugging.js");
|
|
5
|
-
const
|
|
5
|
+
const runtime_js_1 = require("../utils/runtime.js");
|
|
6
6
|
let GlobalConfig = class {
|
|
7
|
-
static notFound = (ctx) => {
|
|
8
|
-
const { method, urlRef: { pathname }, } = ctx.req;
|
|
9
|
-
return ctx.text(`${method}: '${pathname}' could not find\n`, 404);
|
|
10
|
-
};
|
|
11
|
-
static onError = (err, ctx) => {
|
|
12
|
-
return ctx.text(err, 500);
|
|
13
|
-
};
|
|
14
|
-
static allowDuplicateMw = false;
|
|
15
|
-
static overwriteMethod = true;
|
|
16
7
|
static debugMode = false;
|
|
17
8
|
static server;
|
|
18
|
-
static adapter =
|
|
9
|
+
static adapter = runtime_js_1.runtime;
|
|
19
10
|
static get debugging() {
|
|
20
11
|
return this.debugMode
|
|
21
12
|
? {
|