vafast 0.4.1 → 0.4.3

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 (306) hide show
  1. package/README.md +6 -10
  2. package/dist/auth/{token.d.ts → token.d.mts} +21 -19
  3. package/dist/auth/token.mjs +105 -0
  4. package/dist/auth/token.mjs.map +1 -0
  5. package/dist/base-server-Bq4_lJWK.mjs +113 -0
  6. package/dist/base-server-Bq4_lJWK.mjs.map +1 -0
  7. package/dist/base-server-Gakrozqk.d.mts +40 -0
  8. package/dist/base64url-BY-HBSpL.d.mts +6 -0
  9. package/dist/base64url-DLDOeXsk.mjs +13 -0
  10. package/dist/base64url-DLDOeXsk.mjs.map +1 -0
  11. package/dist/chunk-67U6L5Jh.mjs +37 -0
  12. package/dist/component-route-BYV_X1rA.d.mts +31 -0
  13. package/dist/component-route-Do2yyYTi.mjs +1 -0
  14. package/dist/component-router-DXUXLp1R.mjs +33 -0
  15. package/dist/component-router-DXUXLp1R.mjs.map +1 -0
  16. package/dist/component-server-ARXvZJUQ.mjs +124 -0
  17. package/dist/component-server-ARXvZJUQ.mjs.map +1 -0
  18. package/dist/component-server-BOz4Q-Qt.d.mts +38 -0
  19. package/dist/create-handler-CbSoroA1.mjs +166 -0
  20. package/dist/create-handler-CbSoroA1.mjs.map +1 -0
  21. package/dist/{utils/create-handler.d.ts → create-handler-Dtt0xv6g.d.mts} +24 -24
  22. package/dist/{defineRoute.d.ts → defineRoute.d.mts} +20 -17
  23. package/dist/defineRoute.mjs +93 -0
  24. package/dist/defineRoute.mjs.map +1 -0
  25. package/dist/dependency-manager-CPkwMI7J.mjs +61 -0
  26. package/dist/dependency-manager-CPkwMI7J.mjs.map +1 -0
  27. package/dist/dependency-manager-Dbug5INp.d.mts +27 -0
  28. package/dist/formats-BSqJWCsG.d.mts +42 -0
  29. package/dist/go-await-B-KP-K8x.mjs +33 -0
  30. package/dist/go-await-B-KP-K8x.mjs.map +1 -0
  31. package/dist/{utils/go-await.d.ts → go-await-CqPx9dVQ.d.mts} +4 -2
  32. package/dist/handle-BhpqNgGf.mjs +30 -0
  33. package/dist/handle-BhpqNgGf.mjs.map +1 -0
  34. package/dist/{utils/handle.d.ts → handle-DOidKTI-.d.mts} +8 -6
  35. package/dist/html-renderer-C3LKTLme.d.mts +22 -0
  36. package/dist/{utils/html-renderer.js → html-renderer-CJ3B2Hft.mjs} +34 -29
  37. package/dist/html-renderer-CJ3B2Hft.mjs.map +1 -0
  38. package/dist/index-DFsQyT61.d.mts +48 -0
  39. package/dist/index-DXJd7-2Z.d.mts +1 -0
  40. package/dist/index.d.mts +35 -0
  41. package/dist/index.mjs +42 -0
  42. package/dist/index.mjs.map +1 -0
  43. package/dist/middleware/{auth.d.ts → auth.d.mts} +12 -8
  44. package/dist/middleware/auth.mjs +98 -0
  45. package/dist/middleware/auth.mjs.map +1 -0
  46. package/dist/middleware/authMiddleware.d.mts +9 -0
  47. package/dist/middleware/authMiddleware.mjs +19 -0
  48. package/dist/middleware/authMiddleware.mjs.map +1 -0
  49. package/dist/middleware/{component-renderer.d.ts → component-renderer.d.mts} +3 -1
  50. package/dist/middleware/component-renderer.mjs +119 -0
  51. package/dist/middleware/component-renderer.mjs.map +1 -0
  52. package/dist/middleware/{component-router.d.ts → component-router.d.mts} +5 -4
  53. package/dist/middleware/component-router.mjs +4 -0
  54. package/dist/middleware/cors.d.mts +16 -0
  55. package/dist/middleware/cors.mjs +38 -0
  56. package/dist/middleware/cors.mjs.map +1 -0
  57. package/dist/middleware/rateLimit.d.mts +14 -0
  58. package/dist/middleware/rateLimit.mjs +34 -0
  59. package/dist/middleware/rateLimit.mjs.map +1 -0
  60. package/dist/middleware-3ShRJyd1.mjs +59 -0
  61. package/dist/middleware-3ShRJyd1.mjs.map +1 -0
  62. package/dist/middleware.d.mts +25 -0
  63. package/dist/middleware.mjs +4 -0
  64. package/dist/monitoring/index.d.mts +33 -0
  65. package/dist/monitoring/index.mjs +27 -0
  66. package/dist/monitoring/index.mjs.map +1 -0
  67. package/dist/monitoring/native-monitor.d.mts +48 -0
  68. package/dist/monitoring/native-monitor.mjs +154 -0
  69. package/dist/monitoring/native-monitor.mjs.map +1 -0
  70. package/dist/monitoring/types.d.mts +150 -0
  71. package/dist/monitoring/types.mjs +1 -0
  72. package/dist/node-server/index.d.mts +4 -0
  73. package/dist/node-server/index.mjs +5 -0
  74. package/dist/node-server/{request.d.ts → request.d.mts} +4 -6
  75. package/dist/node-server/request.mjs +3 -0
  76. package/dist/node-server/{response.d.ts → response.d.mts} +4 -6
  77. package/dist/node-server/response.mjs +3 -0
  78. package/dist/node-server/serve.d.mts +2 -0
  79. package/dist/node-server/serve.mjs +4 -0
  80. package/dist/{utils/parsers.d.ts → parsers-CodQFP1Z.d.mts} +10 -8
  81. package/dist/parsers-ROIZWSGI.mjs +168 -0
  82. package/dist/parsers-ROIZWSGI.mjs.map +1 -0
  83. package/dist/path-matcher-CXMJ-IrG.mjs +62 -0
  84. package/dist/path-matcher-CXMJ-IrG.mjs.map +1 -0
  85. package/dist/radix-tree-BWmhTLhT.mjs +157 -0
  86. package/dist/radix-tree-BWmhTLhT.mjs.map +1 -0
  87. package/dist/request-B2BkUecT.mjs +133 -0
  88. package/dist/request-B2BkUecT.mjs.map +1 -0
  89. package/dist/request-validator-Dyqng-H_.mjs +77 -0
  90. package/dist/request-validator-Dyqng-H_.mjs.map +1 -0
  91. package/dist/request-validator-u2Ccj3_x.d.mts +67 -0
  92. package/dist/response-BhFKEphr.mjs +72 -0
  93. package/dist/response-BhFKEphr.mjs.map +1 -0
  94. package/dist/response-CSKW5hsS.mjs +97 -0
  95. package/dist/response-CSKW5hsS.mjs.map +1 -0
  96. package/dist/{utils/response.d.ts → response-CUyV5FIm.d.mts} +4 -2
  97. package/dist/route-BRR15b-p.mjs +11 -0
  98. package/dist/route-BRR15b-p.mjs.map +1 -0
  99. package/dist/route-BqmWCG4e.d.mts +44 -0
  100. package/dist/route-registry-AlkDgbcE.mjs +225 -0
  101. package/dist/route-registry-AlkDgbcE.mjs.map +1 -0
  102. package/dist/route-registry-ykzRmaHB.d.mts +176 -0
  103. package/dist/router/index.d.mts +5 -0
  104. package/dist/router/index.mjs +10 -0
  105. package/dist/router/index.mjs.map +1 -0
  106. package/dist/router/radix-tree.d.mts +60 -0
  107. package/dist/router/radix-tree.mjs +4 -0
  108. package/dist/router-BOeVQrjz.mjs +71 -0
  109. package/dist/router-BOeVQrjz.mjs.map +1 -0
  110. package/dist/{router.d.ts → router.d.mts} +6 -7
  111. package/dist/router.mjs +4 -0
  112. package/dist/schema-CVuttFSw.d.mts +81 -0
  113. package/dist/schema-CbAaktsZ.mjs +1 -0
  114. package/dist/serve-BQQ2JzIH.d.mts +69 -0
  115. package/dist/serve-MRGGK7-q.mjs +107 -0
  116. package/dist/serve-MRGGK7-q.mjs.map +1 -0
  117. package/dist/serve.d.mts +2 -0
  118. package/dist/serve.mjs +4 -0
  119. package/dist/server/base-server.d.mts +4 -0
  120. package/dist/server/base-server.mjs +4 -0
  121. package/dist/server/component-server.d.mts +5 -0
  122. package/dist/server/component-server.mjs +5 -0
  123. package/dist/server/index.d.mts +7 -0
  124. package/dist/server/index.mjs +8 -0
  125. package/dist/server/server-factory.d.mts +7 -0
  126. package/dist/server/server-factory.mjs +6 -0
  127. package/dist/server/server.d.mts +5 -0
  128. package/dist/server/server.mjs +4 -0
  129. package/dist/server-B0nzGCG5.mjs +88 -0
  130. package/dist/server-B0nzGCG5.mjs.map +1 -0
  131. package/dist/server-C8WCshmG.mjs +137 -0
  132. package/dist/server-C8WCshmG.mjs.map +1 -0
  133. package/dist/server-Drc2kSxp.d.mts +60 -0
  134. package/dist/sse-BOd2pvUK.d.mts +65 -0
  135. package/dist/sse-US5D9mgE.mjs +87 -0
  136. package/dist/sse-US5D9mgE.mjs.map +1 -0
  137. package/dist/types/component-route.d.mts +2 -0
  138. package/dist/types/component-route.mjs +1 -0
  139. package/dist/types/index.d.mts +6 -0
  140. package/dist/types/index.mjs +3 -0
  141. package/dist/types/route.d.mts +2 -0
  142. package/dist/types/route.mjs +3 -0
  143. package/dist/types/schema.d.mts +2 -0
  144. package/dist/types/schema.mjs +1 -0
  145. package/dist/types/types.d.mts +2 -0
  146. package/dist/types/types.mjs +1 -0
  147. package/dist/{types/types.d.ts → types-Cb7_2VSt.d.mts} +27 -23
  148. package/dist/utils/base64url.d.mts +2 -0
  149. package/dist/utils/base64url.mjs +3 -0
  150. package/dist/utils/create-handler.d.mts +3 -0
  151. package/dist/utils/create-handler.mjs +5 -0
  152. package/dist/utils/dependency-manager.d.mts +2 -0
  153. package/dist/utils/dependency-manager.mjs +4 -0
  154. package/dist/utils/formats.d.mts +2 -0
  155. package/dist/utils/formats.mjs +129 -0
  156. package/dist/utils/formats.mjs.map +1 -0
  157. package/dist/utils/go-await.d.mts +2 -0
  158. package/dist/utils/go-await.mjs +3 -0
  159. package/dist/utils/handle.d.mts +2 -0
  160. package/dist/utils/handle.mjs +4 -0
  161. package/dist/utils/html-renderer.d.mts +2 -0
  162. package/dist/utils/html-renderer.mjs +4 -0
  163. package/dist/utils/index.d.mts +16 -0
  164. package/dist/utils/index.mjs +23 -0
  165. package/dist/utils/index.mjs.map +1 -0
  166. package/dist/utils/parsers.d.mts +2 -0
  167. package/dist/utils/parsers.mjs +3 -0
  168. package/dist/utils/path-matcher.d.mts +27 -0
  169. package/dist/utils/path-matcher.mjs +4 -0
  170. package/dist/utils/request-validator.d.mts +3 -0
  171. package/dist/utils/request-validator.mjs +5 -0
  172. package/dist/utils/response.d.mts +2 -0
  173. package/dist/utils/response.mjs +4 -0
  174. package/dist/utils/route-registry.d.mts +4 -0
  175. package/dist/utils/route-registry.mjs +4 -0
  176. package/dist/utils/sse.d.mts +3 -0
  177. package/dist/utils/sse.mjs +5 -0
  178. package/dist/utils/validators/validators.d.mts +2 -0
  179. package/dist/utils/validators/validators.mjs +3 -0
  180. package/dist/validators-C0eZyxPh.d.mts +67 -0
  181. package/dist/validators-CbCLj0Rc.mjs +112 -0
  182. package/dist/validators-CbCLj0Rc.mjs.map +1 -0
  183. package/package.json +16 -18
  184. package/dist/auth/token.js +0 -131
  185. package/dist/auth/token.js.map +0 -1
  186. package/dist/defineRoute.js +0 -37
  187. package/dist/defineRoute.js.map +0 -1
  188. package/dist/index.d.ts +0 -32
  189. package/dist/index.js +0 -2575
  190. package/dist/index.js.map +0 -1
  191. package/dist/middleware/auth.js +0 -205
  192. package/dist/middleware/auth.js.map +0 -1
  193. package/dist/middleware/authMiddleware.d.ts +0 -5
  194. package/dist/middleware/authMiddleware.js +0 -57
  195. package/dist/middleware/authMiddleware.js.map +0 -1
  196. package/dist/middleware/component-renderer.js +0 -139
  197. package/dist/middleware/component-renderer.js.map +0 -1
  198. package/dist/middleware/component-router.js +0 -36
  199. package/dist/middleware/component-router.js.map +0 -1
  200. package/dist/middleware/cors.d.ts +0 -12
  201. package/dist/middleware/cors.js +0 -43
  202. package/dist/middleware/cors.js.map +0 -1
  203. package/dist/middleware/rateLimit.d.ts +0 -10
  204. package/dist/middleware/rateLimit.js +0 -49
  205. package/dist/middleware/rateLimit.js.map +0 -1
  206. package/dist/middleware.d.ts +0 -21
  207. package/dist/middleware.js +0 -102
  208. package/dist/middleware.js.map +0 -1
  209. package/dist/monitoring/index.d.ts +0 -36
  210. package/dist/monitoring/index.js +0 -1484
  211. package/dist/monitoring/index.js.map +0 -1
  212. package/dist/monitoring/native-monitor.d.ts +0 -44
  213. package/dist/monitoring/native-monitor.js +0 -1451
  214. package/dist/monitoring/native-monitor.js.map +0 -1
  215. package/dist/monitoring/types.d.ts +0 -148
  216. package/dist/monitoring/types.js +0 -8
  217. package/dist/monitoring/types.js.map +0 -1
  218. package/dist/node-server/index.d.ts +0 -4
  219. package/dist/node-server/index.js +0 -298
  220. package/dist/node-server/index.js.map +0 -1
  221. package/dist/node-server/request.js +0 -125
  222. package/dist/node-server/request.js.map +0 -1
  223. package/dist/node-server/response.js +0 -76
  224. package/dist/node-server/response.js.map +0 -1
  225. package/dist/node-server/serve.d.ts +0 -71
  226. package/dist/node-server/serve.js +0 -281
  227. package/dist/node-server/serve.js.map +0 -1
  228. package/dist/router/index.d.ts +0 -3
  229. package/dist/router/index.js +0 -229
  230. package/dist/router/index.js.map +0 -1
  231. package/dist/router/radix-tree.d.ts +0 -66
  232. package/dist/router/radix-tree.js +0 -190
  233. package/dist/router/radix-tree.js.map +0 -1
  234. package/dist/router.js +0 -41
  235. package/dist/router.js.map +0 -1
  236. package/dist/serve.d.ts +0 -2
  237. package/dist/serve.js +0 -281
  238. package/dist/serve.js.map +0 -1
  239. package/dist/server/base-server.d.ts +0 -37
  240. package/dist/server/base-server.js +0 -134
  241. package/dist/server/base-server.js.map +0 -1
  242. package/dist/server/component-server.d.ts +0 -37
  243. package/dist/server/component-server.js +0 -488
  244. package/dist/server/component-server.js.map +0 -1
  245. package/dist/server/index.d.ts +0 -8
  246. package/dist/server/index.js +0 -1156
  247. package/dist/server/index.js.map +0 -1
  248. package/dist/server/server-factory.d.ts +0 -48
  249. package/dist/server/server-factory.js +0 -1153
  250. package/dist/server/server-factory.js.map +0 -1
  251. package/dist/server/server.d.ts +0 -64
  252. package/dist/server/server.js +0 -734
  253. package/dist/server/server.js.map +0 -1
  254. package/dist/types/component-route.d.ts +0 -29
  255. package/dist/types/component-route.js +0 -1
  256. package/dist/types/component-route.js.map +0 -1
  257. package/dist/types/index.d.ts +0 -5
  258. package/dist/types/index.js +0 -21
  259. package/dist/types/index.js.map +0 -1
  260. package/dist/types/route.d.ts +0 -42
  261. package/dist/types/route.js +0 -12
  262. package/dist/types/route.js.map +0 -1
  263. package/dist/types/schema.d.ts +0 -79
  264. package/dist/types/schema.js +0 -10
  265. package/dist/types/schema.js.map +0 -1
  266. package/dist/types/types.js +0 -1
  267. package/dist/types/types.js.map +0 -1
  268. package/dist/utils/base64url.d.ts +0 -4
  269. package/dist/utils/base64url.js +0 -14
  270. package/dist/utils/base64url.js.map +0 -1
  271. package/dist/utils/create-handler.js +0 -299
  272. package/dist/utils/create-handler.js.map +0 -1
  273. package/dist/utils/dependency-manager.d.ts +0 -25
  274. package/dist/utils/dependency-manager.js +0 -71
  275. package/dist/utils/dependency-manager.js.map +0 -1
  276. package/dist/utils/formats.d.ts +0 -40
  277. package/dist/utils/formats.js +0 -116
  278. package/dist/utils/formats.js.map +0 -1
  279. package/dist/utils/go-await.js +0 -16
  280. package/dist/utils/go-await.js.map +0 -1
  281. package/dist/utils/handle.js +0 -48
  282. package/dist/utils/handle.js.map +0 -1
  283. package/dist/utils/html-renderer.d.ts +0 -20
  284. package/dist/utils/html-renderer.js.map +0 -1
  285. package/dist/utils/index.d.ts +0 -16
  286. package/dist/utils/index.js +0 -1038
  287. package/dist/utils/index.js.map +0 -1
  288. package/dist/utils/parsers.js +0 -160
  289. package/dist/utils/parsers.js.map +0 -1
  290. package/dist/utils/path-matcher.d.ts +0 -25
  291. package/dist/utils/path-matcher.js +0 -73
  292. package/dist/utils/path-matcher.js.map +0 -1
  293. package/dist/utils/request-validator.d.ts +0 -66
  294. package/dist/utils/request-validator.js +0 -158
  295. package/dist/utils/request-validator.js.map +0 -1
  296. package/dist/utils/response.js +0 -102
  297. package/dist/utils/response.js.map +0 -1
  298. package/dist/utils/route-registry.d.ts +0 -195
  299. package/dist/utils/route-registry.js +0 -152
  300. package/dist/utils/route-registry.js.map +0 -1
  301. package/dist/utils/sse.d.ts +0 -87
  302. package/dist/utils/sse.js +0 -181
  303. package/dist/utils/sse.js.map +0 -1
  304. package/dist/utils/validators/validators.d.ts +0 -76
  305. package/dist/utils/validators/validators.js +0 -97
  306. package/dist/utils/validators/validators.js.map +0 -1
