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 @@
1
+ {"version":3,"file":"router-BOeVQrjz.mjs","names":[],"sources":["../src/router.ts"],"sourcesContent":["/**\n * 路由工具函数\n *\n * 提供路由处理的基础工具\n */\n\nimport type { Route, NestedRoute, FlattenedRoute, Middleware } from \"./types\";\n\n/**\n * 扁平化嵌套路由\n *\n * 将嵌套路由结构转换为扁平数组,计算完整路径和中间件链\n *\n * @example\n * ```typescript\n * const routes = flattenNestedRoutes([\n * {\n * path: \"/api\",\n * middleware: [authMiddleware],\n * children: [\n * { path: \"/users\", method: \"GET\", handler: getUsers },\n * { path: \"/users/:id\", method: \"GET\", handler: getUser },\n * ],\n * },\n * ]);\n * // 结果:\n * // [\n * // { fullPath: \"/api/users\", method: \"GET\", ... },\n * // { fullPath: \"/api/users/:id\", method: \"GET\", ... },\n * // ]\n * ```\n */\nexport function flattenNestedRoutes(\n routes: (Route | NestedRoute)[],\n): FlattenedRoute[] {\n const flattened: FlattenedRoute[] = [];\n\n function processRoute(\n route: Route | NestedRoute,\n parentPath = \"\",\n parentMiddleware: Middleware[] = [],\n parentName?: string,\n ): void {\n // 计算当前完整路径\n const currentPath = normalizePath(parentPath + route.path);\n // 合并中间件链\n const currentMiddleware = [\n ...parentMiddleware,\n ...(route.middleware || []),\n ];\n // 当前路由的 name(用于传递给子路由)\n const currentName = route.name || parentName;\n\n if (\"method\" in route && \"handler\" in route) {\n // 叶子路由(有处理函数)\n const leafRoute = route as Route;\n flattened.push({\n ...leafRoute,\n fullPath: currentPath,\n middlewareChain: currentMiddleware,\n parentName: parentName, // 保存父级名称\n });\n } else if (\"children\" in route && route.children) {\n // 分组路由,递归处理子路由\n for (const child of route.children) {\n processRoute(child, currentPath, currentMiddleware, currentName);\n }\n }\n }\n\n for (const route of routes) {\n processRoute(route);\n }\n\n return flattened;\n}\n\n/**\n * 标准化路径\n *\n * - 解码 URL 编码字符\n * - 去除重复斜杠\n * - 处理结尾斜杠\n *\n * @example\n * ```typescript\n * normalizePath(\"//api//users/\") // \"/api/users\"\n * normalizePath(\"/api/%20test\") // \"/api/ test\"\n * ```\n */\nexport function normalizePath(path: string): string {\n // 解码 URL 编码\n let normalized = decodeURIComponent(path);\n\n // 去除重复斜杠\n normalized = normalized.replace(/\\/+/g, \"/\");\n\n // 空路径转为根路径\n if (normalized === \"\") return \"/\";\n\n // 去除结尾斜杠(根路径除外)\n if (normalized !== \"/\" && normalized.endsWith(\"/\")) {\n normalized = normalized.slice(0, -1);\n }\n\n return normalized;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAgB,oBACd,QACkB;CAClB,MAAM,YAA8B,EAAE;CAEtC,SAAS,aACP,OACA,aAAa,IACb,mBAAiC,EAAE,EACnC,YACM;EAEN,MAAM,cAAc,cAAc,aAAa,MAAM,KAAK;EAE1D,MAAM,oBAAoB,CACxB,GAAG,kBACH,GAAI,MAAM,cAAc,EAAE,CAC3B;EAED,MAAM,cAAc,MAAM,QAAQ;AAElC,MAAI,YAAY,SAAS,aAAa,OAAO;GAE3C,MAAM,YAAY;AAClB,aAAU,KAAK;IACb,GAAG;IACH,UAAU;IACV,iBAAiB;IACL;IACb,CAAC;aACO,cAAc,SAAS,MAAM,SAEtC,MAAK,MAAM,SAAS,MAAM,SACxB,cAAa,OAAO,aAAa,mBAAmB,YAAY;;AAKtE,MAAK,MAAM,SAAS,OAClB,cAAa,MAAM;AAGrB,QAAO;;;;;;;;;;;;;;;AAgBT,SAAgB,cAAc,MAAsB;CAElD,IAAI,aAAa,mBAAmB,KAAK;AAGzC,cAAa,WAAW,QAAQ,QAAQ,IAAI;AAG5C,KAAI,eAAe,GAAI,QAAO;AAG9B,KAAI,eAAe,OAAO,WAAW,SAAS,IAAI,CAChD,cAAa,WAAW,MAAM,GAAG,GAAG;AAGtC,QAAO"}
@@ -1,10 +1,8 @@
1
- import { Route, NestedRoute, FlattenedRoute } from './types/types.js';
1
+ import { l as Route, n as FlattenedRoute, s as NestedRoute } from "./types-Cb7_2VSt.mjs";
2
+ import "./schema-CVuttFSw.mjs";
3
+ import "./index-DXJd7-2Z.mjs";
2
4
 
3
- /**
4
- * 路由工具函数
5
- *
6
- * 提供路由处理的基础工具
7
- */
5
+ //#region src/router.d.ts
8
6
 
9
7
  /**
10
8
  * 扁平化嵌套路由
@@ -45,5 +43,6 @@ declare function flattenNestedRoutes(routes: (Route | NestedRoute)[]): Flattened
45
43
  * ```
46
44
  */
47
45
  declare function normalizePath(path: string): string;
48
-
46
+ //#endregion
49
47
  export { flattenNestedRoutes, normalizePath };
48
+ //# sourceMappingURL=router.d.mts.map
@@ -0,0 +1,4 @@
1
+ import { n as init_router, r as normalizePath, t as flattenNestedRoutes } from "./router-BOeVQrjz.mjs";
2
+
3
+ init_router();
4
+ export { flattenNestedRoutes, normalizePath };
@@ -0,0 +1,81 @@
1
+ import { Static, TSchema } from "@sinclair/typebox";
2
+
3
+ //#region src/types/schema.d.ts
4
+ /**
5
+ * Schema 类型定义
6
+ *
7
+ * 使用 TSchema 约束替代 any,提供完整的类型安全
8
+ *
9
+ * @author Framework Team
10
+ * @version 1.0.0
11
+ * @license MIT
12
+ */
13
+
14
+ /**
15
+ * 路由 Schema 配置
16
+ * 所有 schema 字段使用 TSchema 约束
17
+ */
18
+ interface RouteSchema {
19
+ body?: TSchema;
20
+ query?: TSchema;
21
+ params?: TSchema;
22
+ headers?: TSchema;
23
+ cookies?: TSchema;
24
+ }
25
+ /**
26
+ * 从 Schema 配置推导出具体类型
27
+ */
28
+ type InferSchema<T extends RouteSchema> = {
29
+ body: T["body"] extends TSchema ? Static<T["body"]> : unknown;
30
+ query: T["query"] extends TSchema ? Static<T["query"]> : Record<string, string>;
31
+ params: T["params"] extends TSchema ? Static<T["params"]> : Record<string, string>;
32
+ headers: T["headers"] extends TSchema ? Static<T["headers"]> : Record<string, string>;
33
+ cookies: T["cookies"] extends TSchema ? Static<T["cookies"]> : Record<string, string>;
34
+ };
35
+ /**
36
+ * Handler 上下文类型
37
+ */
38
+ interface HandlerContext<T extends RouteSchema = RouteSchema> {
39
+ /** 原始请求对象 */
40
+ req: Request;
41
+ /** 请求体 (经过 schema 验证) */
42
+ body: InferSchema<T>["body"];
43
+ /** 查询参数 (经过 schema 验证) */
44
+ query: InferSchema<T>["query"];
45
+ /** 路径参数 (经过 schema 验证) */
46
+ params: InferSchema<T>["params"];
47
+ /** 请求头 (经过 schema 验证) */
48
+ headers: InferSchema<T>["headers"];
49
+ /** Cookie (经过 schema 验证) */
50
+ cookies: InferSchema<T>["cookies"];
51
+ }
52
+ /**
53
+ * 带额外上下文的 Handler 上下文类型
54
+ * 用于中间件注入额外数据
55
+ */
56
+ type HandlerContextWithExtra<T extends RouteSchema = RouteSchema, TExtra extends Record<string, unknown> = Record<string, never>> = HandlerContext<T> & TExtra;
57
+ /**
58
+ * Handler 函数类型
59
+ */
60
+ type TypedHandler<T extends RouteSchema = RouteSchema, TExtra extends Record<string, unknown> = Record<string, never>, TReturn = unknown> = (ctx: HandlerContextWithExtra<T, TExtra>) => TReturn | Promise<TReturn>;
61
+ /**
62
+ * 扩展的路由配置 (包含 schema)
63
+ */
64
+ interface TypedRouteConfig<T extends RouteSchema = RouteSchema> {
65
+ method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
66
+ path: string;
67
+ schema?: T;
68
+ handler: (req: Request) => Response | Promise<Response>;
69
+ middleware?: Array<(req: Request, next: () => Promise<Response>) => Promise<Response>>;
70
+ docs?: {
71
+ description?: string;
72
+ tags?: string[];
73
+ security?: unknown[];
74
+ responses?: Record<string, unknown>;
75
+ };
76
+ timeout?: number;
77
+ maxBodySize?: string;
78
+ }
79
+ //#endregion
80
+ export { TypedHandler as a, RouteSchema as i, HandlerContextWithExtra as n, TypedRouteConfig as o, InferSchema as r, HandlerContext as t };
81
+ //# sourceMappingURL=schema-CVuttFSw.d.mts.map
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,69 @@
1
+ import { Server } from "node:http";
2
+
3
+ //#region src/node-server/serve.d.ts
4
+
5
+ /** fetch 函数类型 */
6
+ type FetchHandler = (request: Request) => Response | Promise<Response>;
7
+ /** 优雅关闭配置 */
8
+ interface GracefulShutdownOptions {
9
+ /** 关闭超时时间(毫秒),默认 30000 */
10
+ timeout?: number;
11
+ /** 关闭前回调 */
12
+ onShutdown?: () => void | Promise<void>;
13
+ /** 关闭完成回调 */
14
+ onShutdownComplete?: () => void;
15
+ /** 监听的信号,默认 ['SIGINT', 'SIGTERM'] */
16
+ signals?: NodeJS.Signals[];
17
+ }
18
+ /** serve 配置选项 */
19
+ interface ServeOptions {
20
+ /** fetch 处理函数 */
21
+ fetch: FetchHandler;
22
+ /** 端口号,默认 3000 */
23
+ port?: number;
24
+ /** 主机名,默认 0.0.0.0 */
25
+ hostname?: string;
26
+ /** 错误处理函数 */
27
+ onError?: (error: Error) => Response | Promise<Response>;
28
+ /** 优雅关闭配置,设置为 true 使用默认配置 */
29
+ gracefulShutdown?: boolean | GracefulShutdownOptions;
30
+ }
31
+ /** serve 返回的服务器信息 */
32
+ interface ServeResult {
33
+ /** Node.js HTTP Server 实例 */
34
+ server: Server;
35
+ /** 服务器端口 */
36
+ port: number;
37
+ /** 服务器主机名 */
38
+ hostname: string;
39
+ /** 关闭服务器 */
40
+ stop: () => Promise<void>;
41
+ /** 优雅关闭(等待现有请求完成) */
42
+ shutdown: () => Promise<void>;
43
+ }
44
+ /**
45
+ * 启动 HTTP 服务器
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * import { serve } from "@vafast/node-server";
50
+ * import { Server } from "vafast";
51
+ *
52
+ * const app = new Server([
53
+ * { method: "GET", path: "/", handler: () => "Hello World" },
54
+ * ]);
55
+ *
56
+ * serve({ fetch: app.fetch, port: 3000 }, () => {
57
+ * console.log("Server running on http://localhost:3000");
58
+ * });
59
+ * ```
60
+ */
61
+ declare function serve(options: ServeOptions, callback?: () => void): ServeResult;
62
+ /**
63
+ * 创建适配器服务器(不自动启动)
64
+ * 用于需要更多控制的场景
65
+ */
66
+ declare function createAdaptorServer(fetch: FetchHandler, onError?: (error: Error) => Response | Promise<Response>): Server;
67
+ //#endregion
68
+ export { createAdaptorServer as a, ServeResult as i, GracefulShutdownOptions as n, serve as o, ServeOptions as r, FetchHandler as t };
69
+ //# sourceMappingURL=serve-BQQ2JzIH.d.mts.map
@@ -0,0 +1,107 @@
1
+ import { t as createProxyRequest } from "./request-B2BkUecT.mjs";
2
+ import { t as writeResponse } from "./response-BhFKEphr.mjs";
3
+ import { createServer } from "node:http";
4
+
5
+ //#region src/node-server/serve.ts
6
+ /**
7
+ * Node.js 服务器适配器
8
+ * 提供类似 Bun.serve 的 API
9
+ */
10
+ /**
11
+ * 创建请求处理函数
12
+ */
13
+ function createRequestHandler(fetch, defaultHost, onError) {
14
+ return async (incoming, outgoing) => {
15
+ try {
16
+ await writeResponse(await fetch(createProxyRequest(incoming, defaultHost)), outgoing);
17
+ } catch (error) {
18
+ const err = error instanceof Error ? error : new Error(String(error));
19
+ if (onError) try {
20
+ await writeResponse(await onError(err), outgoing);
21
+ return;
22
+ } catch {}
23
+ if (!outgoing.headersSent) {
24
+ outgoing.statusCode = 500;
25
+ outgoing.setHeader("Content-Type", "text/plain");
26
+ outgoing.end("Internal Server Error");
27
+ }
28
+ }
29
+ };
30
+ }
31
+ /**
32
+ * 启动 HTTP 服务器
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * import { serve } from "@vafast/node-server";
37
+ * import { Server } from "vafast";
38
+ *
39
+ * const app = new Server([
40
+ * { method: "GET", path: "/", handler: () => "Hello World" },
41
+ * ]);
42
+ *
43
+ * serve({ fetch: app.fetch, port: 3000 }, () => {
44
+ * console.log("Server running on http://localhost:3000");
45
+ * });
46
+ * ```
47
+ */
48
+ function serve(options, callback) {
49
+ const { fetch, port = 3e3, hostname = "0.0.0.0", onError, gracefulShutdown } = options;
50
+ const server = createServer(createRequestHandler(fetch, `${hostname === "0.0.0.0" ? "localhost" : hostname}:${port}`, onError));
51
+ const connections = /* @__PURE__ */ new Set();
52
+ server.on("connection", (socket) => {
53
+ connections.add(socket);
54
+ socket.on("close", () => connections.delete(socket));
55
+ });
56
+ let isShuttingDown = false;
57
+ const shutdown = async () => {
58
+ if (isShuttingDown) return;
59
+ isShuttingDown = true;
60
+ const shutdownOptions = typeof gracefulShutdown === "object" ? gracefulShutdown : {};
61
+ const timeout = shutdownOptions.timeout ?? 3e4;
62
+ if (shutdownOptions.onShutdown) await shutdownOptions.onShutdown();
63
+ return new Promise((resolve) => {
64
+ const forceCloseTimer = setTimeout(() => {
65
+ for (const socket of connections) socket.destroy();
66
+ connections.clear();
67
+ resolve();
68
+ }, timeout);
69
+ server.close(() => {
70
+ clearTimeout(forceCloseTimer);
71
+ shutdownOptions.onShutdownComplete?.();
72
+ resolve();
73
+ });
74
+ for (const socket of connections) if (!socket.writableLength) socket.end();
75
+ });
76
+ };
77
+ if (gracefulShutdown) {
78
+ const signals = (typeof gracefulShutdown === "object" ? gracefulShutdown : {}).signals ?? ["SIGINT", "SIGTERM"];
79
+ for (const signal of signals) process.on(signal, () => {
80
+ shutdown().then(() => process.exit(0));
81
+ });
82
+ }
83
+ server.listen(port, hostname, callback);
84
+ return {
85
+ server,
86
+ port,
87
+ hostname,
88
+ stop: () => new Promise((resolve, reject) => {
89
+ server.close((err) => {
90
+ if (err) reject(err);
91
+ else resolve();
92
+ });
93
+ }),
94
+ shutdown
95
+ };
96
+ }
97
+ /**
98
+ * 创建适配器服务器(不自动启动)
99
+ * 用于需要更多控制的场景
100
+ */
101
+ function createAdaptorServer(fetch, onError) {
102
+ return createServer(createRequestHandler(fetch, "localhost", onError));
103
+ }
104
+
105
+ //#endregion
106
+ export { serve as n, createAdaptorServer as t };
107
+ //# sourceMappingURL=serve-MRGGK7-q.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serve-MRGGK7-q.mjs","names":[],"sources":["../src/node-server/serve.ts"],"sourcesContent":["/**\n * Node.js 服务器适配器\n * 提供类似 Bun.serve 的 API\n */\n\nimport {\n createServer,\n type Server as HttpServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport { createProxyRequest } from \"./request\";\nimport { writeResponse } from \"./response\";\n\n/** fetch 函数类型 */\nexport type FetchHandler = (request: Request) => Response | Promise<Response>;\n\n/** 优雅关闭配置 */\nexport interface GracefulShutdownOptions {\n /** 关闭超时时间(毫秒),默认 30000 */\n timeout?: number;\n /** 关闭前回调 */\n onShutdown?: () => void | Promise<void>;\n /** 关闭完成回调 */\n onShutdownComplete?: () => void;\n /** 监听的信号,默认 ['SIGINT', 'SIGTERM'] */\n signals?: NodeJS.Signals[];\n}\n\n/** serve 配置选项 */\nexport interface ServeOptions {\n /** fetch 处理函数 */\n fetch: FetchHandler;\n /** 端口号,默认 3000 */\n port?: number;\n /** 主机名,默认 0.0.0.0 */\n hostname?: string;\n /** 错误处理函数 */\n onError?: (error: Error) => Response | Promise<Response>;\n /** 优雅关闭配置,设置为 true 使用默认配置 */\n gracefulShutdown?: boolean | GracefulShutdownOptions;\n}\n\n/** serve 返回的服务器信息 */\nexport interface ServeResult {\n /** Node.js HTTP Server 实例 */\n server: HttpServer;\n /** 服务器端口 */\n port: number;\n /** 服务器主机名 */\n hostname: string;\n /** 关闭服务器 */\n stop: () => Promise<void>;\n /** 优雅关闭(等待现有请求完成) */\n shutdown: () => Promise<void>;\n}\n\n/**\n * 创建请求处理函数\n */\nfunction createRequestHandler(\n fetch: FetchHandler,\n defaultHost: string,\n onError?: (error: Error) => Response | Promise<Response>,\n) {\n return async (incoming: IncomingMessage, outgoing: ServerResponse) => {\n try {\n // 创建代理 Request(延迟创建真实 Request)\n const request = createProxyRequest(incoming, defaultHost);\n\n // 调用 fetch handler\n const response = await fetch(request);\n\n // 流式写入 Response\n await writeResponse(response, outgoing);\n } catch (error) {\n // 错误处理\n const err = error instanceof Error ? error : new Error(String(error));\n\n if (onError) {\n try {\n const errorResponse = await onError(err);\n await writeResponse(errorResponse, outgoing);\n return;\n } catch {\n // onError 也失败了,返回 500\n }\n }\n\n // 默认错误响应\n if (!outgoing.headersSent) {\n outgoing.statusCode = 500;\n outgoing.setHeader(\"Content-Type\", \"text/plain\");\n outgoing.end(\"Internal Server Error\");\n }\n }\n };\n}\n\n/**\n * 启动 HTTP 服务器\n *\n * @example\n * ```ts\n * import { serve } from \"@vafast/node-server\";\n * import { Server } from \"vafast\";\n *\n * const app = new Server([\n * { method: \"GET\", path: \"/\", handler: () => \"Hello World\" },\n * ]);\n *\n * serve({ fetch: app.fetch, port: 3000 }, () => {\n * console.log(\"Server running on http://localhost:3000\");\n * });\n * ```\n */\nexport function serve(\n options: ServeOptions,\n callback?: () => void,\n): ServeResult {\n const { fetch, port = 3000, hostname = \"0.0.0.0\", onError, gracefulShutdown } = options;\n\n const defaultHost = `${hostname === \"0.0.0.0\" ? \"localhost\" : hostname}:${port}`;\n const handler = createRequestHandler(fetch, defaultHost, onError);\n\n const server = createServer(handler);\n\n // 追踪活跃连接\n const connections = new Set<import(\"node:net\").Socket>();\n\n server.on(\"connection\", (socket) => {\n connections.add(socket);\n socket.on(\"close\", () => connections.delete(socket));\n });\n\n // 优雅关闭函数\n let isShuttingDown = false;\n\n const shutdown = async (): Promise<void> => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n const shutdownOptions: GracefulShutdownOptions =\n typeof gracefulShutdown === \"object\" ? gracefulShutdown : {};\n\n const timeout = shutdownOptions.timeout ?? 30000;\n\n // 执行关闭前回调\n if (shutdownOptions.onShutdown) {\n await shutdownOptions.onShutdown();\n }\n\n return new Promise<void>((resolve) => {\n // 设置超时强制关闭\n const forceCloseTimer = setTimeout(() => {\n // 强制关闭所有连接\n for (const socket of connections) {\n socket.destroy();\n }\n connections.clear();\n resolve();\n }, timeout);\n\n // 停止接受新连接\n server.close(() => {\n clearTimeout(forceCloseTimer);\n shutdownOptions.onShutdownComplete?.();\n resolve();\n });\n\n // 关闭空闲连接\n for (const socket of connections) {\n // 如果连接空闲,立即关闭\n if (!socket.writableLength) {\n socket.end();\n }\n }\n });\n };\n\n // 注册信号处理\n if (gracefulShutdown) {\n const shutdownOptions: GracefulShutdownOptions =\n typeof gracefulShutdown === \"object\" ? gracefulShutdown : {};\n\n const signals = shutdownOptions.signals ?? [\"SIGINT\", \"SIGTERM\"];\n\n for (const signal of signals) {\n process.on(signal, () => {\n shutdown().then(() => process.exit(0));\n });\n }\n }\n\n // 启动服务器\n server.listen(port, hostname, callback);\n\n return {\n server,\n port,\n hostname,\n stop: () =>\n new Promise<void>((resolve, reject) => {\n server.close((err) => {\n if (err) reject(err);\n else resolve();\n });\n }),\n shutdown,\n };\n}\n\n/**\n * 创建适配器服务器(不自动启动)\n * 用于需要更多控制的场景\n */\nexport function createAdaptorServer(\n fetch: FetchHandler,\n onError?: (error: Error) => Response | Promise<Response>,\n): HttpServer {\n const handler = createRequestHandler(fetch, \"localhost\", onError);\n return createServer(handler);\n}\n"],"mappings":";;;;;;;;;;;;AA4DA,SAAS,qBACP,OACA,aACA,SACA;AACA,QAAO,OAAO,UAA2B,aAA6B;AACpE,MAAI;AAQF,SAAM,cAHW,MAAM,MAHP,mBAAmB,UAAU,YAAY,CAGpB,EAGP,SAAS;WAChC,OAAO;GAEd,MAAM,MAAM,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,OAAO,MAAM,CAAC;AAErE,OAAI,QACF,KAAI;AAEF,UAAM,cADgB,MAAM,QAAQ,IAAI,EACL,SAAS;AAC5C;WACM;AAMV,OAAI,CAAC,SAAS,aAAa;AACzB,aAAS,aAAa;AACtB,aAAS,UAAU,gBAAgB,aAAa;AAChD,aAAS,IAAI,wBAAwB;;;;;;;;;;;;;;;;;;;;;;AAuB7C,SAAgB,MACd,SACA,UACa;CACb,MAAM,EAAE,OAAO,OAAO,KAAM,WAAW,WAAW,SAAS,qBAAqB;CAKhF,MAAM,SAAS,aAFC,qBAAqB,OADjB,GAAG,aAAa,YAAY,cAAc,SAAS,GAAG,QACjB,QAAQ,CAE7B;CAGpC,MAAM,8BAAc,IAAI,KAAgC;AAExD,QAAO,GAAG,eAAe,WAAW;AAClC,cAAY,IAAI,OAAO;AACvB,SAAO,GAAG,eAAe,YAAY,OAAO,OAAO,CAAC;GACpD;CAGF,IAAI,iBAAiB;CAErB,MAAM,WAAW,YAA2B;AAC1C,MAAI,eAAgB;AACpB,mBAAiB;EAEjB,MAAM,kBACJ,OAAO,qBAAqB,WAAW,mBAAmB,EAAE;EAE9D,MAAM,UAAU,gBAAgB,WAAW;AAG3C,MAAI,gBAAgB,WAClB,OAAM,gBAAgB,YAAY;AAGpC,SAAO,IAAI,SAAe,YAAY;GAEpC,MAAM,kBAAkB,iBAAiB;AAEvC,SAAK,MAAM,UAAU,YACnB,QAAO,SAAS;AAElB,gBAAY,OAAO;AACnB,aAAS;MACR,QAAQ;AAGX,UAAO,YAAY;AACjB,iBAAa,gBAAgB;AAC7B,oBAAgB,sBAAsB;AACtC,aAAS;KACT;AAGF,QAAK,MAAM,UAAU,YAEnB,KAAI,CAAC,OAAO,eACV,QAAO,KAAK;IAGhB;;AAIJ,KAAI,kBAAkB;EAIpB,MAAM,WAFJ,OAAO,qBAAqB,WAAW,mBAAmB,EAAE,EAE9B,WAAW,CAAC,UAAU,UAAU;AAEhE,OAAK,MAAM,UAAU,QACnB,SAAQ,GAAG,cAAc;AACvB,aAAU,CAAC,WAAW,QAAQ,KAAK,EAAE,CAAC;IACtC;;AAKN,QAAO,OAAO,MAAM,UAAU,SAAS;AAEvC,QAAO;EACL;EACA;EACA;EACA,YACE,IAAI,SAAe,SAAS,WAAW;AACrC,UAAO,OAAO,QAAQ;AACpB,QAAI,IAAK,QAAO,IAAI;QACf,UAAS;KACd;IACF;EACJ;EACD;;;;;;AAOH,SAAgB,oBACd,OACA,SACY;AAEZ,QAAO,aADS,qBAAqB,OAAO,aAAa,QAAQ,CACrC"}
@@ -0,0 +1,2 @@
1
+ import { a as createAdaptorServer, i as ServeResult, o as serve, r as ServeOptions, t as FetchHandler } from "./serve-BQQ2JzIH.mjs";
2
+ export { type FetchHandler, type ServeOptions, type ServeResult, createAdaptorServer, serve };
package/dist/serve.mjs ADDED
@@ -0,0 +1,4 @@
1
+ import "./request-B2BkUecT.mjs";
2
+ import { n as serve, t as createAdaptorServer } from "./serve-MRGGK7-q.mjs";
3
+
4
+ export { createAdaptorServer, serve };
@@ -0,0 +1,4 @@
1
+ import "../schema-CVuttFSw.mjs";
2
+ import "../index-DXJd7-2Z.mjs";
3
+ import { t as BaseServer } from "../base-server-Gakrozqk.mjs";
4
+ export { BaseServer };
@@ -0,0 +1,4 @@
1
+ import { n as init_base_server, t as BaseServer } from "../base-server-Bq4_lJWK.mjs";
2
+
3
+ init_base_server();
4
+ export { BaseServer };
@@ -0,0 +1,5 @@
1
+ import "../schema-CVuttFSw.mjs";
2
+ import "../index-DXJd7-2Z.mjs";
3
+ import "../base-server-Gakrozqk.mjs";
4
+ import { t as ComponentServer } from "../component-server-BOz4Q-Qt.mjs";
5
+ export { ComponentServer };
@@ -0,0 +1,5 @@
1
+ import "../dependency-manager-CPkwMI7J.mjs";
2
+ import { n as init_component_server, t as ComponentServer } from "../component-server-ARXvZJUQ.mjs";
3
+
4
+ init_component_server();
5
+ export { ComponentServer };
@@ -0,0 +1,7 @@
1
+ import "../schema-CVuttFSw.mjs";
2
+ import "../index-DXJd7-2Z.mjs";
3
+ import { t as BaseServer } from "../base-server-Gakrozqk.mjs";
4
+ import { t as Server } from "../server-Drc2kSxp.mjs";
5
+ import { t as ComponentServer } from "../component-server-BOz4Q-Qt.mjs";
6
+ import { t as ServerFactory } from "../index-DFsQyT61.mjs";
7
+ export { BaseServer, ComponentServer, Server, ServerFactory };
@@ -0,0 +1,8 @@
1
+ import { t as BaseServer } from "../base-server-Bq4_lJWK.mjs";
2
+ import { t as Server } from "../server-C8WCshmG.mjs";
3
+ import "../dependency-manager-CPkwMI7J.mjs";
4
+ import { t as ComponentServer } from "../component-server-ARXvZJUQ.mjs";
5
+ import { r as ServerFactory, t as init_server } from "../server-B0nzGCG5.mjs";
6
+
7
+ init_server();
8
+ export { BaseServer, ComponentServer, Server, ServerFactory };
@@ -0,0 +1,7 @@
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 { t as ServerFactory } from "../index-DFsQyT61.mjs";
7
+ export { ServerFactory };
@@ -0,0 +1,6 @@
1
+ import "../dependency-manager-CPkwMI7J.mjs";
2
+ import "../component-server-ARXvZJUQ.mjs";
3
+ import { i as init_server_factory, r as ServerFactory } from "../server-B0nzGCG5.mjs";
4
+
5
+ init_server_factory();
6
+ export { ServerFactory };
@@ -0,0 +1,5 @@
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
+ export { Server };
@@ -0,0 +1,4 @@
1
+ import { n as init_server, t as Server } from "../server-C8WCshmG.mjs";
2
+
3
+ init_server();
4
+ export { Server };
@@ -0,0 +1,88 @@
1
+ import { n as __exportAll, t as __esmMin } from "./chunk-67U6L5Jh.mjs";
2
+ import { n as init_base_server, t as BaseServer } from "./base-server-Bq4_lJWK.mjs";
3
+ import { n as init_server$1, t as Server } from "./server-C8WCshmG.mjs";
4
+ import { n as init_component_server, t as ComponentServer } from "./component-server-ARXvZJUQ.mjs";
5
+
6
+ //#region src/server/server-factory.ts
7
+ var ServerFactory;
8
+ var init_server_factory = __esmMin((() => {
9
+ init_server();
10
+ init_component_server();
11
+ ServerFactory = class {
12
+ servers = /* @__PURE__ */ new Map();
13
+ /**
14
+ * 创建标准REST API服务器
15
+ */
16
+ createRestServer(routes) {
17
+ const server = new Server(routes);
18
+ this.servers.set("rest", server);
19
+ return server;
20
+ }
21
+ /**
22
+ * 创建组件服务器
23
+ */
24
+ createComponentServer(routes) {
25
+ const server = new ComponentServer(routes);
26
+ this.servers.set("component", server);
27
+ return server;
28
+ }
29
+ /**
30
+ * 获取指定类型的服务器
31
+ */
32
+ getServer(type) {
33
+ return this.servers.get(type);
34
+ }
35
+ /**
36
+ * 获取所有服务器
37
+ */
38
+ getAllServers() {
39
+ return this.servers;
40
+ }
41
+ /**
42
+ * 移除指定类型的服务器
43
+ */
44
+ removeServer(type) {
45
+ return this.servers.delete(type);
46
+ }
47
+ /**
48
+ * 清除所有服务器
49
+ */
50
+ clearServers() {
51
+ this.servers.clear();
52
+ }
53
+ /**
54
+ * 获取服务器状态信息
55
+ */
56
+ getServerStatus() {
57
+ const status = {};
58
+ for (const [name, server] of this.servers) if (server instanceof Server) status[name] = {
59
+ type: "REST API",
60
+ routes: server.routes?.length || 0
61
+ };
62
+ else if (server instanceof ComponentServer) status[name] = {
63
+ type: "Component",
64
+ routes: server.routes?.length || 0
65
+ };
66
+ return status;
67
+ }
68
+ };
69
+ }));
70
+
71
+ //#endregion
72
+ //#region src/server/index.ts
73
+ var server_exports = /* @__PURE__ */ __exportAll({
74
+ BaseServer: () => BaseServer,
75
+ ComponentServer: () => ComponentServer,
76
+ Server: () => Server,
77
+ ServerFactory: () => ServerFactory
78
+ });
79
+ var init_server = __esmMin((() => {
80
+ init_server$1();
81
+ init_component_server();
82
+ init_server_factory();
83
+ init_base_server();
84
+ }));
85
+
86
+ //#endregion
87
+ export { init_server_factory as i, server_exports as n, ServerFactory as r, init_server as t };
88
+ //# sourceMappingURL=server-B0nzGCG5.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server-B0nzGCG5.mjs","names":[],"sources":["../src/server/server-factory.ts","../src/server/index.ts"],"sourcesContent":["import type { Route, NestedRoute } from \"../types\";\nimport type {\n ComponentRoute,\n NestedComponentRoute,\n} from \"../types/component-route\";\nimport { Server } from \"../server\";\nimport { ComponentServer } from \"./component-server\";\n\n/**\n * 服务器工厂类\n * 用于创建和管理不同类型的服务器\n */\nexport class ServerFactory {\n private servers: Map<string, Server | ComponentServer> = new Map();\n\n /**\n * 创建标准REST API服务器\n */\n createRestServer(routes: (Route | NestedRoute)[]): Server {\n const server = new Server(routes);\n this.servers.set(\"rest\", server);\n return server;\n }\n\n /**\n * 创建组件服务器\n */\n createComponentServer(\n routes: (ComponentRoute | NestedComponentRoute)[],\n ): ComponentServer {\n const server = new ComponentServer(routes);\n this.servers.set(\"component\", server);\n return server;\n }\n\n /**\n * 获取指定类型的服务器\n */\n getServer(type: \"rest\" | \"component\"): Server | ComponentServer | undefined {\n return this.servers.get(type);\n }\n\n /**\n * 获取所有服务器\n */\n getAllServers(): Map<string, Server | ComponentServer> {\n return this.servers;\n }\n\n /**\n * 移除指定类型的服务器\n */\n removeServer(type: string): boolean {\n return this.servers.delete(type);\n }\n\n /**\n * 清除所有服务器\n */\n clearServers(): void {\n this.servers.clear();\n }\n\n /**\n * 获取服务器状态信息\n */\n getServerStatus(): Record<string, { type: string; routes: number }> {\n const status: Record<string, { type: string; routes: number }> = {};\n\n for (const [name, server] of this.servers) {\n if (server instanceof Server) {\n status[name] = {\n type: \"REST API\",\n routes: (server as any).routes?.length || 0,\n };\n } else if (server instanceof ComponentServer) {\n status[name] = {\n type: \"Component\",\n routes: (server as any).routes?.length || 0,\n };\n }\n }\n\n return status;\n }\n}\n","/**\n * 服务器模块导出\n */\n\n// 主服务器类\nexport { Server } from \"./server\";\n\n// 组件服务器 (SSR)\nexport { ComponentServer } from \"./component-server\";\n\n// 服务器工厂\nexport { ServerFactory } from \"./server-factory\";\n\n// 基类 (仅用于扩展)\nexport { BaseServer } from \"./base-server\";\n"],"mappings":";;;;;;;;cAKmC;wBACkB;CAMxC,gBAAb,MAA2B;EACzB,AAAQ,0BAAiD,IAAI,KAAK;;;;EAKlE,iBAAiB,QAAyC;GACxD,MAAM,SAAS,IAAI,OAAO,OAAO;AACjC,QAAK,QAAQ,IAAI,QAAQ,OAAO;AAChC,UAAO;;;;;EAMT,sBACE,QACiB;GACjB,MAAM,SAAS,IAAI,gBAAgB,OAAO;AAC1C,QAAK,QAAQ,IAAI,aAAa,OAAO;AACrC,UAAO;;;;;EAMT,UAAU,MAAkE;AAC1E,UAAO,KAAK,QAAQ,IAAI,KAAK;;;;;EAM/B,gBAAuD;AACrD,UAAO,KAAK;;;;;EAMd,aAAa,MAAuB;AAClC,UAAO,KAAK,QAAQ,OAAO,KAAK;;;;;EAMlC,eAAqB;AACnB,QAAK,QAAQ,OAAO;;;;;EAMtB,kBAAoE;GAClE,MAAM,SAA2D,EAAE;AAEnE,QAAK,MAAM,CAAC,MAAM,WAAW,KAAK,QAChC,KAAI,kBAAkB,OACpB,QAAO,QAAQ;IACb,MAAM;IACN,QAAS,OAAe,QAAQ,UAAU;IAC3C;YACQ,kBAAkB,gBAC3B,QAAO,QAAQ;IACb,MAAM;IACN,QAAS,OAAe,QAAQ,UAAU;IAC3C;AAIL,UAAO;;;;;;;;;;;;;;gBC9EuB;wBAGmB;sBAGJ;mBAGN"}
@@ -0,0 +1,137 @@
1
+ import { t as __esmMin } from "./chunk-67U6L5Jh.mjs";
2
+ import { n as init_router, t as flattenNestedRoutes } from "./router-BOeVQrjz.mjs";
3
+ import { i as json, r as init_response } from "./response-CSKW5hsS.mjs";
4
+ import { n as composeMiddleware, r as init_middleware } from "./middleware-3ShRJyd1.mjs";
5
+ import { n as init_base_server, t as BaseServer } from "./base-server-Bq4_lJWK.mjs";
6
+ import { n as init_radix_tree, t as RadixRouter } from "./radix-tree-BWmhTLhT.mjs";
7
+ import { c as setGlobalRegistry, s as init_route_registry, t as RouteRegistry } from "./route-registry-AlkDgbcE.mjs";
8
+
9
+ //#region src/server/server.ts
10
+ var Server;
11
+ var init_server = __esmMin((() => {
12
+ init_router();
13
+ init_middleware();
14
+ init_response();
15
+ init_base_server();
16
+ init_radix_tree();
17
+ init_route_registry();
18
+ Server = class extends BaseServer {
19
+ router;
20
+ routes;
21
+ /** 是否已预编译 */
22
+ isCompiled = false;
23
+ /** 预编译时的全局中间件数量 */
24
+ compiledWithMiddlewareCount = 0;
25
+ constructor(routes = []) {
26
+ super();
27
+ this.router = new RadixRouter();
28
+ this.routes = [];
29
+ this.router.setCompiler((middleware, handler) => composeMiddleware(middleware, handler));
30
+ if (routes.length > 0) this.registerRoutes([...routes]);
31
+ }
32
+ /**
33
+ * 预编译所有路由处理链
34
+ * 在添加所有路由和全局中间件后调用,可提升运行时性能
35
+ */
36
+ compile() {
37
+ this.router.precompileAll(this.globalMiddleware);
38
+ this.isCompiled = true;
39
+ this.compiledWithMiddlewareCount = this.globalMiddleware.length;
40
+ return this;
41
+ }
42
+ registerRoutes(routes) {
43
+ const flattened = flattenNestedRoutes(routes);
44
+ this.routes.push(...flattened);
45
+ for (const route of flattened) this.router.register(route.method, route.fullPath, route.handler, route.middlewareChain || []);
46
+ this.detectRouteConflicts(flattened);
47
+ this.logFlattenedRoutes(flattened);
48
+ if (this.globalMiddleware.length === 0 && !this.isCompiled) this.compile();
49
+ setGlobalRegistry(new RouteRegistry(this.routes));
50
+ }
51
+ /** 快速提取 pathname */
52
+ extractPathname(url) {
53
+ let start = url.indexOf("://");
54
+ start = start === -1 ? 0 : start + 3;
55
+ const pathStart = url.indexOf("/", start);
56
+ if (pathStart === -1) return "/";
57
+ let end = url.indexOf("?", pathStart);
58
+ if (end === -1) end = url.indexOf("#", pathStart);
59
+ if (end === -1) end = url.length;
60
+ return url.substring(pathStart, end) || "/";
61
+ }
62
+ /** 生成 404/405 响应 */
63
+ createErrorResponse(method, pathname) {
64
+ const allowedMethods = this.router.getAllowedMethods(pathname);
65
+ if (allowedMethods.length > 0) return json({
66
+ success: false,
67
+ error: "Method Not Allowed",
68
+ message: `Method ${method} not allowed for this endpoint`,
69
+ allowedMethods
70
+ }, 405, { Allow: allowedMethods.join(", ") });
71
+ return json({
72
+ success: false,
73
+ error: "Not Found"
74
+ }, 404);
75
+ }
76
+ /** 处理请求 */
77
+ fetch = async (req) => {
78
+ const pathname = this.extractPathname(req.url);
79
+ const method = req.method;
80
+ const match = this.router.match(method, pathname);
81
+ if (match) {
82
+ req.params = match.params;
83
+ if (match.compiled && this.globalMiddleware.length === this.compiledWithMiddlewareCount) return match.compiled(req);
84
+ return composeMiddleware([...this.globalMiddleware, ...match.middleware], match.handler)(req);
85
+ }
86
+ if (method === "OPTIONS") {
87
+ const allowedMethods = this.router.getAllowedMethods(pathname);
88
+ if (allowedMethods.length > 0) {
89
+ const routeMiddleware = this.router.match(allowedMethods[0], pathname)?.middleware || [];
90
+ const allMiddleware = [...this.globalMiddleware, ...routeMiddleware];
91
+ const optionsHandler = () => new Response(null, {
92
+ status: 204,
93
+ headers: { Allow: allowedMethods.join(", ") }
94
+ });
95
+ return composeMiddleware(allMiddleware, optionsHandler)(req);
96
+ }
97
+ }
98
+ if (this.globalMiddleware.length > 0) return composeMiddleware(this.globalMiddleware, () => this.createErrorResponse(method, pathname))(req);
99
+ return this.createErrorResponse(method, pathname);
100
+ };
101
+ addRoute(route) {
102
+ const flattenedRoute = {
103
+ ...route,
104
+ fullPath: route.path,
105
+ middlewareChain: route.middleware || []
106
+ };
107
+ this.routes.push(flattenedRoute);
108
+ this.router.register(route.method, route.path, route.handler, route.middleware || []);
109
+ }
110
+ addRoutes(routes) {
111
+ this.registerRoutes([...routes]);
112
+ }
113
+ getRoutes() {
114
+ return this.router.getRoutes();
115
+ }
116
+ /**
117
+ * 获取完整的路由元信息(不含 handler 和 middleware)
118
+ *
119
+ * 用于 API 文档生成、Webhook 事件注册、权限检查等场景
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * const routes = server.getRoutesWithMeta()
124
+ * for (const route of routes) {
125
+ * console.log(route.fullPath, route.name, route.description)
126
+ * }
127
+ * ```
128
+ */
129
+ getRoutesWithMeta() {
130
+ return this.routes;
131
+ }
132
+ };
133
+ }));
134
+
135
+ //#endregion
136
+ export { init_server as n, Server as t };
137
+ //# sourceMappingURL=server-C8WCshmG.mjs.map