vafast 0.4.23 → 0.5.1

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 (165) hide show
  1. package/README.md +133 -19
  2. package/dist/{base-server-B7MYJNsl.mjs → base-server-CE0mfqPY.mjs} +11 -23
  3. package/dist/base-server-CE0mfqPY.mjs.map +1 -0
  4. package/dist/{base-server-DLxtulAO.d.mts → base-server-Contwrlf.d.mts} +5 -6
  5. package/dist/{base64url-C2zopQdH.mjs → base64url-Cc77f1ms.mjs} +1 -1
  6. package/dist/{base64url-C2zopQdH.mjs.map → base64url-Cc77f1ms.mjs.map} +1 -1
  7. package/dist/{base64url-Dwi2Afhc.d.mts → base64url-DNUGwekK.d.mts} +1 -1
  8. package/dist/{component-route-nrrO0iSI.d.mts → component-route-Di7R40-2.d.mts} +2 -2
  9. package/dist/{component-router-RwPL20vN.mjs → component-router-B6M5XDnp.mjs} +1 -1
  10. package/dist/{component-router-RwPL20vN.mjs.map → component-router-B6M5XDnp.mjs.map} +1 -1
  11. package/dist/{component-server-DomPJ_7S.mjs → component-server-Cya46YN3.mjs} +7 -7
  12. package/dist/component-server-Cya46YN3.mjs.map +1 -0
  13. package/dist/{component-server-JqpDC7wy.d.mts → component-server-fR4UV6Jq.d.mts} +4 -4
  14. package/dist/contract-BKqc9fFH.mjs +114 -0
  15. package/dist/contract-BKqc9fFH.mjs.map +1 -0
  16. package/dist/contract-BL3JflJ7.d.mts +71 -0
  17. package/dist/defineRoute-BjLBWeSj.d.mts +152 -0
  18. package/dist/defineRoute.d.mts +2 -60
  19. package/dist/defineRoute.mjs +135 -26
  20. package/dist/defineRoute.mjs.map +1 -1
  21. package/dist/{dependency-manager-DCmh7xFc.mjs → dependency-manager-CGMZJTer.mjs} +1 -1
  22. package/dist/{dependency-manager-DCmh7xFc.mjs.map → dependency-manager-CGMZJTer.mjs.map} +1 -1
  23. package/dist/{dependency-manager-C3_7ic4h.d.mts → dependency-manager-DIN9X0Gj.d.mts} +1 -1
  24. package/dist/{formats-Dk-DSBY4.d.mts → formats-DDDSFWP0.d.mts} +1 -1
  25. package/dist/{go-await-C4ZdEUwY.mjs → go-await-B1U27PgB.mjs} +1 -1
  26. package/dist/{go-await-C4ZdEUwY.mjs.map → go-await-B1U27PgB.mjs.map} +1 -1
  27. package/dist/{go-await-DL1A_-4X.d.mts → go-await-DPtVBug4.d.mts} +1 -1
  28. package/dist/{html-renderer-DTtJ_Yic.mjs → html-renderer-D1zzDVQM.mjs} +1 -1
  29. package/dist/{html-renderer-DTtJ_Yic.mjs.map → html-renderer-D1zzDVQM.mjs.map} +1 -1
  30. package/dist/{html-renderer-CfKK2BrP.d.mts → html-renderer-DhQxRuyi.d.mts} +1 -1
  31. package/dist/{index-Bj3SWrMU.d.mts → index-DCloGU_g.d.mts} +6 -6
  32. package/dist/index.d.mts +22 -27
  33. package/dist/index.mjs +19 -22
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/middleware/component-router.d.mts +1 -1
  36. package/dist/middleware/component-router.mjs +1 -1
  37. package/dist/{middleware-KXEoefLX.d.mts → middleware-BR-R4p0M.d.mts} +2 -2
  38. package/dist/middleware.d.mts +1 -3
  39. package/dist/middleware.mjs +1 -1
  40. package/dist/monitoring/index.d.mts +3 -6
  41. package/dist/monitoring/native-monitor.d.mts +3 -6
  42. package/dist/node-server/index.d.mts +1 -1
  43. package/dist/node-server/index.mjs +3 -3
  44. package/dist/node-server/request.mjs +1 -1
  45. package/dist/node-server/response.mjs +1 -1
  46. package/dist/node-server/serve.d.mts +1 -1
  47. package/dist/node-server/serve.mjs +2 -2
  48. package/dist/{parsers-BerGr2_q.d.mts → parsers-8hIAx0OV.d.mts} +1 -1
  49. package/dist/{parsers-DpH_mD0H.mjs → parsers-BrG_mRLq.mjs} +1 -1
  50. package/dist/{parsers-DpH_mD0H.mjs.map → parsers-BrG_mRLq.mjs.map} +1 -1
  51. package/dist/{path-matcher-CGczAIl_.mjs → path-matcher-Dp-DRUV9.mjs} +1 -1
  52. package/dist/{path-matcher-CGczAIl_.mjs.map → path-matcher-Dp-DRUV9.mjs.map} +1 -1
  53. package/dist/{radix-tree-qqSjnVXF.mjs → radix-tree-CccjvyTP.mjs} +1 -1
  54. package/dist/{radix-tree-qqSjnVXF.mjs.map → radix-tree-CccjvyTP.mjs.map} +1 -1
  55. package/dist/{request-B-Nct5f7.mjs → request-CppAFyqX.mjs} +1 -1
  56. package/dist/{request-B-Nct5f7.mjs.map → request-CppAFyqX.mjs.map} +1 -1
  57. package/dist/{response-BMfdEcTm.d.mts → response-BNLzz4Tq.d.mts} +2 -2
  58. package/dist/{middleware-CewKbtb4.mjs → response-CQ1IgWei.mjs} +55 -55
  59. package/dist/response-CQ1IgWei.mjs.map +1 -0
  60. package/dist/{response-BnkYA4pj.mjs → response-DNdvtn-K.mjs} +1 -1
  61. package/dist/{response-BnkYA4pj.mjs.map → response-DNdvtn-K.mjs.map} +1 -1
  62. package/dist/{route-registry-emTmRrWQ.mjs → route-registry-BzExlM2t.mjs} +23 -9
  63. package/dist/route-registry-BzExlM2t.mjs.map +1 -0
  64. package/dist/{route-registry-CmABJA2V.d.mts → route-registry-CDBB0GI1.d.mts} +21 -7
  65. package/dist/router/index.d.mts +2 -4
  66. package/dist/router/index.mjs +3 -3
  67. package/dist/router/radix-tree.d.mts +1 -3
  68. package/dist/router/radix-tree.mjs +1 -1
  69. package/dist/router.d.mts +2 -29
  70. package/dist/router.mjs +27 -2
  71. package/dist/router.mjs.map +1 -0
  72. package/dist/{serve-48LEIkPa.mjs → serve-Df3HzwZM.mjs} +3 -3
  73. package/dist/{serve-48LEIkPa.mjs.map → serve-Df3HzwZM.mjs.map} +1 -1
  74. package/dist/{serve-AG80VaIr.d.mts → serve-DlzxgOhz.d.mts} +1 -1
  75. package/dist/serve.d.mts +1 -1
  76. package/dist/serve.mjs +2 -2
  77. package/dist/server/base-server.d.mts +1 -3
  78. package/dist/server/base-server.mjs +1 -1
  79. package/dist/server/component-server.d.mts +1 -4
  80. package/dist/server/component-server.mjs +2 -2
  81. package/dist/server/index.d.mts +5 -6
  82. package/dist/server/index.mjs +6 -6
  83. package/dist/server/server-factory.d.mts +3 -6
  84. package/dist/server/server-factory.mjs +5 -5
  85. package/dist/server/server.d.mts +2 -4
  86. package/dist/server/server.mjs +2 -2
  87. package/dist/{server-DdIIf4co.mjs → server-Bm0BGm01.mjs} +19 -30
  88. package/dist/server-Bm0BGm01.mjs.map +1 -0
  89. package/dist/server-CW1cdqGD.d.mts +48 -0
  90. package/dist/{server-CezB-92R.mjs → server-CZLmrJSk.mjs} +3 -3
  91. package/dist/server-CZLmrJSk.mjs.map +1 -0
  92. package/dist/{sse-BgLhEo43.d.mts → sse-5HykEmSm.d.mts} +2 -4
  93. package/dist/{sse-CBl-szg1.mjs → sse-CWNz0ky7.mjs} +3 -4
  94. package/dist/sse-CWNz0ky7.mjs.map +1 -0
  95. package/dist/types/component-route.d.mts +1 -1
  96. package/dist/types/index.d.mts +3 -6
  97. package/dist/types/index.mjs +1 -3
  98. package/dist/types/types.d.mts +2 -2
  99. package/dist/types-B8Z3cMtZ.d.mts +12 -0
  100. package/dist/utils/base64url.d.mts +1 -1
  101. package/dist/utils/base64url.mjs +1 -1
  102. package/dist/utils/contract.d.mts +2 -0
  103. package/dist/utils/contract.mjs +3 -0
  104. package/dist/utils/dependency-manager.d.mts +1 -1
  105. package/dist/utils/dependency-manager.mjs +1 -1
  106. package/dist/utils/formats.d.mts +1 -1
  107. package/dist/utils/go-await.d.mts +1 -1
  108. package/dist/utils/go-await.mjs +1 -1
  109. package/dist/utils/handle.d.mts +13 -2
  110. package/dist/utils/handle.mjs +19 -3
  111. package/dist/utils/handle.mjs.map +1 -0
  112. package/dist/utils/html-renderer.d.mts +1 -1
  113. package/dist/utils/html-renderer.mjs +1 -1
  114. package/dist/utils/index.d.mts +13 -17
  115. package/dist/utils/index.mjs +11 -13
  116. package/dist/utils/parsers.d.mts +1 -1
  117. package/dist/utils/parsers.mjs +1 -1
  118. package/dist/utils/path-matcher.mjs +1 -1
  119. package/dist/utils/response.d.mts +1 -4
  120. package/dist/utils/response.mjs +1 -1
  121. package/dist/utils/route-registry.d.mts +3 -4
  122. package/dist/utils/route-registry.mjs +2 -2
  123. package/dist/utils/sse.d.mts +2 -2
  124. package/dist/utils/sse.mjs +3 -3
  125. package/dist/utils/validators/validators.d.mts +1 -1
  126. package/dist/utils/validators/validators.mjs +1 -1
  127. package/dist/{validators-Ch71zkT8.d.mts → validators-BFC6S_fr.d.mts} +1 -1
  128. package/dist/{validators-DBkyw6BG.mjs → validators-CkfvNBbK.mjs} +1 -1
  129. package/dist/{validators-DBkyw6BG.mjs.map → validators-CkfvNBbK.mjs.map} +1 -1
  130. package/package.json +1 -1
  131. package/dist/base-server-B7MYJNsl.mjs.map +0 -1
  132. package/dist/component-server-DomPJ_7S.mjs.map +0 -1
  133. package/dist/create-handler-DKw-sQOV.d.mts +0 -87
  134. package/dist/create-handler-RconAcAB.mjs +0 -165
  135. package/dist/create-handler-RconAcAB.mjs.map +0 -1
  136. package/dist/handle-BhR3oyky.d.mts +0 -15
  137. package/dist/handle-BxJwSvV0.mjs +0 -30
  138. package/dist/handle-BxJwSvV0.mjs.map +0 -1
  139. package/dist/middleware-CewKbtb4.mjs.map +0 -1
  140. package/dist/request-validator-Bz9X48FX.mjs +0 -77
  141. package/dist/request-validator-Bz9X48FX.mjs.map +0 -1
  142. package/dist/request-validator-Coo8dI-p.d.mts +0 -67
  143. package/dist/route-6A7umH7b.d.mts +0 -44
  144. package/dist/route-Ds53PR4M.mjs +0 -11
  145. package/dist/route-Ds53PR4M.mjs.map +0 -1
  146. package/dist/route-registry-emTmRrWQ.mjs.map +0 -1
  147. package/dist/router-xWzwz_1a.mjs +0 -68
  148. package/dist/router-xWzwz_1a.mjs.map +0 -1
  149. package/dist/schema-1fwiv7cm.mjs +0 -1
  150. package/dist/schema-B6DFN5c2.d.mts +0 -81
  151. package/dist/server-C2RPKSvC.d.mts +0 -51
  152. package/dist/server-CezB-92R.mjs.map +0 -1
  153. package/dist/server-DdIIf4co.mjs.map +0 -1
  154. package/dist/sse-CBl-szg1.mjs.map +0 -1
  155. package/dist/types/route.d.mts +0 -2
  156. package/dist/types/route.mjs +0 -3
  157. package/dist/types/schema.d.mts +0 -2
  158. package/dist/types/schema.mjs +0 -1
  159. package/dist/types-D1PUFkda.d.mts +0 -45
  160. package/dist/utils/create-handler.d.mts +0 -3
  161. package/dist/utils/create-handler.mjs +0 -6
  162. package/dist/utils/request-validator.d.mts +0 -3
  163. package/dist/utils/request-validator.mjs +0 -5
  164. /package/dist/{component-route-DNgAj6VC.mjs → component-route-BiUHBq7a.mjs} +0 -0
  165. /package/dist/{index-CREkvfw9.d.mts → index-Dflz2i1X.d.mts} +0 -0