@@ -0,0 +1,119 @@
1
+ //#region src/middleware/component-renderer.ts
2
+ /**
3
+ * 组件渲染中间件 - 专注 SSR
4
+ * 支持 Vue 和 React 的服务端渲染
5
+ */
6
+ const renderVueSSR = async (componentImport, req, preloadedDeps) => {
7
+ try {
8
+ const { createSSRApp, renderToString } = preloadedDeps || await Promise.all([import("vue"), import("@vue/server-renderer")]).then(([vue, renderer]) => ({
9
+ createSSRApp: vue.createSSRApp,
10
+ renderToString: renderer.renderToString
11
+ }));
12
+ const componentModule = await componentImport();
13
+ const app = createSSRApp(componentModule.default || componentModule);
14
+ app.provide("routeInfo", {
15
+ params: req.params || {},
16
+ query: Object.fromEntries(new URL(req.url).searchParams),
17
+ pathname: new URL(req.url).pathname
18
+ });
19
+ const html = await renderToString(app);
20
+ return new Response(`
21
+ <!doctype html>
22
+ <html>
23
+ <head>
24
+ <meta charset="utf-8">
25
+ <title>Vue SSR App</title>
26
+ </head>
27
+ <body>
28
+ <div id="app">${html}</div>
29
+ <script>
30
+ window.__ROUTE_INFO__ = {
31
+ params: ${JSON.stringify(req.params || {})},
32
+ query: ${JSON.stringify(Object.fromEntries(new URL(req.url).searchParams))},
33
+ pathname: '${new URL(req.url).pathname}'
34
+ };
35
+ <\/script>
36
+ <script type="module" src="/client.js"><\/script>
37
+ </body>
38
+ </html>
39
+ `, { headers: { "Content-Type": "text/html; charset=utf-8" } });
40
+ } catch (error) {
41
+ console.error("Vue SSR 渲染失败:", error);
42
+ return new Response(`
43
+ <!doctype html>
44
+ <html>
45
+ <head><title>渲染错误</title></head>
46
+ <body>
47
+ <h1>Vue SSR 渲染失败</h1>
48
+ <p>错误信息: ${error instanceof Error ? error.message : "未知错误"}</p>
49
+ </body>
50
+ </html>
51
+ `, { status: 500 });
52
+ }
53
+ };
54
+ const renderReactSSR = async (componentImport, req, preloadedDeps) => {
55
+ try {
56
+ const { createElement, renderToString } = preloadedDeps || await Promise.all([import("react"), import("react-dom/server")]).then(([react, renderer]) => ({
57
+ createElement: react.createElement,
58
+ renderToString: renderer.renderToString
59
+ }));
60
+ const componentModule = await componentImport();
61
+ const html = renderToString(createElement(componentModule.default || componentModule, {
62
+ req,
63
+ params: req.params || {},
64
+ query: Object.fromEntries(new URL(req.url).searchParams)
65
+ }));
66
+ return new Response(`
67
+ <!doctype html>
68
+ <html>
69
+ <head>
70
+ <meta charset="utf-8">
71
+ <title>React SSR App</title>
72
+ </head>
73
+ <body>
74
+ <div id="root">${html}</div>
75
+ <script>
76
+ window.__ROUTE_INFO__ = {
77
+ params: ${JSON.stringify(req.params || {})},
78
+ query: ${JSON.stringify(Object.fromEntries(new URL(req.url).searchParams))},
79
+ pathname: '${new URL(req.url).pathname}'
80
+ };
81
+ <\/script>
82
+ <script type="module" src="/client.js"><\/script>
83
+ </body>
84
+ </html>
85
+ `, { headers: { "Content-Type": "text/html; charset=utf-8" } });
86
+ } catch (error) {
87
+ console.error("React SSR 渲染失败:", error);
88
+ return new Response(`
89
+ <!doctype html>
90
+ <html>
91
+ <head><title>渲染错误</title></head>
92
+ <body>
93
+ <h1>React SSR 渲染失败</h1>
94
+ <p>错误信息: ${error instanceof Error ? error.message : "未知错误"}</p>
95
+ </body>
96
+ </html>
97
+ `, { status: 500 });
98
+ }
99
+ };
100
+ const vueRenderer = (preloadedDeps) => {
101
+ return async (req, next) => {
102
+ req.renderVue = async (componentImport) => {
103
+ return await renderVueSSR(componentImport, req, preloadedDeps);
104
+ };
105
+ return next();
106
+ };
107
+ };
108
+ const reactRenderer = (preloadedDeps) => {
109
+ return async (req, next) => {
110
+ req.renderReact = async (componentImport) => {
111
+ return await renderReactSSR(componentImport, req, preloadedDeps);
112
+ };
113
+ return next();
114
+ };
115
+ };
116
+
117
+ //#endregion
118
+ export { reactRenderer, vueRenderer };
119
+ //# sourceMappingURL=component-renderer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-renderer.mjs","names":[],"sources":["../../src/middleware/component-renderer.ts"],"sourcesContent":["/**\n * 组件渲染中间件 - 专注 SSR\n * 支持 Vue 和 React 的服务端渲染\n */\n\n// Vue SSR 渲染\nconst renderVueSSR = async (\n componentImport: () => Promise<any>,\n req: Request,\n preloadedDeps?: any,\n) => {\n try {\n // 使用预加载的依赖或动态导入\n const { createSSRApp, renderToString } =\n preloadedDeps ||\n (await Promise.all([import(\"vue\"), import(\"@vue/server-renderer\")]).then(\n ([vue, renderer]) => ({\n createSSRApp: vue.createSSRApp,\n renderToString: renderer.renderToString,\n }),\n ));\n\n const componentModule = await componentImport();\n const component = componentModule.default || componentModule;\n\n const app = createSSRApp(component);\n\n // 提供路由信息\n app.provide(\"routeInfo\", {\n params: (req as any).params || {},\n query: Object.fromEntries(new URL(req.url).searchParams),\n pathname: new URL(req.url).pathname,\n });\n\n const html = await renderToString(app);\n\n return new Response(\n `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vue SSR App</title>\n </head>\n <body>\n <div id=\"app\">${html}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify((req as any).params || {})},\n query: ${JSON.stringify(Object.fromEntries(new URL(req.url).searchParams))},\n pathname: '${new URL(req.url).pathname}'\n };\n </script>\n <script type=\"module\" src=\"/client.js\"></script>\n </body>\n </html>\n `,\n {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n },\n );\n } catch (error) {\n console.error(\"Vue SSR 渲染失败:\", error);\n return new Response(\n `\n <!doctype html>\n <html>\n <head><title>渲染错误</title></head>\n <body>\n <h1>Vue SSR 渲染失败</h1>\n <p>错误信息: ${error instanceof Error ? error.message : \"未知错误\"}</p>\n </body>\n </html>\n `,\n { status: 500 },\n );\n }\n};\n\n// React SSR 渲染\nconst renderReactSSR = async (\n componentImport: () => Promise<any>,\n req: Request,\n preloadedDeps?: any,\n) => {\n try {\n // 使用预加载的依赖或动态导入\n const { createElement, renderToString } =\n preloadedDeps ||\n (await Promise.all([import(\"react\"), import(\"react-dom/server\")]).then(\n ([react, renderer]) => ({\n createElement: react.createElement,\n renderToString: renderer.renderToString,\n }),\n ));\n\n const componentModule = await componentImport();\n const Component = componentModule.default || componentModule;\n\n const content = createElement(Component, {\n req,\n params: (req as any).params || {},\n query: Object.fromEntries(new URL(req.url).searchParams),\n });\n\n const html = renderToString(content);\n\n return new Response(\n `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>React SSR App</title>\n </head>\n <body>\n <div id=\"root\">${html}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify((req as any).params || {})},\n query: ${JSON.stringify(Object.fromEntries(new URL(req.url).searchParams))},\n pathname: '${new URL(req.url).pathname}'\n };\n </script>\n <script type=\"module\" src=\"/client.js\"></script>\n </body>\n </html>\n `,\n {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n },\n );\n } catch (error) {\n console.error(\"React SSR 渲染失败:\", error);\n return new Response(\n `\n <!doctype html>\n <html>\n <head><title>渲染错误</title></head>\n <body>\n <h1>React SSR 渲染失败</h1>\n <p>错误信息: ${error instanceof Error ? error.message : \"未知错误\"}</p>\n </body>\n </html>\n `,\n { status: 500 },\n );\n }\n};\n\n// Vue 组件渲染器 - 专注 SSR\nexport const vueRenderer = (preloadedDeps?: any) => {\n return async (req: Request, next: () => Promise<Response>) => {\n (req as any).renderVue = async (componentImport: () => Promise<any>) => {\n return await renderVueSSR(componentImport, req, preloadedDeps);\n };\n return next();\n };\n};\n\n// React 组件渲染器 - 专注 SSR\nexport const reactRenderer = (preloadedDeps?: any) => {\n return async (req: Request, next: () => Promise<Response>) => {\n (req as any).renderReact = async (componentImport: () => Promise<any>) => {\n return await renderReactSSR(componentImport, req, preloadedDeps);\n };\n return next();\n };\n};\n"],"mappings":";;;;;AAMA,MAAM,eAAe,OACnB,iBACA,KACA,kBACG;AACH,KAAI;EAEF,MAAM,EAAE,cAAc,mBACpB,iBACC,MAAM,QAAQ,IAAI,CAAC,OAAO,QAAQ,OAAO,wBAAwB,CAAC,CAAC,MACjE,CAAC,KAAK,eAAe;GACpB,cAAc,IAAI;GAClB,gBAAgB,SAAS;GAC1B,EACF;EAEH,MAAM,kBAAkB,MAAM,iBAAiB;EAG/C,MAAM,MAAM,aAFM,gBAAgB,WAAW,gBAEV;AAGnC,MAAI,QAAQ,aAAa;GACvB,QAAS,IAAY,UAAU,EAAE;GACjC,OAAO,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa;GACxD,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC;GAC5B,CAAC;EAEF,MAAM,OAAO,MAAM,eAAe,IAAI;AAEtC,SAAO,IAAI,SACT;;;;;;;;0BAQoB,KAAK;;;wBAGP,KAAK,UAAW,IAAY,UAAU,EAAE,CAAC,CAAC;uBAC3C,KAAK,UAAU,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;2BAC9D,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;;;;;;OAO/C,EACE,SAAS,EAAE,gBAAgB,4BAA4B,EACxD,CACF;UACM,OAAO;AACd,UAAQ,MAAM,iBAAiB,MAAM;AACrC,SAAO,IAAI,SACT;;;;;;qBAMe,iBAAiB,QAAQ,MAAM,UAAU,OAAO;;;OAI/D,EAAE,QAAQ,KAAK,CAChB;;;AAKL,MAAM,iBAAiB,OACrB,iBACA,KACA,kBACG;AACH,KAAI;EAEF,MAAM,EAAE,eAAe,mBACrB,iBACC,MAAM,QAAQ,IAAI,CAAC,OAAO,UAAU,OAAO,oBAAoB,CAAC,CAAC,MAC/D,CAAC,OAAO,eAAe;GACtB,eAAe,MAAM;GACrB,gBAAgB,SAAS;GAC1B,EACF;EAEH,MAAM,kBAAkB,MAAM,iBAAiB;EAS/C,MAAM,OAAO,eANG,cAFE,gBAAgB,WAAW,iBAEJ;GACvC;GACA,QAAS,IAAY,UAAU,EAAE;GACjC,OAAO,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa;GACzD,CAAC,CAEkC;AAEpC,SAAO,IAAI,SACT;;;;;;;;2BAQqB,KAAK;;;wBAGR,KAAK,UAAW,IAAY,UAAU,EAAE,CAAC,CAAC;uBAC3C,KAAK,UAAU,OAAO,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;2BAC9D,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;;;;;;OAO/C,EACE,SAAS,EAAE,gBAAgB,4BAA4B,EACxD,CACF;UACM,OAAO;AACd,UAAQ,MAAM,mBAAmB,MAAM;AACvC,SAAO,IAAI,SACT;;;;;;qBAMe,iBAAiB,QAAQ,MAAM,UAAU,OAAO;;;OAI/D,EAAE,QAAQ,KAAK,CAChB;;;AAKL,MAAa,eAAe,kBAAwB;AAClD,QAAO,OAAO,KAAc,SAAkC;AAC5D,EAAC,IAAY,YAAY,OAAO,oBAAwC;AACtE,UAAO,MAAM,aAAa,iBAAiB,KAAK,cAAc;;AAEhE,SAAO,MAAM;;;AAKjB,MAAa,iBAAiB,kBAAwB;AACpD,QAAO,OAAO,KAAc,SAAkC;AAC5D,EAAC,IAAY,cAAc,OAAO,oBAAwC;AACxE,UAAO,MAAM,eAAe,iBAAiB,KAAK,cAAc;;AAElE,SAAO,MAAM"}
@@ -1,6 +1,6 @@
1
- import { ComponentRoute, NestedComponentRoute, FlattenedComponentRoute } from '../types/component-route.js';
2
- import '../types/route.js';
3
- import '../types/types.js';
1
+ import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "../component-route-BYV_X1rA.mjs";
2
+
3
+ //#region src/middleware/component-router.d.ts
4
4
 
