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.
Files changed (239) hide show
  1. package/README.md +124 -89
  2. package/dist/bun/getConnInfo.d.ts +21 -0
  3. package/dist/bun/getConnInfo.js +9 -0
  4. package/dist/bun/index.d.ts +11 -0
  5. package/dist/bun/index.js +9 -0
  6. package/dist/bun/ws.d.ts +11 -0
  7. package/dist/bun/ws.js +34 -0
  8. package/dist/cjs/bun/getConnInfo.js +12 -0
  9. package/dist/cjs/bun/index.js +17 -0
  10. package/dist/cjs/bun/ws.js +37 -0
  11. package/{cjs → dist/cjs}/core/config.js +2 -11
  12. package/dist/cjs/core/context.js +179 -0
  13. package/dist/cjs/core/request.js +98 -0
  14. package/dist/cjs/core/router.js +197 -0
  15. package/dist/cjs/core/server.js +126 -0
  16. package/{cjs → dist/cjs}/deno/env.js +3 -4
  17. package/dist/cjs/deno/getConnInfo.js +18 -0
  18. package/dist/cjs/deno/index.js +14 -0
  19. package/dist/cjs/deno/ws.js +38 -0
  20. package/dist/cjs/helper/index.js +43 -0
  21. package/dist/cjs/index.js +13 -0
  22. package/{cjs/middleware/basicAuth.js → dist/cjs/middleware/basic-auth/index.js} +19 -17
  23. package/{cjs/middleware/cacheControl.js → dist/cjs/middleware/cache-control/index.js} +8 -7
  24. package/{cjs/middleware/cors.js → dist/cjs/middleware/cors/index.js} +9 -8
  25. package/{cjs/middleware/detectBot.js → dist/cjs/middleware/detect-bot/index.js} +5 -43
  26. package/{cjs/middleware/detectLocale.js → dist/cjs/middleware/detect-locale/index.js} +6 -4
  27. package/{cjs/middleware/i18n.js → dist/cjs/middleware/i18n/index.js} +21 -7
  28. package/{cjs/middleware/lazyLoadModules.js → dist/cjs/middleware/lazy-loader/index.js} +6 -5
  29. package/{cjs/middleware/logger.js → dist/cjs/middleware/logger/index.js} +2 -1
  30. package/{cjs/middleware/pagination.js → dist/cjs/middleware/pagination/index.js} +2 -1
  31. package/{cjs/middleware/powered-by.js → dist/cjs/middleware/powered-by/index.js} +3 -2
  32. package/{cjs/middleware/rateLimiter.js → dist/cjs/middleware/rate-limiter/index.js} +7 -7
  33. package/dist/cjs/middleware/request-id/index.js +17 -0
  34. package/{cjs/middleware/requestTimeout.js → dist/cjs/middleware/request-timeout/index.js} +4 -3
  35. package/dist/cjs/middleware/sanitize-headers/index.js +54 -0
  36. package/{cjs/middleware/secureHeaders.js → dist/cjs/middleware/secure-headers/index.js} +9 -8
  37. package/{cjs/middleware/xssProtection.js → dist/cjs/middleware/xss-protection/index.js} +6 -5
  38. package/{cjs → dist/cjs}/node/env.js +3 -4
  39. package/dist/cjs/node/getConnInfo.js +16 -0
  40. package/dist/cjs/node/index.js +20 -0
  41. package/dist/cjs/node/mount-node.js +56 -0
  42. package/dist/cjs/node/toWebRequest.js +21 -0
  43. package/dist/cjs/node/ws.js +48 -0
  44. package/dist/cjs/registry/RadixRouter.js +146 -0
  45. package/{cjs/node → dist/cjs/registry}/index.js +1 -8
  46. package/dist/cjs/types/index.js +15 -0
  47. package/{cjs → dist/cjs}/utils/colors.js +2 -0
  48. package/dist/cjs/utils/cookie.js +59 -0
  49. package/dist/cjs/utils/file.js +114 -0
  50. package/dist/cjs/utils/formData.js +57 -0
  51. package/dist/cjs/utils/generateID.js +26 -0
  52. package/dist/cjs/utils/low-level.js +115 -0
  53. package/dist/cjs/utils/rateLimit.js +41 -0
  54. package/{cjs → dist/cjs}/utils/regexRouter.js +2 -2
  55. package/dist/cjs/utils/response.js +45 -0
  56. package/{cjs/core/environment.js → dist/cjs/utils/runtime.js} +2 -1
  57. package/{cjs → dist/cjs}/utils/staticFile.js +16 -51
  58. package/dist/cjs/utils/url.js +70 -0
  59. package/{core → dist/core}/config.d.ts +2 -6
  60. package/{core → dist/core}/config.js +2 -11
  61. package/dist/core/context.d.ts +249 -0
  62. package/dist/core/context.js +175 -0
  63. package/dist/core/request.d.ts +96 -0
  64. package/dist/core/request.js +94 -0
  65. package/dist/core/router.d.ts +208 -0
  66. package/dist/core/router.js +193 -0
  67. package/dist/core/server.d.ts +145 -0
  68. package/dist/core/server.js +122 -0
  69. package/{deno → dist/deno}/env.js +1 -2
  70. package/dist/deno/getConnInfo.d.ts +21 -0
  71. package/dist/deno/getConnInfo.js +15 -0
  72. package/dist/deno/index.d.ts +12 -0
  73. package/dist/deno/index.js +9 -0
  74. package/dist/deno/ws.d.ts +42 -0
  75. package/dist/deno/ws.js +35 -0
  76. package/dist/helper/index.d.ts +46 -0
  77. package/dist/helper/index.js +21 -0
  78. package/dist/index.d.ts +14 -0
  79. package/dist/index.js +9 -0
  80. package/{middleware/basicAuth.d.ts → dist/middleware/basic-auth/index.d.ts} +6 -4
  81. package/{middleware/basicAuth.js → dist/middleware/basic-auth/index.js} +16 -14
  82. package/{middleware/cacheControl.d.ts → dist/middleware/cache-control/index.d.ts} +4 -3
  83. package/{middleware/cacheControl.js → dist/middleware/cache-control/index.js} +8 -7
  84. package/dist/middleware/cors/index.d.ts +51 -0
  85. package/{middleware/cors.js → dist/middleware/cors/index.js} +10 -9
  86. package/{middleware/detectBot.d.ts → dist/middleware/detect-bot/index.d.ts} +12 -22
  87. package/{middleware/detectBot.js → dist/middleware/detect-bot/index.js} +3 -39
  88. package/{middleware/detectLocale.d.ts → dist/middleware/detect-locale/index.d.ts} +3 -2
  89. package/{middleware/detectLocale.js → dist/middleware/detect-locale/index.js} +6 -4
  90. package/{middleware/i18n.d.ts → dist/middleware/i18n/index.d.ts} +3 -2
  91. package/{middleware/i18n.js → dist/middleware/i18n/index.js} +21 -7
  92. package/{middleware/lazyLoadModules.d.ts → dist/middleware/lazy-loader/index.d.ts} +3 -2
  93. package/{middleware/lazyLoadModules.js → dist/middleware/lazy-loader/index.js} +4 -3
  94. package/{middleware/logger.d.ts → dist/middleware/logger/index.d.ts} +4 -3
  95. package/{middleware/logger.js → dist/middleware/logger/index.js} +3 -2
  96. package/{middleware/pagination.d.ts → dist/middleware/pagination/index.d.ts} +3 -2
  97. package/{middleware/pagination.js → dist/middleware/pagination/index.js} +2 -1
  98. package/{middleware/powered-by.d.ts → dist/middleware/powered-by/index.d.ts} +3 -2
  99. package/dist/middleware/powered-by/index.js +7 -0
  100. package/{middleware/rateLimiter.d.ts → dist/middleware/rate-limiter/index.d.ts} +12 -4
  101. package/{middleware/rateLimiter.js → dist/middleware/rate-limiter/index.js} +5 -5
  102. package/{middleware/request-id.d.ts → dist/middleware/request-id/index.d.ts} +3 -2
  103. package/dist/middleware/request-id/index.js +13 -0
  104. package/{middleware/requestTimeout.d.ts → dist/middleware/request-timeout/index.d.ts} +5 -4
  105. package/{middleware/requestTimeout.js → dist/middleware/request-timeout/index.js} +4 -3
  106. package/{middleware/sanitizeHeader.d.ts → dist/middleware/sanitize-headers/index.d.ts} +3 -9
  107. package/dist/middleware/sanitize-headers/index.js +50 -0
  108. package/{middleware/secureHeaders.d.ts → dist/middleware/secure-headers/index.d.ts} +3 -3
  109. package/{middleware/secureHeaders.js → dist/middleware/secure-headers/index.js} +9 -8
  110. package/{middleware/xssProtection.d.ts → dist/middleware/xss-protection/index.d.ts} +4 -3
  111. package/{middleware/xssProtection.js → dist/middleware/xss-protection/index.js} +6 -5
  112. package/{node → dist/node}/env.js +1 -2
  113. package/dist/node/getConnInfo.d.ts +21 -0
  114. package/dist/node/getConnInfo.js +13 -0
  115. package/dist/node/index.d.ts +16 -0
  116. package/dist/node/index.js +13 -0
  117. package/dist/node/mount-node.d.ts +11 -0
  118. package/dist/node/mount-node.js +53 -0
  119. package/dist/node/toWebRequest.js +18 -0
  120. package/dist/node/ws.d.ts +56 -0
  121. package/dist/node/ws.js +45 -0
  122. package/dist/registry/RadixRouter.d.ts +47 -0
  123. package/dist/registry/RadixRouter.js +142 -0
  124. package/dist/registry/index.d.ts +2 -0
  125. package/dist/registry/index.js +1 -0
  126. package/dist/types/index.d.ts +322 -0
  127. package/dist/types/index.js +12 -0
  128. package/dist/utils/colors.d.ts +46 -0
  129. package/{utils → dist/utils}/colors.js +2 -0
  130. package/dist/utils/cookie.d.ts +55 -0
  131. package/dist/utils/cookie.js +53 -0
  132. package/dist/utils/file.d.ts +34 -0
  133. package/dist/utils/file.js +75 -0
  134. package/dist/utils/formData.d.ts +41 -0
  135. package/dist/utils/formData.js +53 -0
  136. package/dist/utils/generateID.d.ts +33 -0
  137. package/dist/utils/generateID.js +22 -0
  138. package/dist/utils/httpStatusMap.d.ts +15 -0
  139. package/dist/utils/low-level.d.ts +58 -0
  140. package/dist/utils/low-level.js +108 -0
  141. package/dist/utils/rateLimit.d.ts +19 -0
  142. package/dist/utils/rateLimit.js +37 -0
  143. package/{utils → dist/utils}/regexRouter.js +2 -2
  144. package/dist/utils/response.d.ts +8 -0
  145. package/dist/utils/response.js +39 -0
  146. package/{core/environment.d.ts → dist/utils/runtime.d.ts} +1 -0
  147. package/{core/environment.js → dist/utils/runtime.js} +1 -0
  148. package/{utils → dist/utils}/staticFile.d.ts +2 -2
  149. package/{utils → dist/utils}/staticFile.js +16 -18
  150. package/dist/utils/url.d.ts +42 -0
  151. package/dist/utils/url.js +64 -0
  152. package/package.json +108 -51
  153. package/bun/adapter.d.ts +0 -127
  154. package/bun/adapter.js +0 -97
  155. package/bun/index.d.ts +0 -9
  156. package/bun/index.js +0 -8
  157. package/cjs/bun/adapter.js +0 -100
  158. package/cjs/bun/index.js +0 -24
  159. package/cjs/core/MiddlewareConfigure.js +0 -68
  160. package/cjs/core/common.js +0 -15
  161. package/cjs/core/context.js +0 -425
  162. package/cjs/core/request.js +0 -152
  163. package/cjs/core/router.js +0 -510
  164. package/cjs/core/server.js +0 -234
  165. package/cjs/deno/adpater.js +0 -67
  166. package/cjs/deno/index.js +0 -24
  167. package/cjs/helper/common.js +0 -17
  168. package/cjs/helper/index.js +0 -20
  169. package/cjs/index.js +0 -18
  170. package/cjs/middleware/index.js +0 -68
  171. package/cjs/middleware/request-id.js +0 -15
  172. package/cjs/middleware/sanitizeHeader.js +0 -51
  173. package/cjs/node/adapter.js +0 -138
  174. package/cjs/types/index.js +0 -2
  175. package/cjs/utils/formData.js +0 -13
  176. package/cjs/utils/state.js +0 -34
  177. package/cjs/utils/toWebRequest.js +0 -35
  178. package/cjs/utils/url.js +0 -35
  179. package/cjs/ws/deno.js +0 -20
  180. package/cjs/ws/index.js +0 -53
  181. package/cjs/ws/node.js +0 -65
  182. package/core/MiddlewareConfigure.d.ts +0 -15
  183. package/core/MiddlewareConfigure.js +0 -63
  184. package/core/common.d.ts +0 -21
  185. package/core/common.js +0 -11
  186. package/core/context.d.ts +0 -215
  187. package/core/context.js +0 -388
  188. package/core/request.d.ts +0 -136
  189. package/core/request.js +0 -148
  190. package/core/router.d.ts +0 -219
  191. package/core/router.js +0 -472
  192. package/core/server.d.ts +0 -71
  193. package/core/server.js +0 -230
  194. package/deno/adpater.d.ts +0 -38
  195. package/deno/adpater.js +0 -64
  196. package/deno/index.d.ts +0 -9
  197. package/deno/index.js +0 -8
  198. package/helper/common.d.ts +0 -5
  199. package/helper/common.js +0 -14
  200. package/helper/index.d.ts +0 -32
  201. package/helper/index.js +0 -13
  202. package/index.d.ts +0 -18
  203. package/index.js +0 -12
  204. package/middleware/cors.d.ts +0 -10
  205. package/middleware/index.d.ts +0 -38
  206. package/middleware/index.js +0 -50
  207. package/middleware/powered-by.js +0 -6
  208. package/middleware/request-id.js +0 -11
  209. package/middleware/sanitizeHeader.js +0 -47
  210. package/node/adapter.d.ts +0 -46
  211. package/node/adapter.js +0 -102
  212. package/node/index.d.ts +0 -9
  213. package/node/index.js +0 -8
  214. package/types/index.d.ts +0 -59
  215. package/types/index.js +0 -1
  216. package/utils/colors.d.ts +0 -22
  217. package/utils/formData.d.ts +0 -1
  218. package/utils/formData.js +0 -10
  219. package/utils/httpStatusMap.d.ts +0 -1
  220. package/utils/state.d.ts +0 -50
  221. package/utils/state.js +0 -30
  222. package/utils/toWebRequest.js +0 -32
  223. package/utils/url.d.ts +0 -14
  224. package/utils/url.js +0 -30
  225. package/ws/deno.d.ts +0 -6
  226. package/ws/deno.js +0 -16
  227. package/ws/index.d.ts +0 -180
  228. package/ws/index.js +0 -50
  229. package/ws/node.d.ts +0 -7
  230. package/ws/node.js +0 -28
  231. /package/{cjs → dist/cjs}/utils/debugging.js +0 -0
  232. /package/{cjs → dist/cjs}/utils/httpStatusMap.js +0 -0
  233. /package/{deno → dist/deno}/env.d.ts +0 -0
  234. /package/{node → dist/node}/env.d.ts +0 -0
  235. /package/{utils → dist/node}/toWebRequest.d.ts +0 -0
  236. /package/{utils → dist/utils}/debugging.d.ts +0 -0
  237. /package/{utils → dist/utils}/debugging.js +0 -0
  238. /package/{utils → dist/utils}/httpStatusMap.js +0 -0
  239. /package/{utils → dist/utils}/regexRouter.d.ts +0 -0