@@ -1,4 +1,4 @@
1
- import { i as RouteSchema, t as HandlerContext } from "./schema-B6DFN5c2.mjs";
1
+ import { i as RouteSchema, t as HandlerContext } from "./defineRoute-BjLBWeSj.mjs";
2
2
 
3
3
  //#region src/utils/sse.d.ts
4
4
 
@@ -32,8 +32,6 @@ interface SSEHandler<TSchema extends RouteSchema = RouteSchema> {
32
32
  (req: Request): Promise<Response>;
33
33
  /** 返回类型标记 - SSE 流的数据类型 */
34
34
  readonly __returnType: unknown;
35
- /** Schema 类型标记 */
36
- readonly __schema: TSchema;
37
35
  /** SSE 标记 - 使用品牌类型确保不被扩展 */
38
36
  readonly __sse: SSEMarker;
39
37
  }
@@ -62,4 +60,4 @@ declare function createSSEHandler<const T extends RouteSchema>(schema: T, genera
62
60
  declare function createSSEHandler(generator: SSEGenerator<RouteSchema>): SSEHandler<RouteSchema>;
63
61
  //#endregion
64
62
  export { createSSEHandler as a, SSEMarker as i, SSEGenerator as n, SSEHandler as r, SSEEvent as t };
65
- //# sourceMappingURL=sse-BgLhEo43.d.mts.map
63
+ //# sourceMappingURL=sse-5HykEmSm.d.mts.map
@@ -1,5 +1,5 @@
1
- import { a as parseCookies, l as parseHeaders, u as parseQuery } from "./parsers-DpH_mD0H.mjs";
2
- import { a as validateAllSchemas, i as precompileSchemas } from "./validators-DBkyw6BG.mjs";
1
+ import { a as parseCookies, l as parseHeaders, u as parseQuery } from "./parsers-BrG_mRLq.mjs";
2
+ import { a as validateAllSchemas, i as precompileSchemas } from "./validators-CkfvNBbK.mjs";
3
3
 
4
4
  //#region src/utils/sse.ts
5
5
  /**
@@ -77,11 +77,10 @@ function createSSEHandler(schemaOrGenerator, maybeGenerator) {
77
77
  };
78
78
  const handler = handlerFn;
79
79
  handler.__sse = { __brand: "SSE" };
80
- handler.__schema = schema;
81
80
  handler.__returnType = void 0;
82
81
  return handler;
83
82
  }
84
83
 
85
84
  //#endregion
86
85
  export { createSSEHandler as t };
87
- //# sourceMappingURL=sse-CBl-szg1.mjs.map
86
+ //# sourceMappingURL=sse-CWNz0ky7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-CWNz0ky7.mjs","names":[],"sources":["../src/utils/sse.ts"],"sourcesContent":["/**\n * Server-Sent Events (SSE) 支持\n *\n * 用于实现流式响应,如 AI 聊天、实时通知等\n *\n * @example\n * ```typescript\n * import { createSSEHandler, Type } from 'vafast'\n *\n * const streamHandler = createSSEHandler(\n * { query: Type.Object({ prompt: Type.String() }) },\n * async function* ({ query }) {\n * yield { event: 'start', data: { message: 'Starting...' } }\n *\n * for await (const chunk of aiStream(query.prompt)) {\n * yield { data: chunk }\n * }\n *\n * yield { event: 'end', data: { message: 'Done!' } }\n * }\n * )\n * ```\n */\n\nimport type { RouteSchema, HandlerContext } from \"../defineRoute\";\nimport { parseQuery, parseHeaders, parseCookies } from \"./parsers\";\nimport { precompileSchemas, validateAllSchemas } from \"./validators/validators\";\n\n/**\n * SSE 事件类型\n */\nexport interface SSEEvent<T = unknown> {\n /** 事件名称(可选,默认为 message) */\n event?: string;\n /** 事件数据 */\n data: T;\n /** 事件 ID(可选) */\n id?: string;\n /** 重试间隔(毫秒,可选) */\n retry?: number;\n}\n\n/**\n * SSE 生成器函数类型\n */\nexport type SSEGenerator<T extends RouteSchema = RouteSchema> = (\n ctx: HandlerContext<T>\n) => AsyncGenerator<SSEEvent<unknown>, void, unknown>;\n\n/**\n * 格式化 SSE 事件为字符串\n */\nfunction formatSSEEvent(event: SSEEvent): string {\n const lines: string[] = [];\n\n if (event.id !== undefined) {\n lines.push(`id: ${event.id}`);\n }\n\n if (event.event !== undefined) {\n lines.push(`event: ${event.event}`);\n }\n\n if (event.retry !== undefined) {\n lines.push(`retry: ${event.retry}`);\n }\n\n // 数据可能是多行的,需要分行处理\n const dataStr = typeof event.data === 'string'\n ? event.data\n : JSON.stringify(event.data);\n\n const dataLines = dataStr.split('\\n');\n for (const line of dataLines) {\n lines.push(`data: ${line}`);\n }\n\n return lines.join('\\n') + '\\n\\n';\n}\n\n/**\n * SSE 标记类型 - 使用字面量品牌类型\n */\nexport type SSEMarker = { readonly __brand: 'SSE' }\n\n/**\n * SSE Handler 类型标记\n */\nexport interface SSEHandler<TSchema extends RouteSchema = RouteSchema> {\n (req: Request): Promise<Response>;\n /** 返回类型标记 - SSE 流的数据类型 */\n readonly __returnType: unknown;\n /** SSE 标记 - 使用品牌类型确保不被扩展 */\n readonly __sse: SSEMarker;\n}\n\n/**\n * 创建 SSE 流式响应处理器\n *\n * @example\n * ```typescript\n * // 基础用法\n * const streamChat = createSSEHandler(\n * { query: Type.Object({ message: Type.String() }) },\n * async function* ({ query }) {\n * const response = await ai.chat(query.message);\n *\n * for await (const chunk of response) {\n * yield { data: { text: chunk } };\n * }\n * }\n * );\n *\n * // 使用路由\n * route('GET', '/chat/stream', streamChat)\n * ```\n */\nexport function createSSEHandler<const T extends RouteSchema>(\n schema: T,\n generator: SSEGenerator<T>\n): SSEHandler<T>;\n\nexport function createSSEHandler(\n generator: SSEGenerator<RouteSchema>\n): SSEHandler<RouteSchema>;\n\nexport function createSSEHandler<const T extends RouteSchema>(\n schemaOrGenerator: T | SSEGenerator<T>,\n maybeGenerator?: SSEGenerator<T>\n): SSEHandler<T> {\n // 判断调用方式\n const hasSchema = typeof schemaOrGenerator !== 'function';\n const schema = hasSchema ? (schemaOrGenerator as T) : ({} as T);\n const generator = hasSchema\n ? maybeGenerator!\n : (schemaOrGenerator as SSEGenerator<T>);\n\n // 预编译 schema\n if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {\n precompileSchemas(schema);\n }\n\n const handlerFn = async (req: Request): Promise<Response> => {\n try {\n // 解析请求数据\n const query = parseQuery(req);\n const headers = parseHeaders(req);\n const cookies = parseCookies(req);\n const params = ((req as unknown as Record<string, unknown>).params as Record<string, string>) || {};\n\n // 验证 schema\n const data = { body: undefined, query, params, headers, cookies };\n if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {\n validateAllSchemas(schema, data);\n }\n\n // 创建 SSE 流\n const stream = new ReadableStream({\n async start(controller) {\n const encoder = new TextEncoder();\n\n try {\n const gen = generator({\n req,\n body: undefined as HandlerContext<T>['body'],\n query: query as HandlerContext<T>['query'],\n params: params as HandlerContext<T>['params'],\n headers: headers as HandlerContext<T>['headers'],\n cookies: cookies as HandlerContext<T>['cookies'],\n });\n\n for await (const event of gen) {\n const formatted = formatSSEEvent(event);\n controller.enqueue(encoder.encode(formatted));\n }\n } catch (error) {\n // 发送错误事件\n const errorEvent = formatSSEEvent({\n event: 'error',\n data: {\n message: error instanceof Error ? error.message : 'Unknown error'\n }\n });\n controller.enqueue(encoder.encode(errorEvent));\n } finally {\n controller.close();\n }\n }\n });\n\n return new Response(stream, {\n headers: {\n 'Content-Type': 'text/event-stream',\n 'Cache-Control': 'no-cache',\n 'Connection': 'keep-alive',\n 'X-Accel-Buffering': 'no', // Nginx 禁用缓冲\n }\n });\n } catch (error) {\n // 验证错误等\n return new Response(\n JSON.stringify({\n success: false,\n error: 'Validation Error',\n message: error instanceof Error ? error.message : 'Unknown error'\n }),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' }\n }\n );\n }\n };\n\n // 添加类型标记\n const handler = handlerFn as SSEHandler<T>;\n (handler as unknown as { __sse: SSEMarker }).__sse = { __brand: 'SSE' } as const;\n (handler as unknown as { __returnType: unknown }).__returnType = undefined;\n return handler;\n}\n\n\n"],"mappings":";;;;;;;AAoDA,SAAS,eAAe,OAAyB;CAC/C,MAAM,QAAkB,EAAE;AAE1B,KAAI,MAAM,OAAO,OACf,OAAM,KAAK,OAAO,MAAM,KAAK;AAG/B,KAAI,MAAM,UAAU,OAClB,OAAM,KAAK,UAAU,MAAM,QAAQ;AAGrC,KAAI,MAAM,UAAU,OAClB,OAAM,KAAK,UAAU,MAAM,QAAQ;CAQrC,MAAM,aAJU,OAAO,MAAM,SAAS,WAClC,MAAM,OACN,KAAK,UAAU,MAAM,KAAK,EAEJ,MAAM,KAAK;AACrC,MAAK,MAAM,QAAQ,UACjB,OAAM,KAAK,SAAS,OAAO;AAG7B,QAAO,MAAM,KAAK,KAAK,GAAG;;AAiD5B,SAAgB,iBACd,mBACA,gBACe;CAEf,MAAM,YAAY,OAAO,sBAAsB;CAC/C,MAAM,SAAS,YAAa,oBAA2B,EAAE;CACzD,MAAM,YAAY,YACd,iBACC;AAGL,KAAI,OAAO,QAAQ,OAAO,SAAS,OAAO,UAAU,OAAO,WAAW,OAAO,QAC3E,mBAAkB,OAAO;CAG3B,MAAM,YAAY,OAAO,QAAoC;AAC3D,MAAI;GAEF,MAAM,QAAQ,WAAW,IAAI;GAC7B,MAAM,UAAU,aAAa,IAAI;GACjC,MAAM,UAAU,aAAa,IAAI;GACjC,MAAM,SAAW,IAA2C,UAAqC,EAAE;GAGnG,MAAM,OAAO;IAAE,MAAM;IAAW;IAAO;IAAQ;IAAS;IAAS;AACjE,OAAI,OAAO,QAAQ,OAAO,SAAS,OAAO,UAAU,OAAO,WAAW,OAAO,QAC3E,oBAAmB,QAAQ,KAAK;GAIlC,MAAM,SAAS,IAAI,eAAe,EAChC,MAAM,MAAM,YAAY;IACtB,MAAM,UAAU,IAAI,aAAa;AAEjC,QAAI;KACF,MAAM,MAAM,UAAU;MACpB;MACA,MAAM;MACC;MACC;MACC;MACA;MACV,CAAC;AAEF,gBAAW,MAAM,SAAS,KAAK;MAC7B,MAAM,YAAY,eAAe,MAAM;AACvC,iBAAW,QAAQ,QAAQ,OAAO,UAAU,CAAC;;aAExC,OAAO;KAEd,MAAM,aAAa,eAAe;MAChC,OAAO;MACP,MAAM,EACJ,SAAS,iBAAiB,QAAQ,MAAM,UAAU,iBACnD;MACF,CAAC;AACF,gBAAW,QAAQ,QAAQ,OAAO,WAAW,CAAC;cACtC;AACR,gBAAW,OAAO;;MAGvB,CAAC;AAEF,UAAO,IAAI,SAAS,QAAQ,EAC1B,SAAS;IACP,gBAAgB;IAChB,iBAAiB;IACjB,cAAc;IACd,qBAAqB;IACtB,EACF,CAAC;WACK,OAAO;AAEd,UAAO,IAAI,SACT,KAAK,UAAU;IACb,SAAS;IACT,OAAO;IACP,SAAS,iBAAiB,QAAQ,MAAM,UAAU;IACnD,CAAC,EACF;IACE,QAAQ;IACR,SAAS,EAAE,gBAAgB,oBAAoB;IAChD,CACF;;;CAKL,MAAM,UAAU;AAChB,CAAC,QAA4C,QAAQ,EAAE,SAAS,OAAO;AACvE,CAAC,QAAiD,eAAe;AACjE,QAAO"}
@@ -1,2 +1,2 @@
1
- import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "../component-route-nrrO0iSI.mjs";
1
+ import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "../component-route-Di7R40-2.mjs";
2
2
  export { ComponentRoute, FlattenedComponentRoute, NestedComponentRoute };
