vafast 0.4.2 → 0.4.4

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 (293) hide show
  1. package/README.md +6 -10
  2. package/dist/base-server-CSkyjEaY.mjs +113 -0
  3. package/dist/base-server-CSkyjEaY.mjs.map +1 -0
  4. package/dist/base-server-DvGS6ATg.d.mts +40 -0
  5. package/dist/base64url-0N9uQPjZ.d.mts +6 -0
  6. package/dist/base64url-CwQnvZyp.mjs +13 -0
  7. package/dist/base64url-CwQnvZyp.mjs.map +1 -0
  8. package/dist/chunk-DW4-Jl94.mjs +37 -0
  9. package/dist/component-route-CYxLOnci.mjs +1 -0
  10. package/dist/component-route-CZawYn61.d.mts +31 -0
  11. package/dist/component-router-CErbGh2A.mjs +33 -0
  12. package/dist/component-router-CErbGh2A.mjs.map +1 -0
  13. package/dist/component-server-CGzU4bss.d.mts +38 -0
  14. package/dist/component-server-DAbIyIPI.mjs +124 -0
  15. package/dist/component-server-DAbIyIPI.mjs.map +1 -0
  16. package/dist/create-handler-B_pfxh3m.mjs +166 -0
  17. package/dist/create-handler-B_pfxh3m.mjs.map +1 -0
  18. package/dist/{utils/create-handler.d.ts → create-handler-Bo-hvWp-.d.mts} +24 -24
  19. package/dist/{defineRoute.d.ts → defineRoute.d.mts} +20 -17
  20. package/dist/defineRoute.mjs +93 -0
  21. package/dist/defineRoute.mjs.map +1 -0
  22. package/dist/dependency-manager-C6vFWP2L.d.mts +27 -0
  23. package/dist/dependency-manager-Czg7Po2j.mjs +61 -0
  24. package/dist/dependency-manager-Czg7Po2j.mjs.map +1 -0
  25. package/dist/formats-CYLwo9GJ.d.mts +42 -0
  26. package/dist/go-await-BGAGJfrB.mjs +33 -0
  27. package/dist/go-await-BGAGJfrB.mjs.map +1 -0
  28. package/dist/{utils/go-await.d.ts → go-await-DRItVwwh.d.mts} +4 -2
  29. package/dist/handle-Csjtywdc.mjs +30 -0
  30. package/dist/handle-Csjtywdc.mjs.map +1 -0
  31. package/dist/{utils/handle.d.ts → handle-D0TFoOiX.d.mts} +8 -6
  32. package/dist/html-renderer-CMGKJoIy.d.mts +22 -0
  33. package/dist/{utils/html-renderer.js → html-renderer-CczE8mwC.mjs} +34 -29
  34. package/dist/html-renderer-CczE8mwC.mjs.map +1 -0
  35. package/dist/index-Ci52vt55.d.mts +48 -0
  36. package/dist/index-CzItj62a.d.mts +1 -0
  37. package/dist/index.d.mts +30 -0
  38. package/dist/index.mjs +37 -0
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/middleware/{component-renderer.d.ts → component-renderer.d.mts} +3 -1
  41. package/dist/middleware/component-renderer.mjs +119 -0
  42. package/dist/middleware/component-renderer.mjs.map +1 -0
  43. package/dist/middleware/{component-router.d.ts → component-router.d.mts} +5 -4
  44. package/dist/middleware/component-router.mjs +4 -0
  45. package/dist/middleware-Byp3Hjae.mjs +59 -0
  46. package/dist/middleware-Byp3Hjae.mjs.map +1 -0
  47. package/dist/middleware.d.mts +25 -0
  48. package/dist/middleware.mjs +4 -0
  49. package/dist/monitoring/index.d.mts +33 -0
  50. package/dist/monitoring/index.mjs +27 -0
  51. package/dist/monitoring/index.mjs.map +1 -0
  52. package/dist/monitoring/native-monitor.d.mts +48 -0
  53. package/dist/monitoring/native-monitor.mjs +154 -0
  54. package/dist/monitoring/native-monitor.mjs.map +1 -0
  55. package/dist/monitoring/types.d.mts +150 -0
  56. package/dist/monitoring/types.mjs +1 -0
  57. package/dist/node-server/index.d.mts +4 -0
  58. package/dist/node-server/index.mjs +5 -0
  59. package/dist/node-server/{request.d.ts → request.d.mts} +4 -6
  60. package/dist/node-server/request.mjs +3 -0
  61. package/dist/node-server/{response.d.ts → response.d.mts} +4 -6
  62. package/dist/node-server/response.mjs +3 -0
  63. package/dist/node-server/serve.d.mts +2 -0
  64. package/dist/node-server/serve.mjs +4 -0
  65. package/dist/{utils/parsers.d.ts → parsers-7lvt3Oss.d.mts} +10 -8
  66. package/dist/parsers-CI_TZ7pO.mjs +168 -0
  67. package/dist/parsers-CI_TZ7pO.mjs.map +1 -0
  68. package/dist/path-matcher-73cJd5Y7.mjs +62 -0
  69. package/dist/path-matcher-73cJd5Y7.mjs.map +1 -0
  70. package/dist/radix-tree-D0XYaJKb.mjs +157 -0
  71. package/dist/radix-tree-D0XYaJKb.mjs.map +1 -0
  72. package/dist/request-CKC3Ox6M.mjs +133 -0
  73. package/dist/request-CKC3Ox6M.mjs.map +1 -0
  74. package/dist/request-validator-42lY21gn.d.mts +67 -0
  75. package/dist/request-validator-_J5HloRq.mjs +77 -0
  76. package/dist/request-validator-_J5HloRq.mjs.map +1 -0
  77. package/dist/{utils/response.d.ts → response-A-sZZiJ7.d.mts} +4 -2
  78. package/dist/response-Cf5FgtmE.mjs +72 -0
  79. package/dist/response-Cf5FgtmE.mjs.map +1 -0
  80. package/dist/response-DXg4i_yh.mjs +97 -0
  81. package/dist/response-DXg4i_yh.mjs.map +1 -0
  82. package/dist/route-9pAVP1GC.mjs +11 -0
  83. package/dist/route-9pAVP1GC.mjs.map +1 -0
  84. package/dist/route-BJ-40LNI.d.mts +44 -0
  85. package/dist/route-registry--tx1PNui.d.mts +176 -0
  86. package/dist/route-registry-mcTG0M-t.mjs +225 -0
  87. package/dist/route-registry-mcTG0M-t.mjs.map +1 -0
  88. package/dist/router/index.d.mts +5 -0
  89. package/dist/router/index.mjs +10 -0
  90. package/dist/router/index.mjs.map +1 -0
  91. package/dist/router/radix-tree.d.mts +60 -0
  92. package/dist/router/radix-tree.mjs +4 -0
  93. package/dist/router-B9HUUCkR.mjs +71 -0
  94. package/dist/router-B9HUUCkR.mjs.map +1 -0
  95. package/dist/{router.d.ts → router.d.mts} +6 -7
  96. package/dist/router.mjs +4 -0
  97. package/dist/schema-CPQudJpE.d.mts +81 -0
  98. package/dist/schema-CtVBNfnQ.mjs +1 -0
  99. package/dist/serve-B5WmhK6m.d.mts +69 -0
  100. package/dist/serve-Be6NvuQk.mjs +107 -0
  101. package/dist/serve-Be6NvuQk.mjs.map +1 -0
  102. package/dist/serve.d.mts +2 -0
  103. package/dist/serve.mjs +4 -0
  104. package/dist/server/base-server.d.mts +4 -0
  105. package/dist/server/base-server.mjs +4 -0
  106. package/dist/server/component-server.d.mts +5 -0
  107. package/dist/server/component-server.mjs +5 -0
  108. package/dist/server/index.d.mts +7 -0
  109. package/dist/server/index.mjs +8 -0
  110. package/dist/server/server-factory.d.mts +7 -0
  111. package/dist/server/server-factory.mjs +6 -0
  112. package/dist/server/server.d.mts +5 -0
  113. package/dist/server/server.mjs +4 -0
  114. package/dist/server-BmPKs8oM.mjs +137 -0
  115. package/dist/server-BmPKs8oM.mjs.map +1 -0
  116. package/dist/server-Cbd3Ia51.mjs +88 -0
  117. package/dist/server-Cbd3Ia51.mjs.map +1 -0
  118. package/dist/server-D9gjszHe.d.mts +60 -0
  119. package/dist/sse-BMM6KTfy.d.mts +65 -0
  120. package/dist/sse-BT5yyLgX.mjs +87 -0
  121. package/dist/sse-BT5yyLgX.mjs.map +1 -0
  122. package/dist/types/component-route.d.mts +2 -0
  123. package/dist/types/component-route.mjs +1 -0
  124. package/dist/types/index.d.mts +6 -0
  125. package/dist/types/index.mjs +3 -0
  126. package/dist/types/route.d.mts +2 -0
  127. package/dist/types/route.mjs +3 -0
  128. package/dist/types/schema.d.mts +2 -0
  129. package/dist/types/schema.mjs +1 -0
  130. package/dist/types/types.d.mts +2 -0
  131. package/dist/types/types.mjs +1 -0
  132. package/dist/{types/types.d.ts → types-DuTa8AVN.d.mts} +27 -25
  133. package/dist/utils/base64url.d.mts +2 -0
  134. package/dist/utils/base64url.mjs +3 -0
  135. package/dist/utils/create-handler.d.mts +3 -0
  136. package/dist/utils/create-handler.mjs +5 -0
  137. package/dist/utils/dependency-manager.d.mts +2 -0
  138. package/dist/utils/dependency-manager.mjs +4 -0
  139. package/dist/utils/formats.d.mts +2 -0
  140. package/dist/utils/formats.mjs +129 -0
  141. package/dist/utils/formats.mjs.map +1 -0
  142. package/dist/utils/go-await.d.mts +2 -0
  143. package/dist/utils/go-await.mjs +3 -0
  144. package/dist/utils/handle.d.mts +2 -0
  145. package/dist/utils/handle.mjs +4 -0
  146. package/dist/utils/html-renderer.d.mts +2 -0
  147. package/dist/utils/html-renderer.mjs +4 -0
  148. package/dist/utils/index.d.mts +16 -0
  149. package/dist/utils/index.mjs +23 -0
  150. package/dist/utils/index.mjs.map +1 -0
  151. package/dist/utils/parsers.d.mts +2 -0
  152. package/dist/utils/parsers.mjs +3 -0
  153. package/dist/utils/path-matcher.d.mts +27 -0
  154. package/dist/utils/path-matcher.mjs +4 -0
  155. package/dist/utils/request-validator.d.mts +3 -0
  156. package/dist/utils/request-validator.mjs +5 -0
  157. package/dist/utils/response.d.mts +2 -0
  158. package/dist/utils/response.mjs +4 -0
  159. package/dist/utils/route-registry.d.mts +4 -0
  160. package/dist/utils/route-registry.mjs +4 -0
  161. package/dist/utils/sse.d.mts +3 -0
  162. package/dist/utils/sse.mjs +5 -0
  163. package/dist/utils/validators/validators.d.mts +2 -0
  164. package/dist/utils/validators/validators.mjs +3 -0
  165. package/dist/validators-BBrGePBr.mjs +112 -0
  166. package/dist/validators-BBrGePBr.mjs.map +1 -0
  167. package/dist/validators-CPmnj_y9.d.mts +67 -0
  168. package/package.json +16 -18
  169. package/dist/auth/token.d.ts +0 -42
  170. package/dist/auth/token.js +0 -131
  171. package/dist/auth/token.js.map +0 -1
  172. package/dist/defineRoute.js +0 -37
  173. package/dist/defineRoute.js.map +0 -1
  174. package/dist/index.d.ts +0 -32
  175. package/dist/index.js +0 -2578
  176. package/dist/index.js.map +0 -1
  177. package/dist/middleware/auth.d.ts +0 -16
  178. package/dist/middleware/auth.js +0 -205
  179. package/dist/middleware/auth.js.map +0 -1
  180. package/dist/middleware/authMiddleware.d.ts +0 -5
  181. package/dist/middleware/authMiddleware.js +0 -57
  182. package/dist/middleware/authMiddleware.js.map +0 -1
  183. package/dist/middleware/component-renderer.js +0 -139
  184. package/dist/middleware/component-renderer.js.map +0 -1
  185. package/dist/middleware/component-router.js +0 -36
  186. package/dist/middleware/component-router.js.map +0 -1
  187. package/dist/middleware/cors.d.ts +0 -12
  188. package/dist/middleware/cors.js +0 -43
  189. package/dist/middleware/cors.js.map +0 -1
  190. package/dist/middleware/rateLimit.d.ts +0 -10
  191. package/dist/middleware/rateLimit.js +0 -49
  192. package/dist/middleware/rateLimit.js.map +0 -1
  193. package/dist/middleware.d.ts +0 -21
  194. package/dist/middleware.js +0 -102
  195. package/dist/middleware.js.map +0 -1
  196. package/dist/monitoring/index.d.ts +0 -36
  197. package/dist/monitoring/index.js +0 -1487
  198. package/dist/monitoring/index.js.map +0 -1
  199. package/dist/monitoring/native-monitor.d.ts +0 -44
  200. package/dist/monitoring/native-monitor.js +0 -1454
  201. package/dist/monitoring/native-monitor.js.map +0 -1
  202. package/dist/monitoring/types.d.ts +0 -148
  203. package/dist/monitoring/types.js +0 -8
  204. package/dist/monitoring/types.js.map +0 -1
  205. package/dist/node-server/index.d.ts +0 -4
  206. package/dist/node-server/index.js +0 -298
  207. package/dist/node-server/index.js.map +0 -1
  208. package/dist/node-server/request.js +0 -125
  209. package/dist/node-server/request.js.map +0 -1
  210. package/dist/node-server/response.js +0 -76
  211. package/dist/node-server/response.js.map +0 -1
  212. package/dist/node-server/serve.d.ts +0 -71
  213. package/dist/node-server/serve.js +0 -281
  214. package/dist/node-server/serve.js.map +0 -1
  215. package/dist/router/index.d.ts +0 -3
  216. package/dist/router/index.js +0 -232
  217. package/dist/router/index.js.map +0 -1
  218. package/dist/router/radix-tree.d.ts +0 -66
  219. package/dist/router/radix-tree.js +0 -190
  220. package/dist/router/radix-tree.js.map +0 -1
  221. package/dist/router.js +0 -44
  222. package/dist/router.js.map +0 -1
  223. package/dist/serve.d.ts +0 -2
  224. package/dist/serve.js +0 -281
  225. package/dist/serve.js.map +0 -1
  226. package/dist/server/base-server.d.ts +0 -37
  227. package/dist/server/base-server.js +0 -134
  228. package/dist/server/base-server.js.map +0 -1
  229. package/dist/server/component-server.d.ts +0 -37
  230. package/dist/server/component-server.js +0 -488
  231. package/dist/server/component-server.js.map +0 -1
  232. package/dist/server/index.d.ts +0 -8
  233. package/dist/server/index.js +0 -1159
  234. package/dist/server/index.js.map +0 -1
  235. package/dist/server/server-factory.d.ts +0 -48
  236. package/dist/server/server-factory.js +0 -1156
  237. package/dist/server/server-factory.js.map +0 -1
  238. package/dist/server/server.d.ts +0 -64
  239. package/dist/server/server.js +0 -737
  240. package/dist/server/server.js.map +0 -1
  241. package/dist/types/component-route.d.ts +0 -29
  242. package/dist/types/component-route.js +0 -1
  243. package/dist/types/component-route.js.map +0 -1
  244. package/dist/types/index.d.ts +0 -5
  245. package/dist/types/index.js +0 -21
  246. package/dist/types/index.js.map +0 -1
  247. package/dist/types/route.d.ts +0 -42
  248. package/dist/types/route.js +0 -12
  249. package/dist/types/route.js.map +0 -1
  250. package/dist/types/schema.d.ts +0 -79
  251. package/dist/types/schema.js +0 -10
  252. package/dist/types/schema.js.map +0 -1
  253. package/dist/types/types.js +0 -1
  254. package/dist/types/types.js.map +0 -1
  255. package/dist/utils/base64url.d.ts +0 -4
  256. package/dist/utils/base64url.js +0 -14
  257. package/dist/utils/base64url.js.map +0 -1
  258. package/dist/utils/create-handler.js +0 -299
  259. package/dist/utils/create-handler.js.map +0 -1
  260. package/dist/utils/dependency-manager.d.ts +0 -25
  261. package/dist/utils/dependency-manager.js +0 -71
  262. package/dist/utils/dependency-manager.js.map +0 -1
  263. package/dist/utils/formats.d.ts +0 -40
  264. package/dist/utils/formats.js +0 -116
  265. package/dist/utils/formats.js.map +0 -1
  266. package/dist/utils/go-await.js +0 -16
  267. package/dist/utils/go-await.js.map +0 -1
  268. package/dist/utils/handle.js +0 -48
  269. package/dist/utils/handle.js.map +0 -1
  270. package/dist/utils/html-renderer.d.ts +0 -20
  271. package/dist/utils/html-renderer.js.map +0 -1
  272. package/dist/utils/index.d.ts +0 -16
  273. package/dist/utils/index.js +0 -1038
  274. package/dist/utils/index.js.map +0 -1
  275. package/dist/utils/parsers.js +0 -160
  276. package/dist/utils/parsers.js.map +0 -1
  277. package/dist/utils/path-matcher.d.ts +0 -25
  278. package/dist/utils/path-matcher.js +0 -73
  279. package/dist/utils/path-matcher.js.map +0 -1
  280. package/dist/utils/request-validator.d.ts +0 -66
  281. package/dist/utils/request-validator.js +0 -158
  282. package/dist/utils/request-validator.js.map +0 -1
  283. package/dist/utils/response.js +0 -102
  284. package/dist/utils/response.js.map +0 -1
  285. package/dist/utils/route-registry.d.ts +0 -195
  286. package/dist/utils/route-registry.js +0 -152
  287. package/dist/utils/route-registry.js.map +0 -1
  288. package/dist/utils/sse.d.ts +0 -87
  289. package/dist/utils/sse.js +0 -181
  290. package/dist/utils/sse.js.map +0 -1
  291. package/dist/utils/validators/validators.d.ts +0 -76
  292. package/dist/utils/validators/validators.js +0 -97
  293. package/dist/utils/validators/validators.js.map +0 -1
