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
@@ -1,134 +0,0 @@
1
- // src/server/base-server.ts
2
- var BaseServer = class {
3
- globalMiddleware = [];
4
- use(mw) {
5
- this.globalMiddleware.push(mw);
6
- }
7
- /**
8
- * 打印扁平化后的路由信息,用于调试
9
- */
10
- logFlattenedRoutes(routes, type = "\u8DEF\u7531") {
11
- console.log(`\u{1F680} \u6241\u5E73\u5316\u540E\u7684${type}:`);
12
- for (const route of routes) {
13
- const method = route.method || "GET";
14
- const path = route.fullPath || route.path;
15
- console.log(` ${method} ${path}`);
16
- if (route.middlewareChain && route.middlewareChain.length > 0) {
17
- console.log(` \u4E2D\u95F4\u4EF6\u94FE: ${route.middlewareChain.length} \u4E2A`);
18
- }
19
- }
20
- console.log("");
21
- }
22
- /**
23
- * 检测路由冲突
24
- * 检查是否有路径相同但方法不同的路由,以及潜在的路径冲突
25
- */
26
- detectRouteConflicts(routes) {
27
- const pathGroups = /* @__PURE__ */ new Map();
28
- for (const route of routes) {
29
- const path = route.fullPath || route.path;
30
- const method = route.method || "GET";
31
- if (!pathGroups.has(path)) {
32
- pathGroups.set(path, []);
33
- }
34
- pathGroups.get(path).push({ ...route, method });
35
- }
36
- for (const [path, routeList] of pathGroups) {
37
- if (routeList.length > 1) {
38
- const methods = routeList.map((r) => r.method);
39
- const uniqueMethods = [...new Set(methods)];
40
- if (uniqueMethods.length === 1) {
41
- console.warn(
42
- `\u26A0\uFE0F \u8DEF\u7531\u51B2\u7A81: ${uniqueMethods[0]} ${path} \u5B9A\u4E49\u4E86 ${routeList.length} \u6B21`
43
- );
44
- routeList.forEach((route, index) => {
45
- console.warn(` ${index + 1}. ${route.method} ${path}`);
46
- });
47
- } else {
48
- console.log(`\u2139\uFE0F \u8DEF\u5F84 ${path} \u652F\u6301\u65B9\u6CD5: ${uniqueMethods.join(", ")}`);
49
- }
50
- }
51
- }
52
- this.detectDynamicRouteConflicts(routes);
53
- }
54
- /**
55
- * 检测动态路由的潜在冲突
56
- */
57
- detectDynamicRouteConflicts(routes) {
58
- const dynamicRoutes = routes.filter((r) => {
59
- const path = r.fullPath || r.path;
60
- return path.includes(":") || path.includes("*");
61
- });
62
- for (let i = 0; i < dynamicRoutes.length; i++) {
63
- for (let j = i + 1; j < dynamicRoutes.length; j++) {
64
- const route1 = dynamicRoutes[i];
65
- const route2 = dynamicRoutes[j];
66
- const method1 = route1.method || "GET";
67
- const method2 = route2.method || "GET";
68
- if (method1 === method2) {
69
- const path1 = route1.fullPath || route1.path;
70
- const path2 = route2.fullPath || route2.path;
71
- if (this.pathsMayConflict(path1, path2)) {
72
- console.warn(
73
- `\u26A0\uFE0F \u6F5C\u5728\u8DEF\u7531\u51B2\u7A81: ${method1} ${path1} \u53EF\u80FD\u4E0E ${path2} \u51B2\u7A81`
74
- );
75
- }
76
- }
77
- }
78
- }
79
- }
80
- /**
81
- * 判断两个路径是否可能冲突
82
- */
83
- pathsMayConflict(path1, path2) {
84
- const parts1 = path1.split("/").filter(Boolean);
85
- const parts2 = path2.split("/").filter(Boolean);
86
- if (parts1.length !== parts2.length) return false;
87
- for (let i = 0; i < parts1.length; i++) {
88
- const p1 = parts1[i];
89
- const p2 = parts2[i];
90
- if (!p1.startsWith(":") && !p1.startsWith("*") && !p2.startsWith(":") && !p2.startsWith("*") && p1 !== p2) {
91
- return false;
92
- }
93
- if (p1 === "*" && p2.startsWith(":") || p2 === "*" && p1.startsWith(":")) {
94
- return true;
95
- }
96
- }
97
- return false;
98
- }
99
- /**
100
- * 路径匹配
101
- */
102
- matchPath(pattern, path) {
103
- const patternParts = pattern.split("/").filter(Boolean);
104
- const pathParts = path.split("/").filter(Boolean);
105
- if (patternParts.length !== pathParts.length) {
106
- return false;
107
- }
108
- for (let i = 0; i < patternParts.length; i++) {
109
- if (patternParts[i] !== pathParts[i] && !patternParts[i].startsWith(":")) {
110
- return false;
111
- }
112
- }
113
- return true;
114
- }
115
- /**
116
- * 提取路径参数
117
- */
118
- extractParams(pattern, path) {
119
- const params = {};
120
- const patternParts = pattern.split("/").filter(Boolean);
121
- const pathParts = path.split("/").filter(Boolean);
122
- for (let i = 0; i < patternParts.length; i++) {
123
- if (patternParts[i].startsWith(":")) {
124
- const paramName = patternParts[i].slice(1);
125
- params[paramName] = pathParts[i];
126
- }
127
- }
128
- return params;
129
- }
130
- };
131
- export {
132
- BaseServer
133
- };
134
- //# sourceMappingURL=base-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/server/base-server.ts"],"sourcesContent":["import type { Middleware } from \"../types\";\n\n/**\n * 服务器基类\n * 包含所有服务器类型的公共逻辑\n */\nexport abstract class BaseServer {\n protected globalMiddleware: Middleware[] = [];\n\n use(mw: Middleware) {\n this.globalMiddleware.push(mw);\n }\n\n /**\n * 打印扁平化后的路由信息,用于调试\n */\n protected logFlattenedRoutes(routes: any[], type: string = \"路由\"): void {\n console.log(`🚀 扁平化后的${type}:`);\n for (const route of routes) {\n const method = route.method || \"GET\";\n const path = route.fullPath || route.path;\n console.log(` ${method} ${path}`);\n if (route.middlewareChain && route.middlewareChain.length > 0) {\n console.log(` 中间件链: ${route.middlewareChain.length} 个`);\n }\n }\n console.log(\"\");\n }\n\n /**\n * 检测路由冲突\n * 检查是否有路径相同但方法不同的路由,以及潜在的路径冲突\n */\n protected detectRouteConflicts(routes: any[]): void {\n const pathGroups = new Map<string, any[]>();\n\n // 按路径分组\n for (const route of routes) {\n const path = route.fullPath || route.path;\n const method = route.method || \"GET\";\n if (!pathGroups.has(path)) {\n pathGroups.set(path, []);\n }\n pathGroups.get(path)!.push({ ...route, method });\n }\n\n // 检查冲突\n for (const [path, routeList] of pathGroups) {\n if (routeList.length > 1) {\n const methods = routeList.map((r) => r.method);\n const uniqueMethods = [...new Set(methods)];\n\n if (uniqueMethods.length === 1) {\n // 相同路径、相同方法 - 这是冲突!\n console.warn(\n `⚠️ 路由冲突: ${uniqueMethods[0]} ${path} 定义了 ${routeList.length} 次`,\n );\n routeList.forEach((route, index) => {\n console.warn(` ${index + 1}. ${route.method} ${path}`);\n });\n } else {\n // 相同路径、不同方法 - 这是正常的\n console.log(`ℹ️ 路径 ${path} 支持方法: ${uniqueMethods.join(\", \")}`);\n }\n }\n }\n\n // 检查潜在的路径冲突(动态路由可能冲突)\n this.detectDynamicRouteConflicts(routes);\n }\n\n /**\n * 检测动态路由的潜在冲突\n */\n private detectDynamicRouteConflicts(routes: any[]): void {\n const dynamicRoutes = routes.filter((r) => {\n const path = r.fullPath || r.path;\n return path.includes(\":\") || path.includes(\"*\");\n });\n\n for (let i = 0; i < dynamicRoutes.length; i++) {\n for (let j = i + 1; j < dynamicRoutes.length; j++) {\n const route1 = dynamicRoutes[i];\n const route2 = dynamicRoutes[j];\n const method1 = route1.method || \"GET\";\n const method2 = route2.method || \"GET\";\n\n if (method1 === method2) {\n const path1 = route1.fullPath || route1.path;\n const path2 = route2.fullPath || route2.path;\n // 检查路径是否可能冲突\n if (this.pathsMayConflict(path1, path2)) {\n console.warn(\n `⚠️ 潜在路由冲突: ${method1} ${path1} 可能与 ${path2} 冲突`,\n );\n }\n }\n }\n }\n }\n\n /**\n * 判断两个路径是否可能冲突\n */\n private pathsMayConflict(path1: string, path2: string): boolean {\n const parts1 = path1.split(\"/\").filter(Boolean);\n const parts2 = path2.split(\"/\").filter(Boolean);\n\n if (parts1.length !== parts2.length) return false;\n\n for (let i = 0; i < parts1.length; i++) {\n const p1 = parts1[i];\n const p2 = parts2[i];\n\n // 如果两个部分都是静态的且不同,则不会冲突\n if (\n !p1.startsWith(\":\") &&\n !p1.startsWith(\"*\") &&\n !p2.startsWith(\":\") &&\n !p2.startsWith(\"*\") &&\n p1 !== p2\n ) {\n return false;\n }\n\n // 如果一个是通配符,另一个是动态参数,可能冲突\n if (\n (p1 === \"*\" && p2.startsWith(\":\")) ||\n (p2 === \"*\" && p1.startsWith(\":\"))\n ) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * 路径匹配\n */\n protected matchPath(pattern: string, path: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = path.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== pathParts.length) {\n return false;\n }\n\n for (let i = 0; i < patternParts.length; i++) {\n if (\n patternParts[i] !== pathParts[i] &&\n !patternParts[i].startsWith(\":\")\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * 提取路径参数\n */\n protected extractParams(\n pattern: string,\n path: string,\n ): Record<string, string> {\n const params: Record<string, string> = {};\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const pathParts = path.split(\"/\").filter(Boolean);\n\n for (let i = 0; i < patternParts.length; i++) {\n if (patternParts[i].startsWith(\":\")) {\n const paramName = patternParts[i].slice(1);\n params[paramName] = pathParts[i];\n }\n }\n\n return params;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,37 +0,0 @@
1
- import { ComponentRoute, NestedComponentRoute } from '../types/component-route.js';
2
- import { BaseServer } from './base-server.js';
3
- import { DependencyManager } from '../utils/dependency-manager.js';
4
- import '../types/route.js';
5
- import '../types/types.js';
6
-
7
- /**
8
- * 组件路由服务器
9
- * 专门处理声明式组件路由
10
- */
11
- declare class ComponentServer extends BaseServer {
12
- private routes;
13
- private dependencyManager;
14
- constructor(routes: (ComponentRoute | NestedComponentRoute)[]);
15
- /**
16
- * 处理请求
17
- */
18
- fetch(req: Request): Promise<Response>;
19
- /**
20
- * 执行中间件链
21
- */
22
- private executeMiddlewareChain;
23
- /**
24
- * 渲染 Vue 组件
25
- */
26
- private renderVueComponent;
27
- /**
28
- * 渲染 React 组件
29
- */
30
- private renderReactComponent;
31
- /**
32
- * 获取依赖管理器(用于外部访问)
33
- */
34
- getDependencyManager(): DependencyManager;
35
- }
36
-
37
- export { ComponentServer };
@@ -1,488 +0,0 @@
1
- // src/middleware/component-router.ts
2
- function flattenComponentRoutes(routes) {
3
- const flattened = [];
4
- function processRoute(route, parentPath = "", parentMiddleware = []) {
5
- const currentPath = parentPath + route.path;
6
- const currentMiddleware = [
7
- ...parentMiddleware,
8
- ...route.middleware || []
9
- ];
10
- if ("component" in route) {
11
- flattened.push({
12
- ...route,
13
- fullPath: currentPath,
14
- middlewareChain: currentMiddleware
15
- });
16
- } else if ("children" in route && route.children) {
17
- for (const child of route.children) {
18
- processRoute(child, currentPath, currentMiddleware);
19
- }
20
- }
21
- }
22
- for (const route of routes) {
23
- processRoute(route);
24
- }
25
- return flattened;
26
- }
27
-
28
- // src/server/base-server.ts
29
- var BaseServer = class {
30
- globalMiddleware = [];
31
- use(mw) {
32
- this.globalMiddleware.push(mw);
33
- }
34
- /**
35
- * 打印扁平化后的路由信息,用于调试
36
- */
37
- logFlattenedRoutes(routes, type = "\u8DEF\u7531") {
38
- console.log(`\u{1F680} \u6241\u5E73\u5316\u540E\u7684${type}:`);
39
- for (const route of routes) {
40
- const method = route.method || "GET";
41
- const path = route.fullPath || route.path;
42
- console.log(` ${method} ${path}`);
43
- if (route.middlewareChain && route.middlewareChain.length > 0) {
44
- console.log(` \u4E2D\u95F4\u4EF6\u94FE: ${route.middlewareChain.length} \u4E2A`);
45
- }
46
- }
47
- console.log("");
48
- }
49
- /**
50
- * 检测路由冲突
51
- * 检查是否有路径相同但方法不同的路由,以及潜在的路径冲突
52
- */
53
- detectRouteConflicts(routes) {
54
- const pathGroups = /* @__PURE__ */ new Map();
55
- for (const route of routes) {
56
- const path = route.fullPath || route.path;
57
- const method = route.method || "GET";
58
- if (!pathGroups.has(path)) {
59
- pathGroups.set(path, []);
60
- }
61
- pathGroups.get(path).push({ ...route, method });
62
- }
63
- for (const [path, routeList] of pathGroups) {
64
- if (routeList.length > 1) {
65
- const methods = routeList.map((r) => r.method);
66
- const uniqueMethods = [...new Set(methods)];
67
- if (uniqueMethods.length === 1) {
68
- console.warn(
69
- `\u26A0\uFE0F \u8DEF\u7531\u51B2\u7A81: ${uniqueMethods[0]} ${path} \u5B9A\u4E49\u4E86 ${routeList.length} \u6B21`
70
- );
71
- routeList.forEach((route, index) => {
72
- console.warn(` ${index + 1}. ${route.method} ${path}`);
73
- });
74
- } else {
75
- console.log(`\u2139\uFE0F \u8DEF\u5F84 ${path} \u652F\u6301\u65B9\u6CD5: ${uniqueMethods.join(", ")}`);
76
- }
77
- }
78
- }
79
- this.detectDynamicRouteConflicts(routes);
80
- }
81
- /**
82
- * 检测动态路由的潜在冲突
83
- */
84
- detectDynamicRouteConflicts(routes) {
85
- const dynamicRoutes = routes.filter((r) => {
86
- const path = r.fullPath || r.path;
87
- return path.includes(":") || path.includes("*");
88
- });
89
- for (let i = 0; i < dynamicRoutes.length; i++) {
90
- for (let j = i + 1; j < dynamicRoutes.length; j++) {
91
- const route1 = dynamicRoutes[i];
92
- const route2 = dynamicRoutes[j];
93
- const method1 = route1.method || "GET";
94
- const method2 = route2.method || "GET";
95
- if (method1 === method2) {
96
- const path1 = route1.fullPath || route1.path;
97
- const path2 = route2.fullPath || route2.path;
98
- if (this.pathsMayConflict(path1, path2)) {
99
- console.warn(
100
- `\u26A0\uFE0F \u6F5C\u5728\u8DEF\u7531\u51B2\u7A81: ${method1} ${path1} \u53EF\u80FD\u4E0E ${path2} \u51B2\u7A81`
101
- );
102
- }
103
- }
104
- }
105
- }
106
- }
107
- /**
108
- * 判断两个路径是否可能冲突
109
- */
110
- pathsMayConflict(path1, path2) {
111
- const parts1 = path1.split("/").filter(Boolean);
112
- const parts2 = path2.split("/").filter(Boolean);
113
- if (parts1.length !== parts2.length) return false;
114
- for (let i = 0; i < parts1.length; i++) {
115
- const p1 = parts1[i];
116
- const p2 = parts2[i];
117
- if (!p1.startsWith(":") && !p1.startsWith("*") && !p2.startsWith(":") && !p2.startsWith("*") && p1 !== p2) {
118
- return false;
119
- }
120
- if (p1 === "*" && p2.startsWith(":") || p2 === "*" && p1.startsWith(":")) {
121
- return true;
122
- }
123
- }
124
- return false;
125
- }
126
- /**
127
- * 路径匹配
128
- */
129
- matchPath(pattern, path) {
130
- const patternParts = pattern.split("/").filter(Boolean);
131
- const pathParts = path.split("/").filter(Boolean);
132
- if (patternParts.length !== pathParts.length) {
133
- return false;
134
- }
135
- for (let i = 0; i < patternParts.length; i++) {
136
- if (patternParts[i] !== pathParts[i] && !patternParts[i].startsWith(":")) {
137
- return false;
138
- }
139
- }
140
- return true;
141
- }
142
- /**
143
- * 提取路径参数
144
- */
145
- extractParams(pattern, path) {
146
- const params = {};
147
- const patternParts = pattern.split("/").filter(Boolean);
148
- const pathParts = path.split("/").filter(Boolean);
149
- for (let i = 0; i < patternParts.length; i++) {
150
- if (patternParts[i].startsWith(":")) {
151
- const paramName = patternParts[i].slice(1);
152
- params[paramName] = pathParts[i];
153
- }
154
- }
155
- return params;
156
- }
157
- };
158
-
159
- // src/utils/path-matcher.ts
160
- var PathMatcher = class {
161
- /**
162
- * 路径匹配
163
- */
164
- static matchPath(pattern, path) {
165
- const patternParts = pattern.split("/").filter(Boolean);
166
- const pathParts = path.split("/").filter(Boolean);
167
- if (patternParts.length !== pathParts.length) {
168
- return false;
169
- }
170
- for (let i = 0; i < patternParts.length; i++) {
171
- if (patternParts[i] !== pathParts[i] && !patternParts[i].startsWith(":")) {
172
- return false;
173
- }
174
- }
175
- return true;
176
- }
177
- /**
178
- * 提取路径参数
179
- */
180
- static extractParams(pattern, path) {
181
- const params = {};
182
- const patternParts = pattern.split("/").filter(Boolean);
183
- const pathParts = path.split("/").filter(Boolean);
184
- for (let i = 0; i < patternParts.length; i++) {
185
- if (patternParts[i].startsWith(":")) {
186
- const paramName = patternParts[i].slice(1);
187
- params[paramName] = pathParts[i];
188
- }
189
- }
190
- return params;
191
- }
192
- /**
193
- * 计算路径特异性分数
194
- * 用于路由排序:静态 > 动态(:param) > 通配符(*)
195
- */
196
- static calculatePathScore(path) {
197
- const parts = path.split("/").filter(Boolean);
198
- let score = 0;
199
- for (const p of parts) {
200
- if (p === "*")
201
- score += 1;
202
- else if (p.startsWith(":"))
203
- score += 2;
204
- else score += 3;
205
- }
206
- return score * 10 + parts.length;
207
- }
208
- /**
209
- * 判断两个路径是否可能冲突
210
- */
211
- static pathsMayConflict(path1, path2) {
212
- const parts1 = path1.split("/").filter(Boolean);
213
- const parts2 = path2.split("/").filter(Boolean);
214
- if (parts1.length !== parts2.length) return false;
215
- for (let i = 0; i < parts1.length; i++) {
216
- const p1 = parts1[i];
217
- const p2 = parts2[i];
218
- if (!p1.startsWith(":") && !p1.startsWith("*") && !p2.startsWith(":") && !p2.startsWith("*") && p1 !== p2) {
219
- return false;
220
- }
221
- if (p1 === "*" && p2.startsWith(":") || p2 === "*" && p1.startsWith(":")) {
222
- return true;
223
- }
224
- }
225
- return false;
226
- }
227
- };
228
-
229
- // src/utils/html-renderer.ts
230
- var HtmlRenderer = class {
231
- /**
232
- * 生成基础HTML模板
233
- */
234
- static generateBaseHtml(content, context, clientScriptPath = "/client.js") {
235
- return `
236
- <!doctype html>
237
- <html>
238
- <head>
239
- <meta charset="utf-8">
240
- <title>Vafast SSR App</title>
241
- <meta name="viewport" content="width=device-width, initial-scale=1">
242
- </head>
243
- <body>
244
- <div id="app">${content}</div>
245
- <script>
246
- window.__ROUTE_INFO__ = {
247
- params: ${JSON.stringify(context.params || {})},
248
- query: ${JSON.stringify(context.query || {})},
249
- pathname: '${context.pathname}'
250
- };
251
- </script>
252
- <script type="module" src="${clientScriptPath}"></script>
253
- </body>
254
- </html>
255
- `;
256
- }
257
- /**
258
- * 生成Vue组件HTML
259
- */
260
- static generateVueHtml(content, context, clientScriptPath = "/client.js") {
261
- return this.generateBaseHtml(content, context, clientScriptPath);
262
- }
263
- /**
264
- * 生成React组件HTML
265
- */
266
- static generateReactHtml(content, context, clientScriptPath = "/client.js") {
267
- return `
268
- <!doctype html>
269
- <html>
270
- <head>
271
- <meta charset="utf-8">
272
- <title>Vafast SSR App</title>
273
- <meta name="viewport" content="width=device-width, initial-scale=1">
274
- </head>
275
- <body>
276
- <div id="root">${content}</div>
277
- <script>
278
- window.__ROUTE_INFO__ = {
279
- params: ${JSON.stringify(context.params || {})},
280
- query: ${JSON.stringify(context.query || {})},
281
- pathname: '${context.pathname}'
282
- };
283
- </script>
284
- <script type="module" src="${clientScriptPath}"></script>
285
- </body>
286
- </html>
287
- `;
288
- }
289
- };
290
-
291
- // src/utils/dependency-manager.ts
292
- var DependencyManager = class {
293
- dependencyCache = /* @__PURE__ */ new Map();
294
- /**
295
- * 按需获取框架依赖
296
- */
297
- async getFrameworkDeps(framework) {
298
- if (this.dependencyCache.has(framework)) {
299
- return this.dependencyCache.get(framework);
300
- }
301
- console.log(`\u{1F4E6} \u6309\u9700\u52A0\u8F7D ${framework} \u4F9D\u8D56...`);
302
- try {
303
- let deps;
304
- switch (framework) {
305
- case "vue":
306
- deps = await Promise.all([
307
- import("vue"),
308
- import("@vue/server-renderer")
309
- ]);
310
- break;
311
- case "react":
312
- deps = await Promise.all([
313
- import("react"),
314
- import("react-dom/server")
315
- ]);
316
- break;
317
- default:
318
- throw new Error(`\u4E0D\u652F\u6301\u7684\u6846\u67B6: ${framework}`);
319
- }
320
- this.dependencyCache.set(framework, deps);
321
- console.log(`\u2705 ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5B8C\u6210`);
322
- return deps;
323
- } catch (error) {
324
- console.error(`\u274C ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5931\u8D25:`, error);
325
- throw error;
326
- }
327
- }
328
- /**
329
- * 检测组件类型
330
- */
331
- detectComponentType(component) {
332
- if (component.render && typeof component.render === "function") {
333
- return "vue";
334
- }
335
- if (component.$$typeof) {
336
- return "react";
337
- }
338
- return "vue";
339
- }
340
- /**
341
- * 清除缓存
342
- */
343
- clearCache() {
344
- this.dependencyCache.clear();
345
- console.log("\u{1F9F9} \u4F9D\u8D56\u7F13\u5B58\u5DF2\u6E05\u9664");
346
- }
347
- /**
348
- * 获取缓存状态
349
- */
350
- getCacheStatus() {
351
- const status = {};
352
- for (const [framework] of this.dependencyCache) {
353
- status[framework] = true;
354
- }
355
- return status;
356
- }
357
- };
358
-
359
- // src/server/component-server.ts
360
- var ComponentServer = class extends BaseServer {
361
- routes;
362
- dependencyManager;
363
- constructor(routes) {
364
- super();
365
- this.routes = flattenComponentRoutes(routes);
366
- this.dependencyManager = new DependencyManager();
367
- this.detectRouteConflicts(this.routes);
368
- this.logFlattenedRoutes(this.routes, "\u7EC4\u4EF6\u8DEF\u7531");
369
- console.log("\u{1F680} \u4F9D\u8D56\u6309\u9700\u52A0\u8F7D\uFF0C\u670D\u52A1\u5668\u542F\u52A8\u5B8C\u6210");
370
- }
371
- /**
372
- * 处理请求
373
- */
374
- async fetch(req) {
375
- const url = new URL(req.url);
376
- const pathname = url.pathname;
377
- const method = req.method;
378
- if (method !== "GET") {
379
- return new Response("Method Not Allowed", { status: 405 });
380
- }
381
- let matchedRoute = null;
382
- for (const route of this.routes) {
383
- if (PathMatcher.matchPath(route.fullPath, pathname)) {
384
- matchedRoute = route;
385
- break;
386
- }
387
- }
388
- if (!matchedRoute) {
389
- return new Response("Not Found", { status: 404 });
390
- }
391
- try {
392
- const context = {
393
- req,
394
- params: PathMatcher.extractParams(matchedRoute.fullPath, pathname),
395
- query: Object.fromEntries(url.searchParams),
396
- pathname
397
- };
398
- return await this.executeMiddlewareChain(
399
- matchedRoute.middlewareChain,
400
- context,
401
- matchedRoute.component
402
- );
403
- } catch (error) {
404
- console.error("\u7EC4\u4EF6\u6E32\u67D3\u5931\u8D25:", error);
405
- return new Response("Internal Server Error", { status: 500 });
406
- }
407
- }
408
- /**
409
- * 执行中间件链
410
- */
411
- async executeMiddlewareChain(middlewareChain, context, componentImport) {
412
- const renderComponent = async () => {
413
- const componentModule = await componentImport();
414
- const component = componentModule.default || componentModule;
415
- const componentType = this.dependencyManager.detectComponentType(component);
416
- const deps = await this.dependencyManager.getFrameworkDeps(componentType);
417
- if (componentType === "vue") {
418
- return await this.renderVueComponent(component, context, deps);
419
- } else if (componentType === "react") {
420
- return await this.renderReactComponent(component, context, deps);
421
- } else {
422
- throw new Error(`\u4E0D\u652F\u6301\u7684\u7EC4\u4EF6\u7C7B\u578B: ${componentType}`);
423
- }
424
- };
425
- let index = 0;
426
- const next = async () => {
427
- if (index >= middlewareChain.length) {
428
- return await renderComponent();
429
- }
430
- const middleware = middlewareChain[index++];
431
- return await middleware(context.req, next);
432
- };
433
- return await next();
434
- }
435
- /**
436
- * 渲染 Vue 组件
437
- */
438
- async renderVueComponent(component, context, deps) {
439
- try {
440
- const [vue, renderer] = deps;
441
- const app = vue.createSSRApp(component);
442
- app.provide("routeInfo", {
443
- params: context.params || {},
444
- query: context.query || {},
445
- pathname: context.pathname
446
- });
447
- const html = await renderer.renderToString(app);
448
- const fullHtml = HtmlRenderer.generateVueHtml(html, context);
449
- return new Response(fullHtml, {
450
- headers: { "Content-Type": "text/html; charset=utf-8" }
451
- });
452
- } catch (error) {
453
- console.error("Vue \u7EC4\u4EF6\u6E32\u67D3\u5931\u8D25:", error);
454
- return new Response("Vue Component Render Error", { status: 500 });
455
- }
456
- }
457
- /**
458
- * 渲染 React 组件
459
- */
460
- async renderReactComponent(component, context, deps) {
461
- try {
462
- const [react, renderer] = deps;
463
- const content = react.createElement(component, {
464
- req: context.req,
465
- params: context.params || {},
466
- query: context.query || {}
467
- });
468
- const html = renderer.renderToString(content);
469
- const fullHtml = HtmlRenderer.generateReactHtml(html, context);
470
- return new Response(fullHtml, {
471
- headers: { "Content-Type": "text/html; charset=utf-8" }
472
- });
473
- } catch (error) {
474
- console.error("React \u7EC4\u4EF6\u6E32\u67D3\u5931\u8D25:", error);
475
- return new Response("React Component Render Error", { status: 500 });
476
- }
477
- }
478
- /**
479
- * 获取依赖管理器(用于外部访问)
480
- */
481
- getDependencyManager() {
482
- return this.dependencyManager;
483
- }
484
- };
485
- export {
486
- ComponentServer
487
- };
488
- //# sourceMappingURL=component-server.js.map