@@ -1,6 +1,3 @@
1
- import { a as Method, c as ResponseBody, l as Route, n as FlattenedRoute, o as Middleware, r as Handler, s as NestedRoute } from "../types-D1PUFkda.mjs";
2
- import { c as createTypedRoute, l as isTypedRoute, n as CompatibleRoute, o as NestedRouteConfig, r as ExtendedRouteConfig, s as TypedRoute, t as BaseRouteConfig } from "../route-6A7umH7b.mjs";
3
- import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "../component-route-nrrO0iSI.mjs";
4
- import { a as TypedHandler, i as RouteSchema, n as HandlerContextWithExtra, o as TypedRouteConfig, r as InferSchema, t as HandlerContext } from "../schema-B6DFN5c2.mjs";
5
- import "../index-CREkvfw9.mjs";
6
- export { BaseRouteConfig, CompatibleRoute, ComponentRoute, ExtendedRouteConfig, FlattenedComponentRoute, FlattenedRoute, Handler, HandlerContext, HandlerContextWithExtra, InferSchema, Method, Middleware, NestedComponentRoute, NestedRoute, NestedRouteConfig, ResponseBody, Route, RouteSchema, TypedHandler, TypedRoute, TypedRouteConfig, createTypedRoute, isTypedRoute };
1
+ import { i as ResponseBody, n as Method, r as Middleware, t as Handler } from "../types-B8Z3cMtZ.mjs";
2
+ import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "../component-route-Di7R40-2.mjs";
3
+ export { ComponentRoute, FlattenedComponentRoute, Handler, Method, Middleware, NestedComponentRoute, ResponseBody };
@@ -1,3 +1 @@
1
- import { n as isTypedRoute, t as createTypedRoute } from "../route-Ds53PR4M.mjs";
2
-
3
- export { createTypedRoute, isTypedRoute };
1
+ export { };
@@ -1,2 +1,2 @@
1
- import { a as Method, c as ResponseBody, i as LegacyHandler, l as Route, n as FlattenedRoute, o as Middleware, r as Handler, s as NestedRoute, t as FactoryHandler } from "../types-D1PUFkda.mjs";
2
- export { FactoryHandler, FlattenedRoute, Handler, LegacyHandler, Method, Middleware, NestedRoute, ResponseBody, Route };
1
+ import { i as ResponseBody, n as Method, r as Middleware, t as Handler } from "../types-B8Z3cMtZ.mjs";
2
+ export { Handler, Method, Middleware, ResponseBody };
@@ -0,0 +1,12 @@
1
+ //#region src/types/types.d.ts
2
+ /** HTTP 方法 */
3
+ type Method = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
4
+ /** 支持的响应类型 */
5
+ type ResponseBody = Response | string | number | boolean | object | null | undefined | ReadableStream | Blob | ArrayBuffer;
6
+ /** Handler 类型(统一为 Request -> Response) */
7
+ type Handler = (req: Request) => Response | Promise<Response>;
8
+ /** 中间件类型 */
9
+ type Middleware = (req: Request, next: (ctx?: unknown) => Promise<Response>) => Response | Promise<Response>;
10
+ //#endregion
11
+ export { ResponseBody as i, Method as n, Middleware as r, Handler as t };
12
+ //# sourceMappingURL=types-B8Z3cMtZ.d.mts.map
@@ -1,2 +1,2 @@
1
- import { n as base64urlEncode, t as base64urlDecode } from "../base64url-Dwi2Afhc.mjs";
1
+ import { n as base64urlEncode, t as base64urlDecode } from "../base64url-DNUGwekK.mjs";
2
2
  export { base64urlDecode, base64urlEncode };