5
5
  /**
6
6
  * 扁平化嵌套组件路由
@@ -11,5 +11,6 @@ declare function flattenComponentRoutes(routes: (ComponentRoute | NestedComponen
11
11
  * 自动检测组件类型并应用相应的渲染器
12
12
  */
13
13
  declare const componentRouter: () => (req: Request, next: () => Promise<Response>) => Promise<Response>;
14
-
14
+ //#endregion
15
15
  export { componentRouter, flattenComponentRoutes };
16
+ //# sourceMappingURL=component-router.d.mts.map
@@ -0,0 +1,4 @@
1
+ import { n as flattenComponentRoutes, r as init_component_router, t as componentRouter } from "../component-router-DXUXLp1R.mjs";
2
+
3
+ init_component_router();
4
+ export { componentRouter, flattenComponentRoutes };
@@ -0,0 +1,16 @@
1
+ import { o as Middleware } from "../types-Cb7_2VSt.mjs";
2
+ import "../schema-CVuttFSw.mjs";
3
+ import "../index-DXJd7-2Z.mjs";
4
+
5
+ //#region src/middleware/cors.d.ts
6
+ interface CORSOptions {
7
+ origin?: string[] | "*";
8
+ methods?: string[];
9
+ headers?: string[];
10
+ credentials?: boolean;
11
+ maxAge?: number;
12
+ }
13
+ declare function createCORS(options?: CORSOptions): Middleware;
14
+ //#endregion
15
+ export { CORSOptions, createCORS };
16
+ //# sourceMappingURL=cors.d.mts.map
@@ -0,0 +1,38 @@
1
+ //#region src/middleware/cors.ts
2
+ function createCORS(options = {}) {
3
+ const { origin = [], methods = [
4
+ "GET",
5
+ "POST",
6
+ "PUT",
7
+ "DELETE",
8
+ "OPTIONS"
9
+ ], headers = [], credentials = false, maxAge } = options;
10
+ return async (req, next) => {
11
+ const reqOrigin = req.headers.get("Origin") || "";
12
+ const isAllowedOrigin = origin === "*" || origin.includes(reqOrigin);
13
+ if (req.method === "OPTIONS") {
14
+ const resHeaders = new Headers();
15
+ if (isAllowedOrigin) {
16
+ resHeaders.set("Access-Control-Allow-Origin", origin === "*" ? "*" : reqOrigin);
17
+ resHeaders.set("Access-Control-Allow-Methods", methods.join(","));
18
+ resHeaders.set("Access-Control-Allow-Headers", headers.join(","));
19
+ if (credentials) resHeaders.set("Access-Control-Allow-Credentials", "true");
20
+ if (maxAge) resHeaders.set("Access-Control-Max-Age", maxAge.toString());
21
+ }
22
+ return new Response(null, {
23
+ status: 204,
24
+ headers: resHeaders
25
+ });
26
+ }
27
+ const res = await next();
28
+ if (isAllowedOrigin) {
29
+ res.headers.set("Access-Control-Allow-Origin", origin === "*" ? "*" : reqOrigin);
30
+ if (credentials) res.headers.set("Access-Control-Allow-Credentials", "true");
31
+ }
32
+ return res;
33
+ };
34
+ }
35
+
36
+ //#endregion
37
+ export { createCORS };
38
+ //# sourceMappingURL=cors.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.mjs","names":[],"sources":["../../src/middleware/cors.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\n\nexport interface CORSOptions {\n origin?: string[] | \"*\";\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n}\n\nexport function createCORS(options: CORSOptions = {}): Middleware {\n const {\n origin = [],\n methods = [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"],\n headers = [],\n credentials = false,\n maxAge,\n } = options;\n\n return async (req, next) => {\n const reqOrigin = req.headers.get(\"Origin\") || \"\";\n\n // 判断:是否为允许的 Origin?\n const isAllowedOrigin = origin === \"*\" || origin.includes(reqOrigin);\n\n // 预检 (OPTIONS) 请求处理\n if (req.method === \"OPTIONS\") {\n const resHeaders = new Headers();\n\n if (isAllowedOrigin) {\n resHeaders.set(\n \"Access-Control-Allow-Origin\",\n origin === \"*\" ? \"*\" : reqOrigin,\n );\n resHeaders.set(\"Access-Control-Allow-Methods\", methods.join(\",\"));\n resHeaders.set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n if (credentials)\n resHeaders.set(\"Access-Control-Allow-Credentials\", \"true\");\n if (maxAge) resHeaders.set(\"Access-Control-Max-Age\", maxAge.toString());\n }\n\n return new Response(null, { status: 204, headers: resHeaders });\n }\n\n // 正常请求:在 next 后添加头部\n const res = await next();\n\n if (isAllowedOrigin) {\n res.headers.set(\n \"Access-Control-Allow-Origin\",\n origin === \"*\" ? \"*\" : reqOrigin,\n );\n if (credentials)\n res.headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n return res;\n };\n}\n"],"mappings":";AAUA,SAAgB,WAAW,UAAuB,EAAE,EAAc;CAChE,MAAM,EACJ,SAAS,EAAE,EACX,UAAU;EAAC;EAAO;EAAQ;EAAO;EAAU;EAAU,EACrD,UAAU,EAAE,EACZ,cAAc,OACd,WACE;AAEJ,QAAO,OAAO,KAAK,SAAS;EAC1B,MAAM,YAAY,IAAI,QAAQ,IAAI,SAAS,IAAI;EAG/C,MAAM,kBAAkB,WAAW,OAAO,OAAO,SAAS,UAAU;AAGpE,MAAI,IAAI,WAAW,WAAW;GAC5B,MAAM,aAAa,IAAI,SAAS;AAEhC,OAAI,iBAAiB;AACnB,eAAW,IACT,+BACA,WAAW,MAAM,MAAM,UACxB;AACD,eAAW,IAAI,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AACjE,eAAW,IAAI,gCAAgC,QAAQ,KAAK,IAAI,CAAC;AACjE,QAAI,YACF,YAAW,IAAI,oCAAoC,OAAO;AAC5D,QAAI,OAAQ,YAAW,IAAI,0BAA0B,OAAO,UAAU,CAAC;;AAGzE,UAAO,IAAI,SAAS,MAAM;IAAE,QAAQ;IAAK,SAAS;IAAY,CAAC;;EAIjE,MAAM,MAAM,MAAM,MAAM;AAExB,MAAI,iBAAiB;AACnB,OAAI,QAAQ,IACV,+BACA,WAAW,MAAM,MAAM,UACxB;AACD,OAAI,YACF,KAAI,QAAQ,IAAI,oCAAoC,OAAO;;AAG/D,SAAO"}
@@ -0,0 +1,14 @@
1
+ import { o as Middleware } from "../types-Cb7_2VSt.mjs";
2
+ import "../schema-CVuttFSw.mjs";
3
+ import "../index-DXJd7-2Z.mjs";
4
+
5
+ //#region src/middleware/rateLimit.d.ts
6
+ interface RateLimitOptions {
7
+ windowMs?: number;
8
+ max?: number;
9
+ keyFn?: (req: Request) => string;
10
+ }
11
+ declare function rateLimit(options?: RateLimitOptions): Middleware;
12
+ //#endregion
13
+ export { rateLimit };
14
+ //# sourceMappingURL=rateLimit.d.mts.map
@@ -0,0 +1,34 @@
1
+ import { r as init_middleware, t as VafastError } from "../middleware-3ShRJyd1.mjs";
2
+
3
+ //#region src/middleware/rateLimit.ts
4
+ init_middleware();
5
+ const store = /* @__PURE__ */ new Map();
6
+ function rateLimit(options = {}) {
7
+ const windowMs = options.windowMs ?? 6e4;
8
+ const max = options.max ?? 30;
9
+ const keyFn = options.keyFn ?? getIP;
10
+ return async (req, next) => {
11
+ const key = keyFn(req);
12
+ const now = Date.now();
13
+ const entry = store.get(key);
14
+ if (entry && entry.expires > now) {
15
+ if (entry.count >= max) throw new VafastError("Too many requests", {
16
+ status: 429,
17
+ type: "rate_limit",
18
+ expose: true
19
+ });
20
+ entry.count += 1;
21
+ } else store.set(key, {
22
+ count: 1,
23
+ expires: now + windowMs
24
+ });
25
+ return next();
26
+ };
27
+ }
28
+ function getIP(req) {
29
+ return req.headers.get("cf-connecting-ip") || req.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || "unknown";
30
+ }
31
+
32
+ //#endregion
33
+ export { rateLimit };
34
+ //# sourceMappingURL=rateLimit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.mjs","names":[],"sources":["../../src/middleware/rateLimit.ts"],"sourcesContent":["// 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":";;;iBAG4C;AAa5C,MAAM,wBAAQ,IAAI,KAAoB;AAEtC,SAAgB,UAAU,UAA4B,EAAE,EAAc;CACpE,MAAM,WAAW,QAAQ,YAAY;CACrC,MAAM,MAAM,QAAQ,OAAO;CAC3B,MAAM,QAAQ,QAAQ,SAAS;AAE/B,QAAO,OAAO,KAAK,SAAS;EAC1B,MAAM,MAAM,MAAM,IAAI;EACtB,MAAM,MAAM,KAAK,KAAK;EAEtB,MAAM,QAAQ,MAAM,IAAI,IAAI;AAC5B,MAAI,SAAS,MAAM,UAAU,KAAK;AAChC,OAAI,MAAM,SAAS,IACjB,OAAM,IAAI,YAAY,qBAAqB;IACzC,QAAQ;IACR,MAAM;IACN,QAAQ;IACT,CAAC;AAEJ,SAAM,SAAS;QAEf,OAAM,IAAI,KAAK;GAAE,OAAO;GAAG,SAAS,MAAM;GAAU,CAAC;AAGvD,SAAO,MAAM;;;AAKjB,SAAS,MAAM,KAAsB;AACnC,QACE,IAAI,QAAQ,IAAI,mBAAmB,IACnC,IAAI,QAAQ,IAAI,kBAAkB,EAAE,MAAM,IAAI,CAAC,IAAI,MAAM,IACzD"}
@@ -0,0 +1,59 @@
1
+ import { t as __esmMin } from "./chunk-67U6L5Jh.mjs";
2
+ import { a as mapResponse, i as json, r as init_response } from "./response-CSKW5hsS.mjs";
3
+
4
+ //#region src/middleware.ts
5
+ /**
6
+ * 组合类型: 自动注入错误处理器进行中间件组合
7
+ */
8
+ function composeMiddleware(middleware, finalHandler) {
9
+ const all = [errorHandler, ...middleware];
10
+ return function composedHandler(req) {
11
+ let i = -1;
12
+ const dispatch = (index) => {
13
+ if (index <= i) return Promise.reject(/* @__PURE__ */ new Error("next() called multiple times"));
14
+ i = index;
15
+ if (index < all.length) {
16
+ const mw = all[index];
17
+ return Promise.resolve(mw(req, () => dispatch(index + 1)));
18
+ }
19
+ return Promise.resolve(finalHandler(req)).then(mapResponse);
20
+ };
21
+ return dispatch(0);
22
+ };
23
+ }
24
+ var VafastError, errorHandler;
25
+ var init_middleware = __esmMin((() => {
26
+ init_response();
27
+ VafastError = class extends Error {
28
+ status;
29
+ type;
30
+ expose;
31
+ constructor(message, options = {}) {
32
+ super(message);
33
+ this.name = "VafastError";
34
+ this.status = options.status ?? 500;
35
+ this.type = options.type ?? "internal_error";
36
+ this.expose = options.expose ?? false;
37
+ if (options.cause) this.cause = options.cause;
38
+ }
39
+ };
40
+ errorHandler = async (req, next) => {
41
+ try {
42
+ return await next();
43
+ } catch (err) {
44
+ console.error("未处理的错误:", err);
45
+ if (err instanceof VafastError) return json({
46
+ error: err.type,
47
+ message: err.expose ? err.message : "发生了一个错误"
48
+ }, err.status);
49
+ return json({
50
+ error: "internal_error",
51
+ message: "出现了一些问题"
52
+ }, 500);
53
+ }
54
+ };
55
+ }));
56
+
57
+ //#endregion
58
+ export { composeMiddleware as n, init_middleware as r, VafastError as t };
59
+ //# sourceMappingURL=middleware-3ShRJyd1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-3ShRJyd1.mjs","names":[],"sources":["../src/middleware.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"],"mappings":";;;;;;;AAkCA,SAAgB,kBACd,YACA,cACqC;CACrC,MAAM,MAAM,CAAC,cAAc,GAAG,WAAW;AAEzC,QAAO,SAAS,gBAAgB,KAAiC;EAC/D,IAAI,IAAI;EAER,MAAM,YAAY,UAAqC;AACrD,OAAI,SAAS,EACX,QAAO,QAAQ,uBAAO,IAAI,MAAM,+BAA+B,CAAC;AAClE,OAAI;AAGJ,OAAI,QAAQ,IAAI,QAAQ;IACtB,MAAM,KAAK,IAAI;AACf,WAAO,QAAQ,QAAQ,GAAG,WAAW,SAAS,QAAQ,EAAE,CAAC,CAAC;;AAI5D,UAAO,QAAQ,QAAQ,aAAa,IAAI,CAAC,CAAC,KAAK,YAAY;;AAG7D,SAAO,SAAS,EAAE;;;;;gBAxD+B;CAMxC,cAAb,cAAiC,MAAM;EACrC;EACA;EACA;EAEA,YACE,SACA,UAKI,EAAE,EACN;AACA,SAAM,QAAQ;AACd,QAAK,OAAO;AACZ,QAAK,SAAS,QAAQ,UAAU;AAChC,QAAK,OAAO,QAAQ,QAAQ;AAC5B,QAAK,SAAS,QAAQ,UAAU;AAChC,OAAI,QAAQ,MAAO,CAAC,KAAa,QAAQ,QAAQ;;;CAoC/C,eAA2B,OAAO,KAAK,SAAS;AACpD,MAAI;AACF,UAAO,MAAM,MAAM;WACZ,KAAK;AACZ,WAAQ,MAAM,WAAW,IAAI;AAE7B,OAAI,eAAe,YACjB,QAAO,KACL;IACE,OAAO,IAAI;IACX,SAAS,IAAI,SAAS,IAAI,UAAU;IACrC,EACD,IAAI,OACL;AAGH,UAAO,KAAK;IAAE,OAAO;IAAkB,SAAS;IAAW,EAAE,IAAI"}
@@ -0,0 +1,25 @@
1
+ import { o as Middleware, r as Handler } from "./types-Cb7_2VSt.mjs";
2
+ import "./schema-CVuttFSw.mjs";
3
+ import "./index-DXJd7-2Z.mjs";
4
+
5
+ //#region src/middleware.d.ts
6
+ /** 中间件类型:使用 next() 传递给下一个处理 */
7
+ /** Vafast 自定义错误类型 */
8
+ declare class VafastError extends Error {
9
+ status: number;
10
+ type: string;
11
+ expose: boolean;
12
+ constructor(message: string, options?: {
13
+ status?: number;
14
+ type?: string;
15
+ expose?: boolean;
16
+ cause?: unknown;
17
+ });
18
+ }
19
+ /**
20
+ * 组合类型: 自动注入错误处理器进行中间件组合
21
+ */
22
+ declare function composeMiddleware(middleware: Middleware[], finalHandler: Handler): (req: Request) => Promise<Response>;
23
+ //#endregion
24
+ export { VafastError, composeMiddleware };
25
+ //# sourceMappingURL=middleware.d.mts.map
@@ -0,0 +1,4 @@
1
+ import { n as composeMiddleware, r as init_middleware, t as VafastError } from "./middleware-3ShRJyd1.mjs";
2
+
3
+ init_middleware();
4
+ export { VafastError, composeMiddleware };
@@ -0,0 +1,33 @@
1
+ import "../schema-CVuttFSw.mjs";
2
+ import "../index-DXJd7-2Z.mjs";
3
+ import "../base-server-Gakrozqk.mjs";
4
+ import "../server-Drc2kSxp.mjs";
5
+ import "../component-server-BOz4Q-Qt.mjs";
6
+ import "../index-DFsQyT61.mjs";
7
+ import { AggregatedMetrics, BaseMetrics, MonitoringConfig, MonitoringEvent, PerformanceMetrics, PerformanceReport } from "./types.mjs";
8
+ import { MonitoredServer, NativeMonitoringConfig, NativeMonitoringMetrics, createMonitoredServer, withMonitoring } from "./native-monitor.mjs";
9
+
10
+ //#region src/monitoring/index.d.ts
11
+ declare const defaultMonitoringConfig: {
12
+ enabled: boolean;
13
+ console: boolean;
14
+ slowThreshold: number;
15
+ errorThreshold: number;
16
+ tags: {
17
+ framework: string;
18
+ version: string;
19
+ };
20
+ };
21
+ declare function createMonitoringConfig(config?: Partial<typeof defaultMonitoringConfig>): {
22
+ enabled: boolean;
23
+ console: boolean;
24
+ slowThreshold: number;
25
+ errorThreshold: number;
26
+ tags: {
27
+ framework: string;
28
+ version: string;
29
+ };
30
+ };
31
+ //#endregion
32
+ export { AggregatedMetrics, BaseMetrics, MonitoredServer, MonitoringConfig, MonitoringEvent, NativeMonitoringConfig, NativeMonitoringMetrics, PerformanceMetrics, PerformanceReport, createMonitoredServer, createMonitoringConfig, defaultMonitoringConfig, withMonitoring };
33
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,27 @@
1
+ import "../dependency-manager-CPkwMI7J.mjs";
2
+ import "../component-server-ARXvZJUQ.mjs";
3
+ import "../server-B0nzGCG5.mjs";
4
+ import "./types.mjs";
5
+ import { createMonitoredServer, withMonitoring } from "./native-monitor.mjs";
6
+
7
+ //#region src/monitoring/index.ts
8
+ const defaultMonitoringConfig = {
9
+ enabled: true,
10
+ console: true,
11
+ slowThreshold: 1e3,
12
+ errorThreshold: .05,
13
+ tags: {
14
+ framework: "vafast",
15
+ version: "2.0.0"
16
+ }
17
+ };
18
+ function createMonitoringConfig(config = {}) {
19
+ return {
20
+ ...defaultMonitoringConfig,
21
+ ...config
22
+ };
23
+ }
24
+
25
+ //#endregion
26
+ export { createMonitoredServer, createMonitoringConfig, defaultMonitoringConfig, withMonitoring };
27
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/monitoring/index.ts"],"sourcesContent":["/**\n * 原生监控系统入口\n *\n * @author Framework Team\n * @version 2.0.0\n * @license MIT\n */\n\nexport * from \"./types\";\nexport * from \"./native-monitor\";\n\n// 默认监控配置\nexport const defaultMonitoringConfig = {\n enabled: true,\n console: true,\n slowThreshold: 1000, // 1秒\n errorThreshold: 0.05, // 5%\n tags: {\n framework: \"vafast\",\n version: \"2.0.0\",\n },\n};\n\n// 创建监控配置\nexport function createMonitoringConfig(\n config: Partial<typeof defaultMonitoringConfig> = {},\n) {\n return { ...defaultMonitoringConfig, ...config };\n}\n"],"mappings":";;;;;;;AAYA,MAAa,0BAA0B;CACrC,SAAS;CACT,SAAS;CACT,eAAe;CACf,gBAAgB;CAChB,MAAM;EACJ,WAAW;EACX,SAAS;EACV;CACF;AAGD,SAAgB,uBACd,SAAkD,EAAE,EACpD;AACA,QAAO;EAAE,GAAG;EAAyB,GAAG;EAAQ"}
@@ -0,0 +1,48 @@
1
+ import "../schema-CVuttFSw.mjs";
2
+ import "../index-DXJd7-2Z.mjs";
3
+ import "../base-server-Gakrozqk.mjs";
4
+ import { t as Server } from "../server-Drc2kSxp.mjs";
5
+ import "../component-server-BOz4Q-Qt.mjs";
6
+ import "../index-DFsQyT61.mjs";
7
+
8
+ //#region src/monitoring/native-monitor.d.ts
9
+ /**
10
+ * 原生监控装饰器
11
+ *
12
+ * 通过装饰器模式为 Server 添加监控能力,完全不入侵原类
13
+ *
14
+ * @author Framework Team
15
+ * @version 2.0.0
16
+ * @license MIT
17
+ */
18
+ interface NativeMonitoringConfig {
19
+ enabled?: boolean;
20
+ console?: boolean;
21
+ slowThreshold?: number;
22
+ errorThreshold?: number;
23
+ tags?: Record<string, string>;
24
+ }
25
+ interface NativeMonitoringMetrics {
26
+ requestId: string;
27
+ method: string;
28
+ path: string;
29
+ statusCode: number;
30
+ totalTime: number;
31
+ timestamp: number;
32
+ memoryUsage: {
33
+ heapUsed: number;
34
+ heapTotal: number;
35
+ };
36
+ }
37
+ interface MonitoredServer extends Server {
38
+ getMonitoringStatus(): any;
39
+ getMonitoringMetrics(): NativeMonitoringMetrics[];
40
+ resetMonitoring(): void;
41
+ fetch: (req: Request) => Promise<Response>;
42
+ use: (mw: any) => void;
43
+ }
44
+ declare function withMonitoring(server: Server, config?: NativeMonitoringConfig): MonitoredServer;
45
+ declare function createMonitoredServer(routes: any[], config?: NativeMonitoringConfig): MonitoredServer;
46
+ //#endregion
47
+ export { MonitoredServer, NativeMonitoringConfig, NativeMonitoringMetrics, createMonitoredServer, withMonitoring };
48
+ //# sourceMappingURL=native-monitor.d.mts.map
@@ -0,0 +1,154 @@
1
+ import { r as __toCommonJS } from "../chunk-67U6L5Jh.mjs";
2
+ import "../dependency-manager-CPkwMI7J.mjs";
3
+ import "../component-server-ARXvZJUQ.mjs";
4
+ import { n as server_exports, t as init_server } from "../server-B0nzGCG5.mjs";
5
+
6
+ //#region src/monitoring/native-monitor.ts
7
+ var NativeMonitor = class {
8
+ config;
9
+ metrics = [];
10
+ isEnabled = false;
11
+ constructor(config = {}) {
12
+ this.config = {
13
+ enabled: true,
14
+ console: true,
15
+ slowThreshold: 1e3,
16
+ errorThreshold: .05,
17
+ tags: { framework: "vafast" },
18
+ ...config
19
+ };
20
+ this.isEnabled = this.config.enabled ?? true;
21
+ if (this.isEnabled && this.config.console) {
22
+ console.log("✅ 原生监控已启用");
23
+ console.log(`📊 监控配置:`, {
24
+ 慢请求阈值: `${this.config.slowThreshold}ms`,
25
+ 错误率阈值: `${(this.config.errorThreshold * 100).toFixed(1)}%`,
26
+ 标签: this.config.tags
27
+ });
28
+ }
29
+ }
30
+ recordMetrics(metrics) {
31
+ if (!this.isEnabled) return;
32
+ this.metrics.push(metrics);
33
+ if (this.metrics.length > 1e3) this.metrics = this.metrics.slice(-1e3);
34
+ if (this.config.console) {
35
+ const status = metrics.statusCode < 400 ? "✅" : "❌";
36
+ const timeColor = metrics.totalTime > this.config.slowThreshold ? "🐌" : "⚡";
37
+ console.log(`${status} ${metrics.method} ${metrics.path} - ${metrics.statusCode} (${timeColor} ${metrics.totalTime.toFixed(2)}ms)`);
38
+ if (metrics.totalTime > this.config.slowThreshold) console.warn(`🐌 慢请求警告: ${metrics.path} 耗时 ${metrics.totalTime.toFixed(2)}ms`);
39
+ }
40
+ }
41
+ getStatus() {
42
+ if (!this.isEnabled) return {
43
+ enabled: false,
44
+ message: "监控未启用"
45
+ };
46
+ const totalRequests = this.metrics.length;
47
+ const successfulRequests = this.metrics.filter((m) => m.statusCode < 400).length;
48
+ const failedRequests = totalRequests - successfulRequests;
49
+ const avgResponseTime = totalRequests > 0 ? this.metrics.reduce((sum, m) => sum + m.totalTime, 0) / totalRequests : 0;
50
+ return {
51
+ enabled: true,
52
+ totalRequests,
53
+ successfulRequests,
54
+ failedRequests,
55
+ errorRate: totalRequests > 0 ? failedRequests / totalRequests : 0,
56
+ avgResponseTime: avgResponseTime.toFixed(2) + "ms",
57
+ memoryUsage: this.getMemoryUsage(),
58
+ recentRequests: this.metrics.slice(-5)
59
+ };
60
+ }
61
+ getMetrics() {
62
+ return this.metrics;
63
+ }
64
+ reset() {
65
+ this.metrics = [];
66
+ console.log("🔄 监控数据已重置");
67
+ }
68
+ getMemoryUsage() {
69
+ if (typeof process !== "undefined" && process.memoryUsage) {
70
+ const mem = process.memoryUsage();
71
+ return {
72
+ heapUsed: (mem.heapUsed / 1024 / 1024).toFixed(2) + "MB",
73
+ heapTotal: (mem.heapTotal / 1024 / 1024).toFixed(2) + "MB",
74
+ external: (mem.external / 1024 / 1024).toFixed(2) + "MB"
75
+ };
76
+ }
77
+ return { message: "内存信息不可用" };
78
+ }
79
+ };
80
+ function withMonitoring(server, config = {}) {
81
+ const monitor = new NativeMonitor(config);
82
+ const originalFetch = server.fetch.bind(server);
83
+ const monitoredFetch = async (req) => {
84
+ const startTime = performance.now();
85
+ const requestId = `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
86
+ const { pathname } = new URL(req.url);
87
+ const method = req.method;
88
+ try {
89
+ const response = await originalFetch(req);
90
+ const totalTime = performance.now() - startTime;
91
+ monitor.recordMetrics({
92
+ requestId,
93
+ method,
94
+ path: pathname,
95
+ statusCode: response.status,
96
+ totalTime,
97
+ timestamp: Date.now(),
98
+ memoryUsage: (() => {
99
+ if (typeof process !== "undefined" && process.memoryUsage) {
100
+ const mem = process.memoryUsage();
101
+ return {
102
+ heapUsed: mem.heapUsed,
103
+ heapTotal: mem.heapTotal
104
+ };
105
+ }
106
+ return {
107
+ heapUsed: 0,
108
+ heapTotal: 0
109
+ };
110
+ })()
111
+ });
112
+ return response;
113
+ } catch (error) {
114
+ const totalTime = performance.now() - startTime;
115
+ monitor.recordMetrics({
116
+ requestId,
117
+ method,
118
+ path: pathname,
119
+ statusCode: 500,
120
+ totalTime,
121
+ timestamp: Date.now(),
122
+ memoryUsage: (() => {
123
+ if (typeof process !== "undefined" && process.memoryUsage) {
124
+ const mem = process.memoryUsage();
125
+ return {
126
+ heapUsed: mem.heapUsed,
127
+ heapTotal: mem.heapTotal
128
+ };
129
+ }
130
+ return {
131
+ heapUsed: 0,
132
+ heapTotal: 0
133
+ };
134
+ })()
135
+ });
136
+ throw error;
137
+ }
138
+ };
139
+ return {
140
+ ...server,
141
+ fetch: monitoredFetch,
142
+ getMonitoringStatus: () => monitor.getStatus(),
143
+ getMonitoringMetrics: () => monitor.getMetrics(),
144
+ resetMonitoring: () => monitor.reset()
145
+ };
146
+ }
147
+ function createMonitoredServer(routes, config) {
148
+ const { Server } = (init_server(), __toCommonJS(server_exports));
149
+ return withMonitoring(new Server(routes), config);
150
+ }
151
+
152
+ //#endregion
153
+ export { createMonitoredServer, withMonitoring };
154
+ //# sourceMappingURL=native-monitor.mjs.map