@@ -1,49 +0,0 @@
1
- // src/middleware.ts
2
- var VafastError = class extends Error {
3
- status;
4
- type;
5
- expose;
6
- constructor(message, options = {}) {
7
- super(message);
8
- this.name = "VafastError";
9
- this.status = options.status ?? 500;
10
- this.type = options.type ?? "internal_error";
11
- this.expose = options.expose ?? false;
12
- if (options.cause) this.cause = options.cause;
13
- }
14
- };
15
-
16
- // src/middleware/rateLimit.ts
17
- var store = /* @__PURE__ */ new Map();
18
- function rateLimit(options = {}) {
19
- const windowMs = options.windowMs ?? 6e4;
20
- const max = options.max ?? 30;
21
- const keyFn = options.keyFn ?? getIP;
22
- return async (req, next) => {
23
- const key = keyFn(req);
24
- const now = Date.now();
25
- const entry = store.get(key);
26
- if (entry && entry.expires > now) {
27
- if (entry.count >= max) {
28
- throw new VafastError("Too many requests", {
29
- status: 429,
30
- type: "rate_limit",
31
- expose: true
32
- });
33
- }
34
- entry.count += 1;
35
- } else {
36
- store.set(key, { count: 1, expires: now + windowMs });
37
- }
38
- return next();
39
- };
40
- }
41
- function getIP(req) {
42
- return req.headers.get("cf-connecting-ip") || // Cloudflare
43
- req.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || // Vercel
44
- "unknown";
45
- }
46
- export {
47
- rateLimit
48
- };
49
- //# sourceMappingURL=rateLimit.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/middleware.ts","../../src/middleware/rateLimit.ts"],"sourcesContent":["// src/middleware.ts\n\nimport { json, mapResponse } from \"./utils/response\";\n\nimport type { Handler, Middleware } from \"./types\";\n/** 中间件类型:使用 next() 传递给下一个处理 */\n\n/** Vafast 自定义错误类型 */\nexport class VafastError extends Error {\n status: number;\n type: string;\n expose: boolean;\n\n constructor(\n message: string,\n options: {\n status?: number;\n type?: string;\n expose?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message);\n this.name = \"VafastError\";\n this.status = options.status ?? 500;\n this.type = options.type ?? \"internal_error\";\n this.expose = options.expose ?? false;\n if (options.cause) (this as any).cause = options.cause;\n }\n}\n\n/**\n * 组合类型: 自动注入错误处理器进行中间件组合\n */\nexport function composeMiddleware(\n middleware: Middleware[],\n finalHandler: Handler,\n): (req: Request) => Promise<Response> {\n const all = [errorHandler, ...middleware];\n\n return function composedHandler(req: Request): Promise<Response> {\n let i = -1;\n\n const dispatch = (index: number): Promise<Response> => {\n if (index <= i)\n return Promise.reject(new Error(\"next() called multiple times\"));\n i = index;\n\n // 中间件阶段\n if (index < all.length) {\n const mw = all[index];\n return Promise.resolve(mw(req, () => dispatch(index + 1)));\n }\n\n // 最终 handler - 使用 mapResponse 转换返回值\n return Promise.resolve(finalHandler(req)).then(mapResponse);\n };\n\n return dispatch(0);\n };\n}\n\n/** 默认包含的全局错误处理器 */\nconst errorHandler: Middleware = async (req, next) => {\n try {\n return await next();\n } catch (err) {\n console.error(\"未处理的错误:\", err);\n\n if (err instanceof VafastError) {\n return json(\n {\n error: err.type,\n message: err.expose ? err.message : \"发生了一个错误\",\n },\n err.status,\n );\n }\n\n return json({ error: \"internal_error\", message: \"出现了一些问题\" }, 500);\n }\n};\n","// src/middleware/rateLimit.ts\n\nimport type { Middleware } from \"../types\";\nimport { VafastError } from \"../middleware\";\n\ninterface RateLimitOptions {\n windowMs?: number; // 限制窗口(毫秒)\n max?: number; // 最大请求数\n keyFn?: (req: Request) => string;\n}\n\ntype Entry = {\n count: number;\n expires: number;\n};\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(options: RateLimitOptions = {}): Middleware {\n const windowMs = options.windowMs ?? 60_000; // 默认: 1分钟\n const max = options.max ?? 30;\n const keyFn = options.keyFn ?? getIP;\n\n return async (req, next) => {\n const key = keyFn(req);\n const now = Date.now();\n\n const entry = store.get(key);\n if (entry && entry.expires > now) {\n if (entry.count >= max) {\n throw new VafastError(\"Too many requests\", {\n status: 429,\n type: \"rate_limit\",\n expose: true,\n });\n }\n entry.count += 1;\n } else {\n store.set(key, { count: 1, expires: now + windowMs });\n }\n\n return next();\n };\n}\n\n// Edge 安全的 IP 获取\nfunction getIP(req: Request): string {\n return (\n req.headers.get(\"cf-connecting-ip\") || // Cloudflare\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || // Vercel\n \"unknown\"\n );\n}\n"],"mappings":";AAQO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACE,SACA,UAKI,CAAC,GACL;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,SAAS,QAAQ,UAAU;AAChC,QAAI,QAAQ,MAAO,CAAC,KAAa,QAAQ,QAAQ;AAAA,EACnD;AACF;;;ACbA,IAAM,QAAQ,oBAAI,IAAmB;AAE9B,SAAS,UAAU,UAA4B,CAAC,GAAe;AACpE,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,MAAM,QAAQ,OAAO;AAC3B,QAAM,QAAQ,QAAQ,SAAS;AAE/B,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,MAAM,MAAM,GAAG;AACrB,UAAM,MAAM,KAAK,IAAI;AAErB,UAAM,QAAQ,MAAM,IAAI,GAAG;AAC3B,QAAI,SAAS,MAAM,UAAU,KAAK;AAChC,UAAI,MAAM,SAAS,KAAK;AACtB,cAAM,IAAI,YAAY,qBAAqB;AAAA,UACzC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AACA,YAAM,SAAS;AAAA,IACjB,OAAO;AACL,YAAM,IAAI,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,SAAS,CAAC;AAAA,IACtD;AAEA,WAAO,KAAK;AAAA,EACd;AACF;AAGA,SAAS,MAAM,KAAsB;AACnC,SACE,IAAI,QAAQ,IAAI,kBAAkB;AAAA,EAClC,IAAI,QAAQ,IAAI,iBAAiB,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK;AAAA,EACxD;AAEJ;","names":[]}
@@ -1,21 +0,0 @@
1
- import { Middleware, Handler } from './types/types.js';
2
-
3
- /** 中间件类型:使用 next() 传递给下一个处理 */
4
- /** Vafast 自定义错误类型 */
5
- declare class VafastError extends Error {
6
- status: number;
7
- type: string;
8
- expose: boolean;
9
- constructor(message: string, options?: {
10
- status?: number;
11
- type?: string;
12
- expose?: boolean;
13
- cause?: unknown;
14
- });
15
- }
16
- /**
17
- * 组合类型: 自动注入错误处理器进行中间件组合
18
- */
19
- declare function composeMiddleware(middleware: Middleware[], finalHandler: Handler): (req: Request) => Promise<Response>;
20
-
21
- export { VafastError, composeMiddleware };
@@ -1,102 +0,0 @@
1
- // src/utils/response.ts
2
- function json(data, status = 200, headers = {}) {
3
- const body = JSON.stringify(data);
4
- if (Object.keys(headers).length === 0) {
5
- return new Response(body, {
6
- status,
7
- headers: { "Content-Type": "application/json" }
8
- });
9
- }
10
- const h = new Headers({
11
- "Content-Type": "application/json",
12
- ...headers
13
- });
14
- return new Response(body, {
15
- status,
16
- headers: h
17
- });
18
- }
19
- var JSON_HEADERS = { "Content-Type": "application/json" };
20
- var TEXT_HEADERS = { "Content-Type": "text/plain" };
21
- function mapResponse(response) {
22
- if (response instanceof Response) return response;
23
- switch (response?.constructor?.name) {
24
- case "String":
25
- return new Response(response, { headers: TEXT_HEADERS });
26
- case "Object":
27
- case "Array":
28
- return new Response(JSON.stringify(response), { headers: JSON_HEADERS });
29
- case "Number":
30
- case "Boolean":
31
- return new Response(String(response), { headers: TEXT_HEADERS });
32
- case void 0:
33
- return new Response(null, { status: 204 });
34
- case "ReadableStream":
35
- return new Response(response);
36
- case "Blob":
37
- return new Response(response);
38
- case "ArrayBuffer":
39
- return new Response(response);
40
- case "Uint8Array":
41
- return new Response(response);
42
- default:
43
- if (response instanceof Promise) {
44
- return response.then(mapResponse);
45
- }
46
- return new Response(JSON.stringify(response), { headers: JSON_HEADERS });
47
- }
48
- }
49
-
50
- // src/middleware.ts
51
- var VafastError = class extends Error {
52
- status;
53
- type;
54
- expose;
55
- constructor(message, options = {}) {
56
- super(message);
57
- this.name = "VafastError";
58
- this.status = options.status ?? 500;
59
- this.type = options.type ?? "internal_error";
60
- this.expose = options.expose ?? false;
61
- if (options.cause) this.cause = options.cause;
62
- }
63
- };
64
- function composeMiddleware(middleware, finalHandler) {
65
- const all = [errorHandler, ...middleware];
66
- return function composedHandler(req) {
67
- let i = -1;
68
- const dispatch = (index) => {
69
- if (index <= i)
70
- return Promise.reject(new Error("next() called multiple times"));
71
- i = index;
72
- if (index < all.length) {
73
- const mw = all[index];
74
- return Promise.resolve(mw(req, () => dispatch(index + 1)));
75
- }
76
- return Promise.resolve(finalHandler(req)).then(mapResponse);
77
- };
78
- return dispatch(0);
79
- };
80
- }
81
- var errorHandler = async (req, next) => {
82
- try {
83
- return await next();
84
- } catch (err) {
85
- console.error("\u672A\u5904\u7406\u7684\u9519\u8BEF:", err);
86
- if (err instanceof VafastError) {
87
- return json(
88
- {
89
- error: err.type,
90
- message: err.expose ? err.message : "\u53D1\u751F\u4E86\u4E00\u4E2A\u9519\u8BEF"
91
- },
92
- err.status
93
- );
94
- }
95
- return json({ error: "internal_error", message: "\u51FA\u73B0\u4E86\u4E00\u4E9B\u95EE\u9898" }, 500);
96
- }
97
- };
98
- export {
99
- VafastError,
100
- composeMiddleware
101
- };
102
- //# sourceMappingURL=middleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/response.ts","../src/middleware.ts"],"sourcesContent":["// src/response.ts\n\n/** 生成 JSON 响应 */\nexport function json(\n data: unknown,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const body = JSON.stringify(data);\n\n // 优化:只在有自定义 headers 时才创建 Headers 对象\n if (Object.keys(headers).length === 0) {\n return new Response(body, {\n status,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // 有自定义 headers 时才创建 Headers 对象\n const h = new Headers({\n \"Content-Type\": \"application/json\",\n ...headers,\n });\n\n return new Response(body, {\n status,\n headers: h,\n });\n}\n\n// JSON 响应的预创建 headers(避免每次创建)\nconst JSON_HEADERS = { \"Content-Type\": \"application/json\" };\nconst TEXT_HEADERS = { \"Content-Type\": \"text/plain\" };\n\n/**\n * 类型特化的响应映射\n * 根据返回值类型直接生成 Response,避免不必要的检查\n */\nexport function mapResponse(response: unknown): Response {\n // 快速路径:已经是 Response\n if (response instanceof Response) return response;\n\n // 使用 constructor.name 进行类型判断(比 instanceof 更快)\n switch (response?.constructor?.name) {\n case \"String\":\n return new Response(response as string, { headers: TEXT_HEADERS });\n\n case \"Object\":\n case \"Array\":\n return new Response(JSON.stringify(response), { headers: JSON_HEADERS });\n\n case \"Number\":\n case \"Boolean\":\n return new Response(String(response), { headers: TEXT_HEADERS });\n\n case undefined:\n // null 或 undefined\n return new Response(null, { status: 204 });\n\n case \"ReadableStream\":\n return new Response(response as ReadableStream);\n\n case \"Blob\":\n return new Response(response as Blob);\n\n case \"ArrayBuffer\":\n return new Response(response as ArrayBuffer);\n\n case \"Uint8Array\":\n return new Response(response as unknown as BodyInit);\n\n default:\n // Promise 处理\n if (response instanceof Promise) {\n return response.then(mapResponse) as unknown as Response;\n }\n // 其他情况使用 JSON 序列化\n return new Response(JSON.stringify(response), { headers: JSON_HEADERS });\n }\n}\n\n/** 生成重定向响应 */\nexport function redirect(location: string, status: 301 | 302 = 302): Response {\n return new Response(null, {\n status,\n headers: {\n Location: location,\n },\n });\n}\n\n/** 生成纯文本响应 */\nexport function text(\n content: string,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n ...headers,\n });\n\n return new Response(content, {\n status,\n headers: h,\n });\n}\n\n/** 生成HTML响应 */\nexport function html(\n content: string,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"text/html; charset=utf-8\",\n ...headers,\n });\n\n return new Response(content, {\n status,\n headers: h,\n });\n}\n\n/** 生成空响应(204 No Content) */\nexport function empty(status = 204, headers: HeadersInit = {}): Response {\n return new Response(null, {\n status,\n headers,\n });\n}\n\n/** 生成流式响应 */\nexport function stream(\n stream: ReadableStream,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"application/octet-stream\",\n ...headers,\n });\n\n return new Response(stream, {\n status,\n headers: h,\n });\n}\n","// src/middleware.ts\n\nimport { json, mapResponse } from \"./utils/response\";\n\nimport type { Handler, Middleware } from \"./types\";\n/** 中间件类型:使用 next() 传递给下一个处理 */\n\n/** Vafast 自定义错误类型 */\nexport class VafastError extends Error {\n status: number;\n type: string;\n expose: boolean;\n\n constructor(\n message: string,\n options: {\n status?: number;\n type?: string;\n expose?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message);\n this.name = \"VafastError\";\n this.status = options.status ?? 500;\n this.type = options.type ?? \"internal_error\";\n this.expose = options.expose ?? false;\n if (options.cause) (this as any).cause = options.cause;\n }\n}\n\n/**\n * 组合类型: 自动注入错误处理器进行中间件组合\n */\nexport function composeMiddleware(\n middleware: Middleware[],\n finalHandler: Handler,\n): (req: Request) => Promise<Response> {\n const all = [errorHandler, ...middleware];\n\n return function composedHandler(req: Request): Promise<Response> {\n let i = -1;\n\n const dispatch = (index: number): Promise<Response> => {\n if (index <= i)\n return Promise.reject(new Error(\"next() called multiple times\"));\n i = index;\n\n // 中间件阶段\n if (index < all.length) {\n const mw = all[index];\n return Promise.resolve(mw(req, () => dispatch(index + 1)));\n }\n\n // 最终 handler - 使用 mapResponse 转换返回值\n return Promise.resolve(finalHandler(req)).then(mapResponse);\n };\n\n return dispatch(0);\n };\n}\n\n/** 默认包含的全局错误处理器 */\nconst errorHandler: Middleware = async (req, next) => {\n try {\n return await next();\n } catch (err) {\n console.error(\"未处理的错误:\", err);\n\n if (err instanceof VafastError) {\n return json(\n {\n error: err.type,\n message: err.expose ? err.message : \"发生了一个错误\",\n },\n err.status,\n );\n }\n\n return json({ error: \"internal_error\", message: \"出现了一些问题\" }, 500);\n }\n};\n"],"mappings":"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","names":[]}
@@ -1,36 +0,0 @@
1
- export { AggregatedMetrics, BaseMetrics, MonitoringConfig, MonitoringEvent, PerformanceMetrics, PerformanceReport } from './types.js';
2
- export { MonitoredServer, NativeMonitoringConfig, NativeMonitoringMetrics, createMonitoredServer, withMonitoring } from './native-monitor.js';
3
- import '../server/server.js';
4
- import '../types/types.js';
5
- import '../server/base-server.js';
6
-
7
- /**
8
- * 原生监控系统入口
9
- *
10
- * @author Framework Team
11
- * @version 2.0.0
12
- * @license MIT
13
- */
14
-
15
- declare const defaultMonitoringConfig: {
16
- enabled: boolean;
17
- console: boolean;
18
- slowThreshold: number;
19
- errorThreshold: number;
20
- tags: {
21
- framework: string;
22
- version: string;
23
- };
24
- };
25
- declare function createMonitoringConfig(config?: Partial<typeof defaultMonitoringConfig>): {
26
- enabled: boolean;
27
- console: boolean;
28
- slowThreshold: number;
29
- errorThreshold: number;
30
- tags: {
31
- framework: string;
32
- version: string;
33
- };
34
- };
35
-
36
- export { createMonitoringConfig, defaultMonitoringConfig };