@@ -1,3 +1,3 @@
1
- import { n as base64urlEncode, t as base64urlDecode } from "../base64url-C2zopQdH.mjs";
1
+ import { n as base64urlEncode, t as base64urlDecode } from "../base64url-Cc77f1ms.mjs";
2
2
 
3
3
  export { base64urlDecode, base64urlEncode };
@@ -0,0 +1,2 @@
1
+ import { n as getApiSpec, t as generateAITools } from "../contract-BL3JflJ7.mjs";
2
+ export { generateAITools, getApiSpec };
@@ -0,0 +1,3 @@
1
+ import { n as getApiSpec, t as generateAITools } from "../contract-BKqc9fFH.mjs";
2
+
3
+ export { generateAITools, getApiSpec };
@@ -1,2 +1,2 @@
1
- import { t as DependencyManager } from "../dependency-manager-C3_7ic4h.mjs";
1
+ import { t as DependencyManager } from "../dependency-manager-DIN9X0Gj.mjs";
2
2
  export { DependencyManager };
@@ -1,3 +1,3 @@
1
- import { t as DependencyManager } from "../dependency-manager-DCmh7xFc.mjs";
1
+ import { t as DependencyManager } from "../dependency-manager-CGMZJTer.mjs";
2
2
 
3
3
  export { DependencyManager };
@@ -1,2 +1,2 @@
1
- import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "../formats-Dk-DSBY4.mjs";
1
+ import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "../formats-DDDSFWP0.mjs";
2
2
  export { Patterns, hasFormat, registerFormat, registerFormats };
@@ -1,2 +1,2 @@
1
- import { t as goAwait } from "../go-await-DL1A_-4X.mjs";
1
+ import { t as goAwait } from "../go-await-DPtVBug4.mjs";
2
2
  export { goAwait };
@@ -1,3 +1,3 @@
1
- import { t as goAwait } from "../go-await-C4ZdEUwY.mjs";
1
+ import { t as goAwait } from "../go-await-B1U27PgB.mjs";
2
2
 
3
3
  export { goAwait };
@@ -1,2 +1,13 @@
1
- import { i as setLocals, n as getLocals, r as setCookie, t as getCookie } from "../handle-BhR3oyky.mjs";
2
- export { getCookie, getLocals, setCookie, setLocals };
1
+ //#region src/utils/handle.d.ts
2
+ /** 获取单个 Cookie */
3
+ declare function getCookie(req: Request, key: string): string | null;
4
+ /** 生成 Set-Cookie 头 */
5
+ declare function setCookie(key: string, value: string, options?: {
6
+ path?: string;
7
+ httpOnly?: boolean;
8
+ maxAge?: number;
9
+ secure?: boolean;
10
+ }): string;
11
+ //#endregion
12
+ export { getCookie, setCookie };
13
+ //# sourceMappingURL=handle.d.mts.map
@@ -1,4 +1,20 @@
1
- import "../parsers-DpH_mD0H.mjs";
2
- import { i as setLocals, n as getLocals, r as setCookie, t as getCookie } from "../handle-BxJwSvV0.mjs";
1
+ import { a as parseCookies } from "../parsers-BrG_mRLq.mjs";
3
2
 
4
- export { getCookie, getLocals, setCookie, setLocals };
3
+ //#region src/utils/handle.ts
4
+ /** 获取单个 Cookie 值 */
5
+ function getCookie(req, key) {
6
+ return parseCookies(req)[key] || null;
7
+ }
8
+ /** 生成 Set-Cookie 头 */
9
+ function setCookie(key, value, options = {}) {
10
+ let cookie = `${key}=${encodeURIComponent(value)}`;
11
+ if (options.path) cookie += `; Path=${options.path}`;
12
+ if (options.httpOnly) cookie += `; HttpOnly`;
13
+ if (options.secure) cookie += `; Secure`;
14
+ if (options.maxAge) cookie += `; Max-Age=${options.maxAge}`;
15
+ return cookie;
16
+ }
17
+
18
+ //#endregion
19
+ export { getCookie, setCookie };
20
+ //# sourceMappingURL=handle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle.mjs","names":[],"sources":["../../src/utils/handle.ts"],"sourcesContent":["import { parseCookies } from \"./parsers\";\n\n/** 获取单个 Cookie 值 */\nexport function getCookie(req: Request, key: string): string | null {\n const cookies = parseCookies(req);\n return cookies[key] || null;\n}\n\n/** 生成 Set-Cookie 头 */\nexport function setCookie(\n key: string,\n value: string,\n options: {\n path?: string;\n httpOnly?: boolean;\n maxAge?: number;\n secure?: boolean;\n } = {},\n): string {\n let cookie = `${key}=${encodeURIComponent(value)}`;\n\n if (options.path) cookie += `; Path=${options.path}`;\n if (options.httpOnly) cookie += `; HttpOnly`;\n if (options.secure) cookie += `; Secure`;\n if (options.maxAge) cookie += `; Max-Age=${options.maxAge}`;\n\n return cookie;\n}\n\n"],"mappings":";;;;AAGA,SAAgB,UAAU,KAAc,KAA4B;AAElE,QADgB,aAAa,IAAI,CAClB,QAAQ;;;AAIzB,SAAgB,UACd,KACA,OACA,UAKI,EAAE,EACE;CACR,IAAI,SAAS,GAAG,IAAI,GAAG,mBAAmB,MAAM;AAEhD,KAAI,QAAQ,KAAM,WAAU,UAAU,QAAQ;AAC9C,KAAI,QAAQ,SAAU,WAAU;AAChC,KAAI,QAAQ,OAAQ,WAAU;AAC9B,KAAI,QAAQ,OAAQ,WAAU,aAAa,QAAQ;AAEnD,QAAO"}
@@ -1,2 +1,2 @@
1
- import { t as HtmlRenderer } from "../html-renderer-CfKK2BrP.mjs";
1
+ import { t as HtmlRenderer } from "../html-renderer-DhQxRuyi.mjs";
2
2
  export { HtmlRenderer };
@@ -1,3 +1,3 @@
1
- import { t as HtmlRenderer } from "../html-renderer-DTtJ_Yic.mjs";
1
+ import { t as HtmlRenderer } from "../html-renderer-D1zzDVQM.mjs";
2
2
 
3
3
  export { HtmlRenderer };