package/README.md CHANGED
@@ -1,21 +1,21 @@
1
- # TezX - High-Performance JavaScript Framework
1
+ # TezX High-Performance JavaScript Framework
2
2
 
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.
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
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tezxjs/TezX)
6
6
 
7
7
  ---
8
8
 
9
- ## 🚀 Key Features
9
+ ## 🚀 Features at a Glance
10
10
 
11
- - ⚡ **High Performance** – Optimized for speed and scalability.
12
- - 🔥 **Minimal & Intuitive API** – Simple yet powerful.
13
- - 🗂️ **Built-in Static File Serving** – No additional setup required.
14
- - 🔌 **Robust Middleware Support** – Easily extend functionality.
15
- - 🧭 **Dynamic & Flexible Routing** – Define routes with ease.
16
- - 🔐 **Security First** – Designed with security best practices.
17
- - 📡 **Efficient HTTP Handling** – Built for high concurrency.
18
- - 🌍 **Cross-Environment Support** – Node.js, Deno, and Bun ready.
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/middleware";
55
- import { nodeAdapter } from "tezx/node";
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
- return ctx.html(`
60
+ app.get("/", (ctx) =>
61
+ ctx.html(`
64
62
  <h1>Welcome to TezX</h1>
65
- <p>A modern, high-performance cross-environment framework.</p>
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
- nodeAdapter(app).listen(3001, (message) => {
70
- console.log(message);
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
- ## ▶ Running the Server
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
- ### Deno
89
+ ### Bun
92
90
 
93
91
  ```bash
94
- deno run --allow-net server.ts
92
+ bun run server.js
95
93
  ```
96
94
 
97
- ### Bun
95
+ ### Deno
98
96
 
99
97
  ```bash
100
- bun run server.js
98
+ deno run --allow-all server.ts
101
99
  ```
102
100
 
103
101
  ---
104
102
 
105
- ## 🛠 Middleware Support
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
- ## 📂 Static File Serving
114
+ ## 🗂 Static File Serving
117
115
 
118
116
  ```ts
119
117
  app.static("/public", "./public");
120
118
  ```
121
119
 
122
- Files are accessible via `/public/filename.ext`.
120
+ Accessible via: `http://localhost:3000/public/filename.ext`
123
121
 
124
122
  ---
125
123
 
126
- ## 🔀 Routing
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) => ctx.json({ message: "Form submitted successfully" }));
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
- > Access at: [http://localhost:3000](http://localhost:3000)
156
+ Access: [http://localhost:3000](http://localhost:3000)
163
157
 
164
158
  ---
165
159
 
166
160
  ## ⚙️ Platform-Specific Scripts
167
161
 
168
- ### Node.js (Add to `package.json`)
162
+ ### Node.js `package.json`
169
163
 
170
164
  ```json
171
- "scripts": {
172
- "clean": "rm -rf dist",
173
- "build:cjs": "tsc --module CommonJS --outDir dist/cjs --removeComments",
174
- "build:esm": "tsc --module ESNext --outDir dist/mjs --removeComments",
175
- "build:dts": "tsc --module ESNext --outDir dist/types --declaration --emitDeclarationOnly",
176
- "build": "npm run clean && npm run build:cjs && npm run build:esm && npm run build:dts",
177
- "start": "node dist/index.js",
178
- "nodemon": "nodemon src/index.ts",
179
- "dev": "tsx watch src/index.ts"
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
- ### Bun
179
+ ---
180
+
181
+ ### Bun – `package.json`
184
182
 
185
183
  ```json
186
- "scripts": {
187
- "dev": "bun run --hot --watch src/index.ts"
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
- import { bunAdapter } from "tezx/bun";
195
- bunAdapter(app).listen(3000, (message) => {
196
- console.log(message);
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
- ### Deno
226
+ ---
227
+
228
+ ### Deno – `package.json`
201
229
 
202
230
  ```json
203
- "scripts": {
204
- "dev": "deno run --watch --allow-net --allow-read --allow-env --unstable-sloppy-imports src/index.ts"
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
- import { denoAdapter } from "tezx/deno";
212
- denoAdapter(app).listen(3000, (message) => {
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 to JavaScript
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! Feel free to:
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 an issue for bugs or suggestions
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
- ## 💖 Sponsor TezX
277
+ ## 💖 Support TezX
278
+
279
+ TezX is open-source and developed with love. If you find it helpful:
244
280
 
245
- TezX is an open-source project built with love and passion. If you find it helpful, consider supporting its development:
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 us maintain and improve TezX for developers around the world. Thank you!
286
+ Your support helps improve and maintain TezX for everyone.
252
287
 
253
- ## Our Sponsor
288
+ ---
289
+
290
+ ## 🙌 Sponsor
254
291
 
255
292
  [![papernxt](https://papernxt.com/favicon.ico)](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
- TezX is open-source software licensed under the [MIT License](./LICENSE).
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,9 @@
1
+ export function getConnInfo() {
2
+ return (ctx, next) => {
3
+ let server = ctx.args?.[0];
4
+ if (server && server.requestIP) {
5
+ ctx.req.remoteAddress = server.requestIP(ctx.rawRequest);
6
+ }
7
+ return next();
8
+ };
9
+ }
@@ -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;
@@ -0,0 +1,9 @@
1
+ import { loadEnv } from "../node/env.js";
2
+ import { getConnInfo } from "./getConnInfo.js";
3
+ import upgradeWebSocket from "./ws.js";
4
+ export { getConnInfo, loadEnv, upgradeWebSocket };
5
+ export default {
6
+ getConnInfo,
7
+ loadEnv,
8
+ upgradeWebSocket
9
+ };
@@ -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 environment_js_1 = require("./environment.js");
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 = environment_js_1.Environment.getEnvironment;
9
+ static adapter = runtime_js_1.runtime;
19
10
  static get debugging() {
20
11
  return this.debugMode
21
12
  ? {