@@ -1,17 +1,13 @@
1
- import "../schema-B6DFN5c2.mjs";
2
- import "../index-CREkvfw9.mjs";
3
- import { i as simpleHandler, n as createHandler, r as createHandlerWithExtra, t as InferableHandler } from "../create-handler-DKw-sQOV.mjs";
4
- import { t as DependencyManager } from "../dependency-manager-C3_7ic4h.mjs";
5
- import "../middleware-KXEoefLX.mjs";
6
- import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, p as parseQueryFast, r as getCookie, s as parseCookies } from "../parsers-BerGr2_q.mjs";
7
- import { c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-BMfdEcTm.mjs";
8
- import { t as goAwait } from "../go-await-DL1A_-4X.mjs";
9
- import { n as base64urlEncode, t as base64urlDecode } from "../base64url-Dwi2Afhc.mjs";
10
- import { i as setLocals, n as getLocals } from "../handle-BhR3oyky.mjs";
11
- import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, l as precompileSchemas, o as ValidationResult, p as validateSchemaOrThrow, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "../validators-Ch71zkT8.mjs";
12
- import { a as parseAndValidateRequest, i as createRequestValidator, o as parseRequest, s as validateRequest } from "../request-validator-Coo8dI-p.mjs";
13
- import { t as HtmlRenderer } from "../html-renderer-CfKK2BrP.mjs";
14
- import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "../formats-Dk-DSBY4.mjs";
15
- import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "../sse-BgLhEo43.mjs";
16
- import { a as getAllRoutes, i as filterRoutes, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "../route-registry-CmABJA2V.mjs";
17
- export { DependencyManager, HtmlRenderer, type InferableHandler, Patterns, type RouteMeta, RouteRegistry, type SSEEvent, type SSEHandler, type SSEMarker, type SchemaConfig, type ValidationError, type ValidationResult, base64urlDecode, base64urlEncode, createHandler, createHandlerWithExtra, createRequestValidator, createRouteRegistry, createSSEHandler, createValidator, empty, err, filterRoutes, getAllRoutes, getCookie, getHeader, getLocals, getRoute, getRouteRegistry, getValidatorCacheStats, goAwait, hasFormat, html, json, parseAndValidateRequest, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, parseRequest, precompileSchemas, redirect, registerFormat, registerFormats, setLocals, simpleHandler, stream, text, validateAllSchemas, validateFast, validateRequest, validateSchema, validateSchemaOrThrow };
1
+ import "../defineRoute-BjLBWeSj.mjs";
2
+ import { t as DependencyManager } from "../dependency-manager-DIN9X0Gj.mjs";
3
+ import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, p as parseQueryFast, r as getCookie, s as parseCookies } from "../parsers-8hIAx0OV.mjs";
4
+ import { c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-BNLzz4Tq.mjs";
5
+ import { t as goAwait } from "../go-await-DPtVBug4.mjs";
6
+ import { n as base64urlEncode, t as base64urlDecode } from "../base64url-DNUGwekK.mjs";
7
+ import { t as HtmlRenderer } from "../html-renderer-DhQxRuyi.mjs";
8
+ import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, l as precompileSchemas, o as ValidationResult, p as validateSchemaOrThrow, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "../validators-BFC6S_fr.mjs";
9
+ import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "../formats-DDDSFWP0.mjs";
10
+ import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "../sse-5HykEmSm.mjs";
11
+ import { a as getAllRoutes, c as getRoutesByMethod, i as filterRoutes, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "../route-registry-CDBB0GI1.mjs";
12
+ import { n as getApiSpec, t as generateAITools } from "../contract-BL3JflJ7.mjs";
13
+ export { DependencyManager, HtmlRenderer, Patterns, type RouteMeta, RouteRegistry, type SSEEvent, type SSEHandler, type SSEMarker, type SchemaConfig, type ValidationError, type ValidationResult, base64urlDecode, base64urlEncode, createRouteRegistry, createSSEHandler, createValidator, empty, err, filterRoutes, generateAITools, getAllRoutes, getApiSpec, getCookie, getHeader, getRoute, getRouteRegistry, getRoutesByMethod, getValidatorCacheStats, goAwait, hasFormat, html, json, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, precompileSchemas, redirect, registerFormat, registerFormats, stream, text, validateAllSchemas, validateFast, validateSchema, validateSchemaOrThrow };
@@ -1,15 +1,13 @@
1
- import { a as html, c as redirect, i as err, l as stream, o as json, r as empty, u as text } from "../middleware-CewKbtb4.mjs";
2
- import { a as getRoute, i as getAllRoutes, n as createRouteRegistry, o as getRouteRegistry, r as filterRoutes, t as RouteRegistry } from "../route-registry-emTmRrWQ.mjs";
3
- import { t as HtmlRenderer } from "../html-renderer-DTtJ_Yic.mjs";
4
- import { t as DependencyManager } from "../dependency-manager-DCmh7xFc.mjs";
5
- import { a as parseCookies, d as parseQueryFast, l as parseHeaders, n as getHeader, o as parseCookiesFast, r as parseBody, t as getCookie, u as parseQuery } from "../parsers-DpH_mD0H.mjs";
6
- import { t as goAwait } from "../go-await-C4ZdEUwY.mjs";
7
- import { a as validateAllSchemas, c as validateSchemaOrThrow, i as precompileSchemas, n as createValidator, o as validateFast, r as getValidatorCacheStats, s as validateSchema } from "../validators-DBkyw6BG.mjs";
8
- import { n as createHandlerWithExtra, r as simpleHandler, t as createHandler } from "../create-handler-RconAcAB.mjs";
9
- import { n as base64urlEncode, t as base64urlDecode } from "../base64url-C2zopQdH.mjs";
10
- import { i as setLocals, n as getLocals } from "../handle-BxJwSvV0.mjs";
11
- import { i as validateRequest, n as parseAndValidateRequest, r as parseRequest, t as createRequestValidator } from "../request-validator-Bz9X48FX.mjs";
1
+ import { a as parseCookies, d as parseQueryFast, l as parseHeaders, n as getHeader, o as parseCookiesFast, r as parseBody, t as getCookie, u as parseQuery } from "../parsers-BrG_mRLq.mjs";
2
+ import { a as validateAllSchemas, c as validateSchemaOrThrow, i as precompileSchemas, n as createValidator, o as validateFast, r as getValidatorCacheStats, s as validateSchema } from "../validators-CkfvNBbK.mjs";
3
+ import { c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-CQ1IgWei.mjs";
4
+ import { a as getRoute, i as getAllRoutes, n as createRouteRegistry, o as getRouteRegistry, r as filterRoutes, s as getRoutesByMethod, t as RouteRegistry } from "../route-registry-BzExlM2t.mjs";
5
+ import { t as HtmlRenderer } from "../html-renderer-D1zzDVQM.mjs";
6
+ import { t as DependencyManager } from "../dependency-manager-CGMZJTer.mjs";
7
+ import { t as goAwait } from "../go-await-B1U27PgB.mjs";
8
+ import { n as base64urlEncode, t as base64urlDecode } from "../base64url-Cc77f1ms.mjs";
12
9
  import { Patterns, hasFormat, registerFormat, registerFormats } from "./formats.mjs";
13
- import { t as createSSEHandler } from "../sse-CBl-szg1.mjs";
10
+ import { t as createSSEHandler } from "../sse-CWNz0ky7.mjs";
11
+ import { n as getApiSpec, t as generateAITools } from "../contract-BKqc9fFH.mjs";
14
12
 
15
- export { DependencyManager, HtmlRenderer, Patterns, RouteRegistry, base64urlDecode, base64urlEncode, createHandler, createHandlerWithExtra, createRequestValidator, createRouteRegistry, createSSEHandler, createValidator, empty, err, filterRoutes, getAllRoutes, getCookie, getHeader, getLocals, getRoute, getRouteRegistry, getValidatorCacheStats, goAwait, hasFormat, html, json, parseAndValidateRequest, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, parseRequest, precompileSchemas, redirect, registerFormat, registerFormats, setLocals, simpleHandler, stream, text, validateAllSchemas, validateFast, validateRequest, validateSchema, validateSchemaOrThrow };
13
+ export { DependencyManager, HtmlRenderer, Patterns, RouteRegistry, base64urlDecode, base64urlEncode, createRouteRegistry, createSSEHandler, createValidator, empty, err, filterRoutes, generateAITools, getAllRoutes, getApiSpec, getCookie, getHeader, getRoute, getRouteRegistry, getRoutesByMethod, getValidatorCacheStats, goAwait, hasFormat, html, json, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, precompileSchemas, redirect, registerFormat, registerFormats, stream, text, validateAllSchemas, validateFast, validateSchema, validateSchemaOrThrow };
@@ -1,2 +1,2 @@
1
- import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, l as parseFile, n as FormData, o as parseBodyAs, p as parseQueryFast, r as getCookie, s as parseCookies, t as FileInfo, u as parseFormData } from "../parsers-BerGr2_q.mjs";
1
+ import { a as parseBody, c as parseCookiesFast, d as parseHeaders, f as parseQuery, i as getHeader, l as parseFile, n as FormData, o as parseBodyAs, p as parseQueryFast, r as getCookie, s as parseCookies, t as FileInfo, u as parseFormData } from "../parsers-8hIAx0OV.mjs";
2
2
  export { FileInfo, FormData, getCookie, getHeader, parseBody, parseBodyAs, parseCookies, parseCookiesFast, parseFile, parseFormData, parseHeaders, parseQuery, parseQueryFast };
@@ -1,3 +1,3 @@
1
- import { a as parseCookies, c as parseFormData, d as parseQueryFast, i as parseBodyAs, l as parseHeaders, n as getHeader, o as parseCookiesFast, r as parseBody, s as parseFile, t as getCookie, u as parseQuery } from "../parsers-DpH_mD0H.mjs";
1
+ import { a as parseCookies, c as parseFormData, d as parseQueryFast, i as parseBodyAs, l as parseHeaders, n as getHeader, o as parseCookiesFast, r as parseBody, s as parseFile, t as getCookie, u as parseQuery } from "../parsers-BrG_mRLq.mjs";
2
2
 
3
3
  export { getCookie, getHeader, parseBody, parseBodyAs, parseCookies, parseCookiesFast, parseFile, parseFormData, parseHeaders, parseQuery, parseQueryFast };
@@ -1,3 +1,3 @@
1
- import { t as PathMatcher } from "../path-matcher-CGczAIl_.mjs";
1
+ import { t as PathMatcher } from "../path-matcher-Dp-DRUV9.mjs";
2
2
 
3
3
  export { PathMatcher };
@@ -1,5 +1,2 @@
1
- import "../schema-B6DFN5c2.mjs";
2
- import "../index-CREkvfw9.mjs";
3
- import "../middleware-KXEoefLX.mjs";
4
- import { a as mapResponse, c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-BMfdEcTm.mjs";
1
+ import { a as mapResponse, c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-BNLzz4Tq.mjs";
5
2
  export { empty, err, html, json, mapResponse, redirect, stream, text };
@@ -1,3 +1,3 @@
1
- import { a as html, c as redirect, i as err, l as stream, o as json, r as empty, s as mapResponse, u as text } from "../middleware-CewKbtb4.mjs";
1
+ import { a as mapResponse, c as text, i as json, n as err, o as redirect, r as html, s as stream, t as empty } from "../response-CQ1IgWei.mjs";
2
2
 
3
3
  export { empty, err, html, json, mapResponse, redirect, stream, text };
@@ -1,4 +1,3 @@
1
- import "../schema-B6DFN5c2.mjs";
2
- import "../index-CREkvfw9.mjs";
3
- import { a as getAllRoutes, c as setGlobalRegistry, i as filterRoutes, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "../route-registry-CmABJA2V.mjs";
4
- export { RouteMeta, RouteRegistry, createRouteRegistry, filterRoutes, getAllRoutes, getRoute, getRouteRegistry, setGlobalRegistry };
1
+ import "../defineRoute-BjLBWeSj.mjs";
2
+ import { a as getAllRoutes, c as getRoutesByMethod, i as filterRoutes, l as setGlobalRegistry, n as RouteRegistry, o as getRoute, r as createRouteRegistry, s as getRouteRegistry, t as RouteMeta } from "../route-registry-CDBB0GI1.mjs";
3
+ export { RouteMeta, RouteRegistry, createRouteRegistry, filterRoutes, getAllRoutes, getRoute, getRouteRegistry, getRoutesByMethod, setGlobalRegistry };
@@ -1,3 +1,3 @@
1
- import { a as getRoute, i as getAllRoutes, n as createRouteRegistry, o as getRouteRegistry, r as filterRoutes, s as setGlobalRegistry, t as RouteRegistry } from "../route-registry-emTmRrWQ.mjs";
1
+ import { a as getRoute, c as setGlobalRegistry, i as getAllRoutes, n as createRouteRegistry, o as getRouteRegistry, r as filterRoutes, s as getRoutesByMethod, t as RouteRegistry } from "../route-registry-BzExlM2t.mjs";
2
2
 
3
- export { RouteRegistry, createRouteRegistry, filterRoutes, getAllRoutes, getRoute, getRouteRegistry, setGlobalRegistry };
3
+ export { RouteRegistry, createRouteRegistry, filterRoutes, getAllRoutes, getRoute, getRouteRegistry, getRoutesByMethod, setGlobalRegistry };
@@ -1,3 +1,3 @@
1
- import "../schema-B6DFN5c2.mjs";
2
- import { a as createSSEHandler, i as SSEMarker, n as SSEGenerator, r as SSEHandler, t as SSEEvent } from "../sse-BgLhEo43.mjs";
1
+ import "../defineRoute-BjLBWeSj.mjs";
2
+ import { a as createSSEHandler, i as SSEMarker, n as SSEGenerator, r as SSEHandler, t as SSEEvent } from "../sse-5HykEmSm.mjs";
3
3
  export { SSEEvent, SSEGenerator, SSEHandler, SSEMarker, createSSEHandler };
@@ -1,5 +1,5 @@
1
- import "../parsers-DpH_mD0H.mjs";
2
- import "../validators-DBkyw6BG.mjs";
3
- import { t as createSSEHandler } from "../sse-CBl-szg1.mjs";
1
+ import "../parsers-BrG_mRLq.mjs";
2
+ import "../validators-CkfvNBbK.mjs";
3
+ import { t as createSSEHandler } from "../sse-CWNz0ky7.mjs";
4
4
 
5
5
  export { createSSEHandler };
@@ -1,2 +1,2 @@
1
- import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, i as Type, l as precompileSchemas, n as Static, o as ValidationResult, p as validateSchemaOrThrow, r as TSchema, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "../../validators-Ch71zkT8.mjs";
1
+ import { a as ValidationError, c as getValidatorCacheStats, d as validateFast, f as validateSchema, i as Type, l as precompileSchemas, n as Static, o as ValidationResult, p as validateSchemaOrThrow, r as TSchema, s as createValidator, t as SchemaConfig, u as validateAllSchemas } from "../../validators-BFC6S_fr.mjs";
2
2
  export { SchemaConfig, Static, TSchema, Type, ValidationError, ValidationResult, createValidator, getValidatorCacheStats, precompileSchemas, validateAllSchemas, validateFast, validateSchema, validateSchemaOrThrow };
@@ -1,3 +1,3 @@
1
- import { a as validateAllSchemas, c as validateSchemaOrThrow, i as precompileSchemas, n as createValidator, o as validateFast, r as getValidatorCacheStats, s as validateSchema, t as Type } from "../../validators-DBkyw6BG.mjs";
1
+ import { a as validateAllSchemas, c as validateSchemaOrThrow, i as precompileSchemas, n as createValidator, o as validateFast, r as getValidatorCacheStats, s as validateSchema, t as Type } from "../../validators-CkfvNBbK.mjs";
2
2
 
3
3
  export { Type, createValidator, getValidatorCacheStats, precompileSchemas, validateAllSchemas, validateFast, validateSchema, validateSchemaOrThrow };
@@ -64,4 +64,4 @@ declare function getValidatorCacheStats(): {
64
64
  };
65
65
  //#endregion
66
66
  export { ValidationError as a, getValidatorCacheStats as c, validateFast as d, validateSchema as f, Type as i, precompileSchemas as l, Static$1 as n, ValidationResult as o, validateSchemaOrThrow as p, TSchema$1 as r, createValidator as s, SchemaConfig as t, validateAllSchemas as u };
67
- //# sourceMappingURL=validators-Ch71zkT8.d.mts.map
67
+ //# sourceMappingURL=validators-BFC6S_fr.d.mts.map
@@ -109,4 +109,4 @@ function getValidatorCacheStats() {
109
109
 
110
110
  //#endregion
111
111
  export { validateAllSchemas as a, validateSchemaOrThrow as c, precompileSchemas as i, createValidator as n, validateFast as o, getValidatorCacheStats as r, validateSchema as s, Type as t };
112
- //# sourceMappingURL=validators-DBkyw6BG.mjs.map
112
+ //# sourceMappingURL=validators-CkfvNBbK.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validators-DBkyw6BG.mjs","names":[],"sources":["../src/utils/validators/validators.ts"],"sourcesContent":["/**\n * Schema 验证器 - 简洁版\n *\n * 特点:\n * - WeakMap 缓存避免内存泄漏\n * - TypeCompiler JIT 编译,性能最佳\n * - 支持 FormatRegistry(需确保同一实例)\n *\n * @version 7.0.0\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\nimport { TypeCompiler, type TypeCheck } from \"@sinclair/typebox/compiler\";\nimport { Value } from \"@sinclair/typebox/value\";\n\n// ============== 类型定义 ==============\n\n/** Schema 配置接口 */\nexport interface SchemaConfig {\n body?: TSchema;\n query?: TSchema;\n params?: TSchema;\n headers?: TSchema;\n cookies?: TSchema;\n}\n\n/** 验证错误接口 */\nexport interface ValidationError {\n path: string;\n message: string;\n code: string;\n value?: unknown;\n}\n\n/** 验证结果 */\nexport type ValidationResult<T = unknown> =\n | { success: true; data: T }\n | { success: false; errors: ValidationError[] };\n\n// ============== 缓存 ==============\n\n/** 编译器缓存 - WeakMap 避免内存泄漏 */\nconst compilerCache = new WeakMap<TSchema, TypeCheck<TSchema>>();\n\n// ============== 核心函数 ==============\n\n/**\n * 获取或创建编译后的验证器\n */\nfunction getCompiledValidator<T extends TSchema>(schema: T): TypeCheck<T> {\n let compiler = compilerCache.get(schema);\n if (!compiler) {\n compiler = TypeCompiler.Compile(schema);\n compilerCache.set(schema, compiler);\n }\n return compiler as TypeCheck<T>;\n}\n\n/**\n * 验证单个 Schema(返回结果对象)\n */\nexport function validateSchema<T extends TSchema>(\n schema: T,\n data: unknown,\n): ValidationResult<Static<T>> {\n try {\n const compiler = getCompiledValidator(schema);\n\n if (compiler.Check(data)) {\n return { success: true, data: data as Static<T> };\n }\n\n // 收集错误\n const errors: ValidationError[] = [];\n for (const error of compiler.Errors(data)) {\n errors.push({\n path: error.path,\n message: error.message,\n code: \"VALIDATION_FAILED\",\n value: error.value,\n });\n }\n return { success: false, errors };\n } catch (error) {\n return {\n success: false,\n errors: [\n {\n path: \"\",\n message: error instanceof Error ? error.message : \"验证异常\",\n code: \"VALIDATION_EXCEPTION\",\n },\n ],\n };\n }\n}\n\n/**\n * 验证 Schema(抛出异常版本,用于框架内部)\n */\nexport function validateSchemaOrThrow<T extends TSchema>(\n schema: T,\n data: unknown,\n context: string,\n): Static<T> {\n const compiler = getCompiledValidator(schema);\n\n if (!compiler.Check(data)) {\n throw new Error(`${context}验证失败`);\n }\n\n return data as Static<T>;\n}\n\n/**\n * 快速验证(只返回布尔值)\n */\nexport function validateFast<T extends TSchema>(\n schema: T,\n data: unknown,\n): data is Static<T> {\n const compiler = getCompiledValidator(schema);\n return compiler.Check(data);\n}\n\n/**\n * 批量验证所有 Schema(用于请求验证)\n */\nexport function validateAllSchemas(\n config: SchemaConfig,\n data: {\n body: unknown;\n query: unknown;\n params: unknown;\n headers: unknown;\n cookies: unknown;\n },\n): typeof data {\n if (config.body) {\n validateSchemaOrThrow(config.body, data.body, \"请求体\");\n }\n if (config.query) {\n validateSchemaOrThrow(config.query, data.query, \"Query参数\");\n }\n if (config.params) {\n validateSchemaOrThrow(config.params, data.params, \"路径参数\");\n }\n if (config.headers) {\n validateSchemaOrThrow(config.headers, data.headers, \"请求头\");\n }\n if (config.cookies) {\n validateSchemaOrThrow(config.cookies, data.cookies, \"Cookie\");\n }\n return data;\n}\n\n/**\n * 预编译 Schema(启动时调用,避免首次请求开销)\n */\nexport function precompileSchemas(config: SchemaConfig): void {\n if (config.body) getCompiledValidator(config.body);\n if (config.query) getCompiledValidator(config.query);\n if (config.params) getCompiledValidator(config.params);\n if (config.headers) getCompiledValidator(config.headers);\n if (config.cookies) getCompiledValidator(config.cookies);\n}\n\n/**\n * 创建类型特化的验证器(高频使用场景)\n */\nexport function createValidator<T extends TSchema>(\n schema: T,\n): (data: unknown) => ValidationResult<Static<T>> {\n return (data: unknown) => validateSchema(schema, data);\n}\n\n/**\n * 获取缓存统计(调试用)\n */\nexport function getValidatorCacheStats(): { cacheType: string; note: string } {\n return {\n cacheType: \"WeakMap\",\n note: \"WeakMap 缓存会随 Schema 对象自动清理,无内存泄漏风险\",\n };\n}\n\n// 导出 TypeBox 类型\nexport { Type, Static, TSchema };\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAM,gCAAgB,IAAI,SAAsC;;;;AAOhE,SAAS,qBAAwC,QAAyB;CACxE,IAAI,WAAW,cAAc,IAAI,OAAO;AACxC,KAAI,CAAC,UAAU;AACb,aAAW,aAAa,QAAQ,OAAO;AACvC,gBAAc,IAAI,QAAQ,SAAS;;AAErC,QAAO;;;;;AAMT,SAAgB,eACd,QACA,MAC6B;AAC7B,KAAI;EACF,MAAM,WAAW,qBAAqB,OAAO;AAE7C,MAAI,SAAS,MAAM,KAAK,CACtB,QAAO;GAAE,SAAS;GAAY;GAAmB;EAInD,MAAM,SAA4B,EAAE;AACpC,OAAK,MAAM,SAAS,SAAS,OAAO,KAAK,CACvC,QAAO,KAAK;GACV,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,MAAM;GACN,OAAO,MAAM;GACd,CAAC;AAEJ,SAAO;GAAE,SAAS;GAAO;GAAQ;UAC1B,OAAO;AACd,SAAO;GACL,SAAS;GACT,QAAQ,CACN;IACE,MAAM;IACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU;IAClD,MAAM;IACP,CACF;GACF;;;;;;AAOL,SAAgB,sBACd,QACA,MACA,SACW;AAGX,KAAI,CAFa,qBAAqB,OAAO,CAE/B,MAAM,KAAK,CACvB,OAAM,IAAI,MAAM,GAAG,QAAQ,MAAM;AAGnC,QAAO;;;;;AAMT,SAAgB,aACd,QACA,MACmB;AAEnB,QADiB,qBAAqB,OAAO,CAC7B,MAAM,KAAK;;;;;AAM7B,SAAgB,mBACd,QACA,MAOa;AACb,KAAI,OAAO,KACT,uBAAsB,OAAO,MAAM,KAAK,MAAM,MAAM;AAEtD,KAAI,OAAO,MACT,uBAAsB,OAAO,OAAO,KAAK,OAAO,UAAU;AAE5D,KAAI,OAAO,OACT,uBAAsB,OAAO,QAAQ,KAAK,QAAQ,OAAO;AAE3D,KAAI,OAAO,QACT,uBAAsB,OAAO,SAAS,KAAK,SAAS,MAAM;AAE5D,KAAI,OAAO,QACT,uBAAsB,OAAO,SAAS,KAAK,SAAS,SAAS;AAE/D,QAAO;;;;;AAMT,SAAgB,kBAAkB,QAA4B;AAC5D,KAAI,OAAO,KAAM,sBAAqB,OAAO,KAAK;AAClD,KAAI,OAAO,MAAO,sBAAqB,OAAO,MAAM;AACpD,KAAI,OAAO,OAAQ,sBAAqB,OAAO,OAAO;AACtD,KAAI,OAAO,QAAS,sBAAqB,OAAO,QAAQ;AACxD,KAAI,OAAO,QAAS,sBAAqB,OAAO,QAAQ;;;;;AAM1D,SAAgB,gBACd,QACgD;AAChD,SAAQ,SAAkB,eAAe,QAAQ,KAAK;;;;;AAMxD,SAAgB,yBAA8D;AAC5E,QAAO;EACL,WAAW;EACX,MAAM;EACP"}
1
+ {"version":3,"file":"validators-CkfvNBbK.mjs","names":[],"sources":["../src/utils/validators/validators.ts"],"sourcesContent":["/**\n * Schema 验证器 - 简洁版\n *\n * 特点:\n * - WeakMap 缓存避免内存泄漏\n * - TypeCompiler JIT 编译,性能最佳\n * - 支持 FormatRegistry(需确保同一实例)\n *\n * @version 7.0.0\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\nimport { TypeCompiler, type TypeCheck } from \"@sinclair/typebox/compiler\";\nimport { Value } from \"@sinclair/typebox/value\";\n\n// ============== 类型定义 ==============\n\n/** Schema 配置接口 */\nexport interface SchemaConfig {\n body?: TSchema;\n query?: TSchema;\n params?: TSchema;\n headers?: TSchema;\n cookies?: TSchema;\n}\n\n/** 验证错误接口 */\nexport interface ValidationError {\n path: string;\n message: string;\n code: string;\n value?: unknown;\n}\n\n/** 验证结果 */\nexport type ValidationResult<T = unknown> =\n | { success: true; data: T }\n | { success: false; errors: ValidationError[] };\n\n// ============== 缓存 ==============\n\n/** 编译器缓存 - WeakMap 避免内存泄漏 */\nconst compilerCache = new WeakMap<TSchema, TypeCheck<TSchema>>();\n\n// ============== 核心函数 ==============\n\n/**\n * 获取或创建编译后的验证器\n */\nfunction getCompiledValidator<T extends TSchema>(schema: T): TypeCheck<T> {\n let compiler = compilerCache.get(schema);\n if (!compiler) {\n compiler = TypeCompiler.Compile(schema);\n compilerCache.set(schema, compiler);\n }\n return compiler as TypeCheck<T>;\n}\n\n/**\n * 验证单个 Schema(返回结果对象)\n */\nexport function validateSchema<T extends TSchema>(\n schema: T,\n data: unknown,\n): ValidationResult<Static<T>> {\n try {\n const compiler = getCompiledValidator(schema);\n\n if (compiler.Check(data)) {\n return { success: true, data: data as Static<T> };\n }\n\n // 收集错误\n const errors: ValidationError[] = [];\n for (const error of compiler.Errors(data)) {\n errors.push({\n path: error.path,\n message: error.message,\n code: \"VALIDATION_FAILED\",\n value: error.value,\n });\n }\n return { success: false, errors };\n } catch (error) {\n return {\n success: false,\n errors: [\n {\n path: \"\",\n message: error instanceof Error ? error.message : \"验证异常\",\n code: \"VALIDATION_EXCEPTION\",\n },\n ],\n };\n }\n}\n\n/**\n * 验证 Schema(抛出异常版本,用于框架内部)\n */\nexport function validateSchemaOrThrow<T extends TSchema>(\n schema: T,\n data: unknown,\n context: string,\n): Static<T> {\n const compiler = getCompiledValidator(schema);\n\n if (!compiler.Check(data)) {\n throw new Error(`${context}验证失败`);\n }\n\n return data as Static<T>;\n}\n\n/**\n * 快速验证(只返回布尔值)\n */\nexport function validateFast<T extends TSchema>(\n schema: T,\n data: unknown,\n): data is Static<T> {\n const compiler = getCompiledValidator(schema);\n return compiler.Check(data);\n}\n\n/**\n * 批量验证所有 Schema(用于请求验证)\n */\nexport function validateAllSchemas(\n config: SchemaConfig,\n data: {\n body: unknown;\n query: unknown;\n params: unknown;\n headers: unknown;\n cookies: unknown;\n },\n): typeof data {\n if (config.body) {\n validateSchemaOrThrow(config.body, data.body, \"请求体\");\n }\n if (config.query) {\n validateSchemaOrThrow(config.query, data.query, \"Query参数\");\n }\n if (config.params) {\n validateSchemaOrThrow(config.params, data.params, \"路径参数\");\n }\n if (config.headers) {\n validateSchemaOrThrow(config.headers, data.headers, \"请求头\");\n }\n if (config.cookies) {\n validateSchemaOrThrow(config.cookies, data.cookies, \"Cookie\");\n }\n return data;\n}\n\n/**\n * 预编译 Schema(启动时调用,避免首次请求开销)\n */\nexport function precompileSchemas(config: SchemaConfig): void {\n if (config.body) getCompiledValidator(config.body);\n if (config.query) getCompiledValidator(config.query);\n if (config.params) getCompiledValidator(config.params);\n if (config.headers) getCompiledValidator(config.headers);\n if (config.cookies) getCompiledValidator(config.cookies);\n}\n\n/**\n * 创建类型特化的验证器(高频使用场景)\n */\nexport function createValidator<T extends TSchema>(\n schema: T,\n): (data: unknown) => ValidationResult<Static<T>> {\n return (data: unknown) => validateSchema(schema, data);\n}\n\n/**\n * 获取缓存统计(调试用)\n */\nexport function getValidatorCacheStats(): { cacheType: string; note: string } {\n return {\n cacheType: \"WeakMap\",\n note: \"WeakMap 缓存会随 Schema 对象自动清理,无内存泄漏风险\",\n };\n}\n\n// 导出 TypeBox 类型\nexport { Type, Static, TSchema };\n"],"mappings":";;;;;;;;;;;;;;;AA2CA,MAAM,gCAAgB,IAAI,SAAsC;;;;AAOhE,SAAS,qBAAwC,QAAyB;CACxE,IAAI,WAAW,cAAc,IAAI,OAAO;AACxC,KAAI,CAAC,UAAU;AACb,aAAW,aAAa,QAAQ,OAAO;AACvC,gBAAc,IAAI,QAAQ,SAAS;;AAErC,QAAO;;;;;AAMT,SAAgB,eACd,QACA,MAC6B;AAC7B,KAAI;EACF,MAAM,WAAW,qBAAqB,OAAO;AAE7C,MAAI,SAAS,MAAM,KAAK,CACtB,QAAO;GAAE,SAAS;GAAY;GAAmB;EAInD,MAAM,SAA4B,EAAE;AACpC,OAAK,MAAM,SAAS,SAAS,OAAO,KAAK,CACvC,QAAO,KAAK;GACV,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,MAAM;GACN,OAAO,MAAM;GACd,CAAC;AAEJ,SAAO;GAAE,SAAS;GAAO;GAAQ;UAC1B,OAAO;AACd,SAAO;GACL,SAAS;GACT,QAAQ,CACN;IACE,MAAM;IACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU;IAClD,MAAM;IACP,CACF;GACF;;;;;;AAOL,SAAgB,sBACd,QACA,MACA,SACW;AAGX,KAAI,CAFa,qBAAqB,OAAO,CAE/B,MAAM,KAAK,CACvB,OAAM,IAAI,MAAM,GAAG,QAAQ,MAAM;AAGnC,QAAO;;;;;AAMT,SAAgB,aACd,QACA,MACmB;AAEnB,QADiB,qBAAqB,OAAO,CAC7B,MAAM,KAAK;;;;;AAM7B,SAAgB,mBACd,QACA,MAOa;AACb,KAAI,OAAO,KACT,uBAAsB,OAAO,MAAM,KAAK,MAAM,MAAM;AAEtD,KAAI,OAAO,MACT,uBAAsB,OAAO,OAAO,KAAK,OAAO,UAAU;AAE5D,KAAI,OAAO,OACT,uBAAsB,OAAO,QAAQ,KAAK,QAAQ,OAAO;AAE3D,KAAI,OAAO,QACT,uBAAsB,OAAO,SAAS,KAAK,SAAS,MAAM;AAE5D,KAAI,OAAO,QACT,uBAAsB,OAAO,SAAS,KAAK,SAAS,SAAS;AAE/D,QAAO;;;;;AAMT,SAAgB,kBAAkB,QAA4B;AAC5D,KAAI,OAAO,KAAM,sBAAqB,OAAO,KAAK;AAClD,KAAI,OAAO,MAAO,sBAAqB,OAAO,MAAM;AACpD,KAAI,OAAO,OAAQ,sBAAqB,OAAO,OAAO;AACtD,KAAI,OAAO,QAAS,sBAAqB,OAAO,QAAQ;AACxD,KAAI,OAAO,QAAS,sBAAqB,OAAO,QAAQ;;;;;AAM1D,SAAgB,gBACd,QACgD;AAChD,SAAQ,SAAkB,eAAe,QAAQ,KAAK;;;;;AAMxD,SAAgB,yBAA8D;AAC5E,QAAO;EACL,WAAW;EACX,MAAM;EACP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vafast",
3
- "version": "0.4.23",
3
+ "version": "0.5.1",
4
4
  "description": "极简结构化Web框架,支持 Bun 和 Node.js。Go风格,函数优先。",
5
5
  "type": "module",
6
6
  "repository": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-server-B7MYJNsl.mjs","names":[],"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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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"component-server-DomPJ_7S.mjs","names":[],"sources":["../src/server/component-server.ts"],"sourcesContent":["import type {\n ComponentRoute,\n NestedComponentRoute,\n FlattenedComponentRoute,\n} from \"../types/component-route\";\nimport { flattenComponentRoutes } from \"../middleware/component-router\";\nimport { BaseServer } from \"./base-server\";\nimport { PathMatcher } from \"../utils/path-matcher\";\nimport { HtmlRenderer } from \"../utils/html-renderer\";\nimport { DependencyManager } from \"../utils/dependency-manager\";\n\n/**\n * 组件路由服务器\n * 专门处理声明式组件路由\n */\nexport class ComponentServer extends BaseServer {\n private routes: FlattenedComponentRoute[];\n private dependencyManager: DependencyManager;\n\n constructor(routes: (ComponentRoute | NestedComponentRoute)[]) {\n super();\n this.routes = flattenComponentRoutes(routes);\n this.dependencyManager = new DependencyManager();\n\n // 检测路由冲突\n this.detectRouteConflicts(this.routes);\n this.logFlattenedRoutes(this.routes, \"组件路由\");\n console.log(\"🚀 依赖按需加载,服务器启动完成\");\n }\n\n /**\n * 处理请求\n */\n async fetch(req: Request): Promise<Response> {\n const url = new URL(req.url);\n const pathname = url.pathname;\n const method = req.method;\n\n // 只支持 GET 请求\n if (method !== \"GET\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n // 查找匹配的路由\n let matchedRoute: FlattenedComponentRoute | null = null;\n for (const route of this.routes) {\n if (PathMatcher.matchPath(route.fullPath, pathname)) {\n matchedRoute = route;\n break;\n }\n }\n\n if (!matchedRoute) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n try {\n // 创建中间件上下文\n const context = {\n req,\n params: PathMatcher.extractParams(matchedRoute.fullPath, pathname),\n query: Object.fromEntries(url.searchParams),\n pathname,\n };\n\n // 执行中间件链,中间件会处理组件渲染\n return await this.executeMiddlewareChain(\n matchedRoute.middlewareChain,\n context,\n matchedRoute.component,\n );\n } catch (error) {\n console.error(\"组件渲染失败:\", error);\n return new Response(\"Internal Server Error\", { status: 500 });\n }\n }\n\n /**\n * 执行中间件链\n */\n private async executeMiddlewareChain(\n middlewareChain: any[],\n context: any,\n componentImport: () => Promise<any>,\n ): Promise<Response> {\n // 创建最终的渲染函数\n const renderComponent = async () => {\n const componentModule = await componentImport();\n const component = componentModule.default || componentModule;\n\n // 自动检测组件类型\n const componentType =\n this.dependencyManager.detectComponentType(component);\n\n // 按需加载依赖\n const deps = await this.dependencyManager.getFrameworkDeps(componentType);\n\n // 根据组件类型渲染\n if (componentType === \"vue\") {\n return await this.renderVueComponent(component, context, deps);\n } else if (componentType === \"react\") {\n return await this.renderReactComponent(component, context, deps);\n } else {\n throw new Error(`不支持的组件类型: ${componentType}`);\n }\n };\n\n // 执行中间件链\n let index = 0;\n const next = async (): Promise<Response> => {\n if (index >= middlewareChain.length) {\n return await renderComponent();\n }\n\n const middleware = middlewareChain[index++];\n return await middleware(context.req, next);\n };\n\n return await next();\n }\n\n /**\n * 渲染 Vue 组件\n */\n private async renderVueComponent(\n component: any,\n context: any,\n deps: any,\n ): Promise<Response> {\n try {\n const [vue, renderer] = deps;\n const app = vue.createSSRApp(component);\n\n // 提供路由信息\n app.provide(\"routeInfo\", {\n params: context.params || {},\n query: context.query || {},\n pathname: context.pathname,\n });\n\n const html = await renderer.renderToString(app);\n const fullHtml = HtmlRenderer.generateVueHtml(html, context);\n\n return new Response(fullHtml, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n } catch (error) {\n console.error(\"Vue 组件渲染失败:\", error);\n return new Response(\"Vue Component Render Error\", { status: 500 });\n }\n }\n\n /**\n * 渲染 React 组件\n */\n private async renderReactComponent(\n component: any,\n context: any,\n deps: any,\n ): Promise<Response> {\n try {\n const [react, renderer] = deps;\n const content = react.createElement(component, {\n req: context.req,\n params: context.params || {},\n query: context.query || {},\n });\n\n const html = renderer.renderToString(content);\n const fullHtml = HtmlRenderer.generateReactHtml(html, context);\n\n return new Response(fullHtml, {\n headers: { \"Content-Type\": \"text/html; charset=utf-8\" },\n });\n } catch (error) {\n console.error(\"React 组件渲染失败:\", error);\n return new Response(\"React Component Render Error\", { status: 500 });\n }\n }\n\n /**\n * 获取依赖管理器(用于外部访问)\n */\n getDependencyManager(): DependencyManager {\n return this.dependencyManager;\n }\n}\n"],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- import { i as RouteSchema, n as HandlerContextWithExtra, t as HandlerContext } from "./schema-B6DFN5c2.mjs";
2
-
3
- //#region src/utils/create-handler.d.ts
4
- /**
5
- * 类型安全的路由处理器工厂
6
- *
7
- * 非柯里化设计,API 更简洁
8
- *
9
- * @author Framework Team
10
- * @version 3.0.0
11
- * @license MIT
12
- */
13
- /** 空 schema 的上下文类型 */
14
- type EmptySchemaContext = {
15
- req: Request;
16
- body: unknown;
17
- query: Record<string, string>;
18
- params: Record<string, string>;
19
- headers: Record<string, string>;
20
- cookies: Record<string, string>;
21
- };
22
- /**
23
- * 创建类型安全的路由处理器
24
- *
25
- * @example
26
- * ```typescript
27
- * // 无 schema - 直接传入 handler
28
- * createHandler(({ params }) => `User: ${params.id}`)
29
- *
30
- * // 有 schema - 传入 schema 和 handler
31
- * createHandler(
32
- * { body: Type.Object({ name: Type.String() }) },
33
- * ({ body }) => ({ hello: body.name })
34
- * )
35
- * ```
36
- */
37
- /**
38
- * 带类型推断的 Handler - 保留返回类型信息用于客户端类型推断
39
- */
40
- type InferableHandler<TReturn, TSchema extends RouteSchema = RouteSchema> = ((req: Request) => Promise<Response>) & {
41
- /** 返回类型标记(仅用于类型推断,运行时不存在) */
42
- __returnType: TReturn;
43
- /** Schema 类型标记 */
44
- __schema: TSchema;
45
- };
46
- declare function createHandler<R>(handler: (ctx: EmptySchemaContext) => R | Promise<R>): InferableHandler<R>;
47
- declare function createHandler<const T extends RouteSchema, R>(schema: T, handler: (ctx: HandlerContext<T>) => R | Promise<R>): InferableHandler<R, T>;
48
- /**
49
- * 创建带额外上下文的路由处理器
50
- *
51
- * 用于中间件注入额外数据的场景
52
- *
53
- * @example
54
- * ```typescript
55
- * // 定义中间件注入的类型
56
- * type AuthContext = { user: { id: string; role: string } };
57
- *
58
- * // 无 schema
59
- * createHandlerWithExtra<AuthContext>(({ user }) => {
60
- * return { userId: user.id };
61
- * })
62
- *
63
- * // 有 schema
64
- * createHandlerWithExtra<AuthContext>(
65
- * { body: Type.Object({ action: Type.String() }) },
66
- * ({ body, user }) => ({ success: true, userId: user.id })
67
- * )
68
- * ```
69
- */
70
- declare function createHandlerWithExtra<TExtra extends Record<string, unknown> = Record<string, never>, R = unknown>(handler: (ctx: EmptySchemaContext & TExtra) => R | Promise<R>): (req: Request) => Promise<Response>;
71
- declare function createHandlerWithExtra<TExtra extends Record<string, unknown> = Record<string, never>, const T extends RouteSchema = RouteSchema, R = unknown>(schema: T, handler: (ctx: HandlerContextWithExtra<T, TExtra>) => R | Promise<R>): (req: Request) => Promise<Response>;
72
- /**
73
- * 简单的路由处理器 (无 schema 验证,只有 req)
74
- *
75
- * @example
76
- * ```typescript
77
- * simpleHandler(({ req }) => {
78
- * return { message: "Hello World" };
79
- * })
80
- * ```
81
- */
82
- declare function simpleHandler<R>(handler: (ctx: {
83
- req: Request;
84
- }) => R | Promise<R>): (req: Request) => Promise<Response>;
85
- //#endregion
86
- export { simpleHandler as i, createHandler as n, createHandlerWithExtra as r, InferableHandler as t };
87
- //# sourceMappingURL=create-handler-DKw-sQOV.d.mts.map