vafast 0.4.24 → 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 +132 -1
  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 +4 -7
  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-OUUug5DR.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-BUom6ISO.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-CgYfGB4J.mjs +0 -98
  148. package/dist/router-CgYfGB4J.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-BUom6ISO.mjs.map +0 -1
  152. package/dist/server-C2RPKSvC.d.mts +0 -51
  153. package/dist/server-OUUug5DR.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
@@ -0,0 +1,152 @@
1
+ import { Static, TSchema } from "@sinclair/typebox";
2
+
3
+ //#region src/defineRoute.d.ts
4
+
5
+ /** 路由 Schema 配置 */
6
+ interface RouteSchema {
7
+ body?: TSchema;
8
+ query?: TSchema;
9
+ params?: TSchema;
10
+ headers?: TSchema;
11
+ cookies?: TSchema;
12
+ }
13
+ /** 从 Schema 推断类型 */
14
+ type InferSchemaType<T extends RouteSchema> = {
15
+ body: T["body"] extends TSchema ? Static<T["body"]> : unknown;
16
+ query: T["query"] extends TSchema ? Static<T["query"]> : Record<string, string>;
17
+ params: T["params"] extends TSchema ? Static<T["params"]> : Record<string, string>;
18
+ headers: T["headers"] extends TSchema ? Static<T["headers"]> : Record<string, string>;
19
+ cookies: T["cookies"] extends TSchema ? Static<T["cookies"]> : Record<string, string>;
20
+ };
21
+ /** 带类型标记的中间件 */
22
+ interface TypedMiddleware<TContext extends object = object> {
23
+ (req: Request, next: (ctx?: TContext) => Promise<Response>): Response | Promise<Response>;
24
+ /** 类型标记(仅编译时使用) */
25
+ __context?: TContext;
26
+ }
27
+ /** 普通中间件(无类型注入) */
28
+ type PlainMiddleware = (req: Request, next: () => Promise<Response>) => Response | Promise<Response>;
29
+ /** 任意中间件类型 */
30
+ type AnyMiddleware = TypedMiddleware<object> | PlainMiddleware;
31
+ /** 从中间件提取上下文类型 */
32
+ type ExtractMiddlewareContext<T> = T extends TypedMiddleware<infer C> ? C : object;
33
+ /** 合并中间件数组的上下文类型 */
34
+ type MergeMiddlewareContexts<T extends readonly unknown[]> = T extends readonly [infer First, ...infer Rest] ? ExtractMiddlewareContext<First> & MergeMiddlewareContexts<Rest> : object;
35
+ /** Handler 上下文(包含 schema 推断) */
36
+ interface HandlerContext<TSchema$1 extends RouteSchema = RouteSchema> {
37
+ req: Request;
38
+ body: InferSchemaType<TSchema$1>["body"];
39
+ query: InferSchemaType<TSchema$1>["query"];
40
+ params: InferSchemaType<TSchema$1>["params"];
41
+ headers: InferSchemaType<TSchema$1>["headers"];
42
+ cookies: InferSchemaType<TSchema$1>["cookies"];
43
+ }
44
+ /** Handler 上下文(带中间件注入的额外类型) */
45
+ type HandlerContextWithExtra<TSchema$1 extends RouteSchema, TExtra> = HandlerContext<TSchema$1> & TExtra;
46
+ /** HTTP 方法 */
47
+ type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "OPTIONS" | "HEAD";
48
+ /** 叶子路由配置(有 method 和 handler) */
49
+ interface LeafRouteConfig<TMethod extends HTTPMethod = HTTPMethod, TPath extends string = string, TSchema$1 extends RouteSchema = RouteSchema, TReturn = unknown, TMiddleware extends readonly AnyMiddleware[] = readonly AnyMiddleware[]> {
50
+ readonly method: TMethod;
51
+ readonly path: TPath;
52
+ readonly name?: string;
53
+ readonly description?: string;
54
+ readonly schema?: TSchema$1;
55
+ readonly handler: (ctx: HandlerContextWithExtra<TSchema$1, MergeMiddlewareContexts<TMiddleware>>) => TReturn | Promise<TReturn>;
56
+ readonly middleware?: TMiddleware;
57
+ readonly docs?: {
58
+ tags?: string[];
59
+ security?: unknown[];
60
+ responses?: Record<string, unknown>;
61
+ };
62
+ }
63
+ /** 嵌套路由配置(有 children,无 method 和 handler) */
64
+ interface NestedRouteConfig<TPath extends string = string, TMiddleware extends readonly AnyMiddleware[] = readonly AnyMiddleware[]> {
65
+ readonly path: TPath;
66
+ readonly name?: string;
67
+ readonly description?: string;
68
+ readonly middleware?: TMiddleware;
69
+ readonly children: ReadonlyArray<RouteConfigResult>;
70
+ }
71
+ /** defineRoute 返回的类型 */
72
+ type RouteConfigResult = LeafRouteConfig<HTTPMethod, string, RouteSchema, unknown, readonly AnyMiddleware[]> | NestedRouteConfig<string, readonly AnyMiddleware[]>;
73
+ /** 处理后的扁平路由 */
74
+ interface ProcessedRoute {
75
+ method: HTTPMethod;
76
+ path: string;
77
+ name?: string;
78
+ description?: string;
79
+ schema?: RouteSchema;
80
+ handler: (req: Request) => Promise<Response>;
81
+ middleware?: readonly AnyMiddleware[];
82
+ docs?: {
83
+ tags?: string[];
84
+ security?: unknown[];
85
+ responses?: Record<string, unknown>;
86
+ };
87
+ /** 允许任意扩展(兼容 Route 类型) */
88
+ [key: string]: unknown;
89
+ }
90
+ /**
91
+ * 定义带类型的中间件(函数式风格)
92
+ *
93
+ * 通过 next() 参数传递上下文,更符合函数式编程风格
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * type AuthContext = { user: { id: string; name: string } }
98
+ *
99
+ * const authMiddleware = defineMiddleware<AuthContext>((req, next) => {
100
+ * const user = getUserFromToken(req)
101
+ * return next({ user }) // 通过 next 传递上下文
102
+ * })
103
+ * ```
104
+ */
105
+ declare function defineMiddleware<TContext extends object = object>(handler: (req: Request, next: (ctx?: TContext) => Promise<Response>) => Promise<Response>): TypedMiddleware<TContext>;
106
+ /**
107
+ * 定义叶子路由(有 method 和 handler),支持中间件类型推断
108
+ */
109
+ declare function defineRoute<const TSchema$1 extends RouteSchema, TReturn, const TMiddleware extends readonly AnyMiddleware[], TMethod extends HTTPMethod = HTTPMethod, TPath extends string = string>(config: {
110
+ readonly method: TMethod;
111
+ readonly path: TPath;
112
+ readonly name?: string;
113
+ readonly description?: string;
114
+ readonly schema?: TSchema$1;
115
+ readonly handler: (ctx: HandlerContextWithExtra<TSchema$1, MergeMiddlewareContexts<TMiddleware>>) => TReturn | Promise<TReturn>;
116
+ readonly middleware?: TMiddleware;
117
+ readonly docs?: {
118
+ tags?: string[];
119
+ security?: unknown[];
120
+ responses?: Record<string, unknown>;
121
+ };
122
+ }): LeafRouteConfig<TMethod, TPath, TSchema$1, TReturn, TMiddleware>;
123
+ /**
124
+ * 定义嵌套路由(有 children),支持中间件类型推断
125
+ */
126
+ declare function defineRoute<const TMiddleware extends readonly AnyMiddleware[], TPath extends string = string>(config: {
127
+ readonly path: TPath;
128
+ readonly name?: string;
129
+ readonly description?: string;
130
+ readonly middleware?: TMiddleware;
131
+ readonly children: ReadonlyArray<RouteConfigResult>;
132
+ }): NestedRouteConfig<TPath, TMiddleware>;
133
+ /**
134
+ * 定义路由数组,支持嵌套路由
135
+ */
136
+ declare function defineRoutes(routes: ReadonlyArray<RouteConfigResult>): ProcessedRoute[];
137
+ /** 可推断的路由类型(供 vafast-api-client 使用) */
138
+ type InferableRoute<TMethod extends string = string, TPath extends string = string, TReturn = unknown, TSchema$1 extends RouteSchema = RouteSchema> = {
139
+ readonly method: TMethod;
140
+ readonly path: TPath;
141
+ readonly name?: string;
142
+ readonly description?: string;
143
+ readonly schema?: TSchema$1;
144
+ readonly handler: {
145
+ __returnType: TReturn;
146
+ __schema: TSchema$1;
147
+ };
148
+ readonly middleware?: ReadonlyArray<AnyMiddleware>;
149
+ };
150
+ //#endregion
151
+ export { TypedMiddleware as a, defineRoutes as c, RouteSchema as i, InferableRoute as n, defineMiddleware as o, ProcessedRoute as r, defineRoute as s, HandlerContext as t };
152
+ //# sourceMappingURL=defineRoute-BjLBWeSj.d.mts.map
@@ -1,60 +1,2 @@
1
- import { i as RouteSchema } from "./schema-B6DFN5c2.mjs";
2
- import "./index-CREkvfw9.mjs";
3
- import { t as InferableHandler } from "./create-handler-DKw-sQOV.mjs";
4
-
5
- //#region src/defineRoute.d.ts
6
-
7
- /**
8
- * 可推断的路由类型(用于类型推断)
9
- * 供 vafast-api-client 使用,保留完整的类型信息
10
- */
11
- type InferableRoute<TMethod extends string = string, TPath extends string = string, TReturn = unknown, TSchema extends RouteSchema = RouteSchema> = {
12
- readonly method: TMethod;
13
- readonly path: TPath;
14
- readonly handler: InferableHandler<TReturn, TSchema>;
15
- readonly middleware?: ReadonlyArray<(req: Request, next: () => Promise<Response>) => Promise<Response>>;
16
- };
17
- /**
18
- * 中间件类型
19
- */
20
- type Middleware = (req: Request, next: () => Promise<Response>) => Promise<Response>;
21
- /**
22
- * 定义路由数组(自动保留字面量类型,支持端到端类型推断)
23
- *
24
- * @example
25
- * ```typescript
26
- * import { defineRoutes, createHandler, Type } from 'vafast'
27
- * import type { InferEden } from 'vafast-api-client'
28
- *
29
- * const routes = defineRoutes([
30
- * {
31
- * method: 'GET',
32
- * path: '/users',
33
- * handler: createHandler(
34
- * { query: Type.Object({ page: Type.Number() }) },
35
- * async ({ query }) => ({ users: [], total: 0 })
36
- * )
37
- * },
38
- * {
39
- * method: 'POST',
40
- * path: '/users',
41
- * handler: createHandler(
42
- * { body: Type.Object({ name: Type.String() }) },
43
- * async ({ body }) => ({ id: '1', name: body.name })
44
- * )
45
- * }
46
- * ])
47
- *
48
- * // ✅ 自动推断字面量类型,支持端到端类型推断
49
- * type Api = InferEden<typeof routes>
50
- * ```
51
- */
52
- declare function defineRoutes<const T extends readonly {
53
- readonly method: string;
54
- readonly path: string;
55
- readonly handler: unknown;
56
- readonly middleware?: ReadonlyArray<Middleware>;
57
- }[]>(routes: T): T;
58
- //#endregion
59
- export { InferableRoute, defineRoutes };
60
- //# sourceMappingURL=defineRoute.d.mts.map
1
+ import { a as TypedMiddleware, c as defineRoutes, i as RouteSchema, n as InferableRoute, o as defineMiddleware, r as ProcessedRoute, s as defineRoute, t as HandlerContext } from "./defineRoute-BjLBWeSj.mjs";
2
+ export { HandlerContext, InferableRoute, ProcessedRoute, RouteSchema, TypedMiddleware, defineMiddleware, defineRoute, defineRoutes };
@@ -1,39 +1,148 @@
1
+ import { a as parseCookies, l as parseHeaders, r as parseBody, u as parseQuery } from "./parsers-BrG_mRLq.mjs";
2
+ import { a as validateAllSchemas, i as precompileSchemas } from "./validators-CkfvNBbK.mjs";
3
+ import { i as json, l as VafastError } from "./response-CQ1IgWei.mjs";
4
+
1
5
  //#region src/defineRoute.ts
2
6
  /**
3
- * 定义路由数组(自动保留字面量类型,支持端到端类型推断)
7
+ * 定义带类型的中间件(函数式风格)
8
+ *
9
+ * 通过 next() 参数传递上下文,更符合函数式编程风格
4
10
  *
5
11
  * @example
6
12
  * ```typescript
7
- * import { defineRoutes, createHandler, Type } from 'vafast'
8
- * import type { InferEden } from 'vafast-api-client'
13
+ * type AuthContext = { user: { id: string; name: string } }
9
14
  *
10
- * const routes = defineRoutes([
11
- * {
12
- * method: 'GET',
13
- * path: '/users',
14
- * handler: createHandler(
15
- * { query: Type.Object({ page: Type.Number() }) },
16
- * async ({ query }) => ({ users: [], total: 0 })
17
- * )
18
- * },
19
- * {
20
- * method: 'POST',
21
- * path: '/users',
22
- * handler: createHandler(
23
- * { body: Type.Object({ name: Type.String() }) },
24
- * async ({ body }) => ({ id: '1', name: body.name })
25
- * )
26
- * }
27
- * ])
28
- *
29
- * // ✅ 自动推断字面量类型,支持端到端类型推断
30
- * type Api = InferEden<typeof routes>
15
+ * const authMiddleware = defineMiddleware<AuthContext>((req, next) => {
16
+ * const user = getUserFromToken(req)
17
+ * return next({ user }) // 通过 next 传递上下文
18
+ * })
31
19
  * ```
32
20
  */
21
+ function defineMiddleware(handler) {
22
+ const middleware = ((req, originalNext) => {
23
+ const nextWithContext = (ctx) => {
24
+ if (ctx) {
25
+ const target = req;
26
+ target.__locals = {
27
+ ...target.__locals || {},
28
+ ...ctx
29
+ };
30
+ }
31
+ return originalNext();
32
+ };
33
+ return handler(req, nextWithContext);
34
+ });
35
+ return middleware;
36
+ }
37
+ /** 自动转换返回值为 Response */
38
+ function autoResponse(result) {
39
+ if (result instanceof Response) return result;
40
+ if (result === null || result === void 0) return new Response(null, { status: 204 });
41
+ if (typeof result === "string") return new Response(result, { headers: { "Content-Type": "text/plain; charset=utf-8" } });
42
+ if (typeof result === "number" || typeof result === "boolean") return new Response(String(result), { headers: { "Content-Type": "text/plain; charset=utf-8" } });
43
+ if (typeof result === "object") {
44
+ const obj = result;
45
+ if ("data" in obj && ("status" in obj || "headers" in obj)) {
46
+ const { data, status = 200, headers = {} } = obj;
47
+ if (data === null || data === void 0) return new Response(null, {
48
+ status: status === 200 ? 204 : status,
49
+ headers
50
+ });
51
+ return json(data, status, headers);
52
+ }
53
+ return json(result);
54
+ }
55
+ return new Response(null, { status: 204 });
56
+ }
57
+ /** 创建包装后的 handler */
58
+ function wrapHandler(schema, userHandler) {
59
+ if (schema && (schema.body || schema.query || schema.params || schema.headers || schema.cookies)) precompileSchemas(schema);
60
+ return async (req) => {
61
+ try {
62
+ const query = parseQuery(req);
63
+ const headers = parseHeaders(req);
64
+ const cookies = parseCookies(req);
65
+ const params = req.params || {};
66
+ let body = void 0;
67
+ if (req.method !== "GET" && req.method !== "HEAD") try {
68
+ body = await parseBody(req);
69
+ } catch {}
70
+ const data = {
71
+ body,
72
+ query,
73
+ params,
74
+ headers,
75
+ cookies
76
+ };
77
+ if (schema && (schema.body || schema.query || schema.params || schema.headers || schema.cookies)) validateAllSchemas(schema, data);
78
+ const extraCtx = req.__locals || {};
79
+ return autoResponse(await userHandler({
80
+ req,
81
+ body,
82
+ query,
83
+ params,
84
+ headers,
85
+ cookies,
86
+ ...extraCtx
87
+ }));
88
+ } catch (error) {
89
+ if (error instanceof VafastError) throw error;
90
+ if (error instanceof Error && error.message.includes("验证失败")) return json({
91
+ success: false,
92
+ error: "Validation Error",
93
+ message: error.message
94
+ }, 400);
95
+ return json({
96
+ success: false,
97
+ error: "Internal Error",
98
+ message: error instanceof Error ? error.message : "未知错误"
99
+ }, 500);
100
+ }
101
+ };
102
+ }
103
+ /** 判断是否为叶子路由 */
104
+ function isLeafRoute(route) {
105
+ return "method" in route && "handler" in route;
106
+ }
107
+ /** 判断是否为嵌套路由 */
108
+ function isNestedRoute(route) {
109
+ return "children" in route;
110
+ }
111
+ /**
112
+ * defineRoute 实现
113
+ */
114
+ function defineRoute(config) {
115
+ return config;
116
+ }
117
+ /**
118
+ * 递归扁平化路由,合并路径和中间件
119
+ */
120
+ function flattenRoutes(routes, parentPath = "", parentMiddleware = []) {
121
+ const result = [];
122
+ for (const route of routes) {
123
+ const fullPath = parentPath + route.path;
124
+ const mergedMiddleware = [...parentMiddleware, ...route.middleware || []];
125
+ if (isLeafRoute(route)) result.push({
126
+ method: route.method,
127
+ path: fullPath,
128
+ name: route.name,
129
+ description: route.description,
130
+ schema: route.schema,
131
+ handler: wrapHandler(route.schema, route.handler),
132
+ middleware: mergedMiddleware.length > 0 ? mergedMiddleware : void 0,
133
+ docs: route.docs
134
+ });
135
+ else if (isNestedRoute(route)) result.push(...flattenRoutes(route.children, fullPath, mergedMiddleware));
136
+ }
137
+ return result;
138
+ }
139
+ /**
140
+ * 定义路由数组,支持嵌套路由
141
+ */
33
142
  function defineRoutes(routes) {
34
- return routes;
143
+ return flattenRoutes(routes);
35
144
  }
36
145
 
37
146
  //#endregion
38
- export { defineRoutes };
147
+ export { defineMiddleware, defineRoute, defineRoutes };
39
148
  //# sourceMappingURL=defineRoute.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineRoute.mjs","names":[],"sources":["../src/defineRoute.ts"],"sourcesContent":["import type { RouteSchema } from \"./types\";\nimport type { InferableHandler } from \"./utils/create-handler\";\n\n/**\n * 可推断的路由类型(用于类型推断)\n * 供 vafast-api-client 使用,保留完整的类型信息\n */\nexport type InferableRoute<\n TMethod extends string = string,\n TPath extends string = string,\n TReturn = unknown,\n TSchema extends RouteSchema = RouteSchema\n> = {\n readonly method: TMethod;\n readonly path: TPath;\n readonly handler: InferableHandler<TReturn, TSchema>;\n readonly middleware?: ReadonlyArray<(req: Request, next: () => Promise<Response>) => Promise<Response>>;\n}\n\n/**\n * 中间件类型\n */\ntype Middleware = (req: Request, next: () => Promise<Response>) => Promise<Response>;\n\n/**\n * 定义路由数组(自动保留字面量类型,支持端到端类型推断)\n *\n * @example\n * ```typescript\n * import { defineRoutes, createHandler, Type } from 'vafast'\n * import type { InferEden } from 'vafast-api-client'\n *\n * const routes = defineRoutes([\n * {\n * method: 'GET',\n * path: '/users',\n * handler: createHandler(\n * { query: Type.Object({ page: Type.Number() }) },\n * async ({ query }) => ({ users: [], total: 0 })\n * )\n * },\n * {\n * method: 'POST',\n * path: '/users',\n * handler: createHandler(\n * { body: Type.Object({ name: Type.String() }) },\n * async ({ body }) => ({ id: '1', name: body.name })\n * )\n * }\n * ])\n *\n * // ✅ 自动推断字面量类型,支持端到端类型推断\n * type Api = InferEden<typeof routes>\n * ```\n */\nexport function defineRoutes<\n const T extends readonly {\n readonly method: string\n readonly path: string\n readonly handler: unknown\n readonly middleware?: ReadonlyArray<Middleware>\n }[]\n>(routes: T): T {\n return routes;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuDA,SAAgB,aAOd,QAAc;AACd,QAAO"}
1
+ {"version":3,"file":"defineRoute.mjs","names":[],"sources":["../src/defineRoute.ts"],"sourcesContent":["/**\n * 路由定义 - Schema 在路由级别定义,支持嵌套路由和中间件类型推断\n *\n * @example\n * ```typescript\n * // 定义带类型的中间件(函数式风格,通过 next 传递上下文)\n * const authMiddleware = defineMiddleware<{ user: User }>((req, next) => {\n * const user = getUser(req)\n * return next({ user }) // 通过 next 参数传递上下文\n * })\n *\n * // 路由自动推断中间件注入的类型\n * const routes = defineRoutes([\n * defineRoute({\n * path: '/api',\n * middleware: [authMiddleware],\n * children: [\n * defineRoute({\n * method: 'GET',\n * path: '/profile',\n * handler: ({ user }) => ({ name: user.name }) // ✅ user 有类型\n * })\n * ]\n * })\n * ])\n * ```\n */\n\nimport type { TSchema, Static } from \"@sinclair/typebox\";\nimport { parseBody, parseQuery, parseHeaders, parseCookies } from \"./utils/parsers\";\nimport { validateAllSchemas, precompileSchemas } from \"./utils/validators/validators\";\nimport { json } from \"./utils/response\";\nimport { VafastError } from \"./middleware\";\n\n// ============= Schema 类型 =============\n\n/** 路由 Schema 配置 */\nexport interface RouteSchema {\n body?: TSchema;\n query?: TSchema;\n params?: TSchema;\n headers?: TSchema;\n cookies?: TSchema;\n}\n\n/** 从 Schema 推断类型 */\ntype InferSchemaType<T extends RouteSchema> = {\n body: T[\"body\"] extends TSchema ? Static<T[\"body\"]> : unknown;\n query: T[\"query\"] extends TSchema ? Static<T[\"query\"]> : Record<string, string>;\n params: T[\"params\"] extends TSchema ? Static<T[\"params\"]> : Record<string, string>;\n headers: T[\"headers\"] extends TSchema ? Static<T[\"headers\"]> : Record<string, string>;\n cookies: T[\"cookies\"] extends TSchema ? Static<T[\"cookies\"]> : Record<string, string>;\n};\n\n// ============= 中间件类型系统 =============\n\n/** 带类型标记的中间件 */\nexport interface TypedMiddleware<TContext extends object = object> {\n (req: Request, next: (ctx?: TContext) => Promise<Response>): Response | Promise<Response>;\n /** 类型标记(仅编译时使用) */\n __context?: TContext;\n}\n\n/** 普通中间件(无类型注入) */\ntype PlainMiddleware = (req: Request, next: () => Promise<Response>) => Response | Promise<Response>;\n\n/** 任意中间件类型 */\ntype AnyMiddleware = TypedMiddleware<object> | PlainMiddleware;\n\n/** 从中间件提取上下文类型 */\ntype ExtractMiddlewareContext<T> = T extends TypedMiddleware<infer C> ? C : object;\n\n/** 合并中间件数组的上下文类型 */\ntype MergeMiddlewareContexts<T extends readonly unknown[]> =\n T extends readonly [infer First, ...infer Rest]\n ? ExtractMiddlewareContext<First> & MergeMiddlewareContexts<Rest>\n : object;\n\n// ============= Handler 上下文 =============\n\n/** Handler 上下文(包含 schema 推断) */\nexport interface HandlerContext<TSchema extends RouteSchema = RouteSchema> {\n req: Request;\n body: InferSchemaType<TSchema>[\"body\"];\n query: InferSchemaType<TSchema>[\"query\"];\n params: InferSchemaType<TSchema>[\"params\"];\n headers: InferSchemaType<TSchema>[\"headers\"];\n cookies: InferSchemaType<TSchema>[\"cookies\"];\n}\n\n/** Handler 上下文(带中间件注入的额外类型) */\ntype HandlerContextWithExtra<TSchema extends RouteSchema, TExtra> =\n HandlerContext<TSchema> & TExtra;\n\n// ============= 路由配置类型 =============\n\n/** HTTP 方法 */\ntype HTTPMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"OPTIONS\" | \"HEAD\";\n\n/** 叶子路由配置(有 method 和 handler) */\ninterface LeafRouteConfig<\n TMethod extends HTTPMethod = HTTPMethod,\n TPath extends string = string,\n TSchema extends RouteSchema = RouteSchema,\n TReturn = unknown,\n TMiddleware extends readonly AnyMiddleware[] = readonly AnyMiddleware[]\n> {\n readonly method: TMethod;\n readonly path: TPath;\n readonly name?: string;\n readonly description?: string;\n readonly schema?: TSchema;\n readonly handler: (\n ctx: HandlerContextWithExtra<TSchema, MergeMiddlewareContexts<TMiddleware>>\n ) => TReturn | Promise<TReturn>;\n readonly middleware?: TMiddleware;\n readonly docs?: {\n tags?: string[];\n security?: unknown[];\n responses?: Record<string, unknown>;\n };\n}\n\n/** 嵌套路由配置(有 children,无 method 和 handler) */\ninterface NestedRouteConfig<\n TPath extends string = string,\n TMiddleware extends readonly AnyMiddleware[] = readonly AnyMiddleware[]\n> {\n readonly path: TPath;\n readonly name?: string;\n readonly description?: string;\n readonly middleware?: TMiddleware;\n readonly children: ReadonlyArray<RouteConfigResult>;\n}\n\n/** defineRoute 返回的类型 */\ntype RouteConfigResult =\n | LeafRouteConfig<HTTPMethod, string, RouteSchema, unknown, readonly AnyMiddleware[]>\n | NestedRouteConfig<string, readonly AnyMiddleware[]>;\n\n/** 处理后的扁平路由 */\nexport interface ProcessedRoute {\n method: HTTPMethod;\n path: string;\n name?: string;\n description?: string;\n schema?: RouteSchema;\n handler: (req: Request) => Promise<Response>;\n middleware?: readonly AnyMiddleware[];\n docs?: {\n tags?: string[];\n security?: unknown[];\n responses?: Record<string, unknown>;\n };\n /** 允许任意扩展(兼容 Route 类型) */\n [key: string]: unknown;\n}\n\n// ============= defineMiddleware =============\n\n/**\n * 定义带类型的中间件(函数式风格)\n *\n * 通过 next() 参数传递上下文,更符合函数式编程风格\n *\n * @example\n * ```typescript\n * type AuthContext = { user: { id: string; name: string } }\n *\n * const authMiddleware = defineMiddleware<AuthContext>((req, next) => {\n * const user = getUserFromToken(req)\n * return next({ user }) // 通过 next 传递上下文\n * })\n * ```\n */\nexport function defineMiddleware<TContext extends object = object>(\n handler: (\n req: Request,\n next: (ctx?: TContext) => Promise<Response>\n ) => Promise<Response>\n): TypedMiddleware<TContext> {\n // 包装成标准中间件签名\n const middleware = ((req: Request, originalNext: () => Promise<Response>) => {\n // 包装 next,接收上下文参数并存储到 req.__locals\n const nextWithContext = (ctx?: TContext): Promise<Response> => {\n if (ctx) {\n const target = req as unknown as { __locals?: object };\n target.__locals = { ...(target.__locals || {}), ...ctx };\n }\n return originalNext();\n };\n return handler(req, nextWithContext);\n }) as TypedMiddleware<TContext>;\n\n return middleware;\n}\n\n// ============= 响应处理 =============\n\n/** 自动转换返回值为 Response */\nfunction autoResponse(result: unknown): Response {\n if (result instanceof Response) return result;\n if (result === null || result === undefined) return new Response(null, { status: 204 });\n if (typeof result === \"string\") {\n return new Response(result, { headers: { \"Content-Type\": \"text/plain; charset=utf-8\" } });\n }\n if (typeof result === \"number\" || typeof result === \"boolean\") {\n return new Response(String(result), { headers: { \"Content-Type\": \"text/plain; charset=utf-8\" } });\n }\n if (typeof result === \"object\") {\n const obj = result as Record<string, unknown>;\n if (\"data\" in obj && (\"status\" in obj || \"headers\" in obj)) {\n const { data, status = 200, headers = {} } = obj;\n if (data === null || data === undefined) {\n return new Response(null, { status: status === 200 ? 204 : (status as number), headers: headers as HeadersInit });\n }\n return json(data, status as number, headers as Record<string, string>);\n }\n return json(result);\n }\n return new Response(null, { status: 204 });\n}\n\n/** 创建包装后的 handler */\nfunction wrapHandler<TSchema extends RouteSchema>(\n schema: TSchema | undefined,\n userHandler: (ctx: HandlerContext<TSchema>) => unknown | Promise<unknown>\n): (req: Request) => Promise<Response> {\n if (schema && (schema.body || schema.query || schema.params || schema.headers || schema.cookies)) {\n precompileSchemas(schema);\n }\n\n return async (req: Request): Promise<Response> => {\n try {\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 let body: unknown = undefined;\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n try {\n body = await parseBody(req);\n } catch {\n // 忽略解析错误\n }\n }\n\n const data = { body, query, params, headers, cookies };\n if (schema && (schema.body || schema.query || schema.params || schema.headers || schema.cookies)) {\n validateAllSchemas(schema, data);\n }\n\n // 获取中间件注入的上下文\n const extraCtx = (req as unknown as { __locals?: unknown }).__locals || {};\n\n const result = await userHandler({\n req,\n body: body as HandlerContext<TSchema>[\"body\"],\n query: query as HandlerContext<TSchema>[\"query\"],\n params: params as HandlerContext<TSchema>[\"params\"],\n headers: headers as HandlerContext<TSchema>[\"headers\"],\n cookies: cookies as HandlerContext<TSchema>[\"cookies\"],\n ...extraCtx,\n } as HandlerContext<TSchema>);\n\n return autoResponse(result);\n } catch (error) {\n // 如果是 VafastError,重新抛出让错误处理中间件处理\n if (error instanceof VafastError) {\n throw error;\n }\n if (error instanceof Error && error.message.includes(\"验证失败\")) {\n return json({ success: false, error: \"Validation Error\", message: error.message }, 400);\n }\n return json({ success: false, error: \"Internal Error\", message: error instanceof Error ? error.message : \"未知错误\" }, 500);\n }\n };\n}\n\n// ============= 判断路由类型 =============\n\n/** 判断是否为叶子路由 */\nfunction isLeafRoute(route: RouteConfigResult): route is LeafRouteConfig {\n return \"method\" in route && \"handler\" in route;\n}\n\n/** 判断是否为嵌套路由 */\nfunction isNestedRoute(route: RouteConfigResult): route is NestedRouteConfig {\n return \"children\" in route;\n}\n\n// ============= defineRoute 函数(支持重载) =============\n\n/**\n * 定义叶子路由(有 method 和 handler),支持中间件类型推断\n */\nexport function defineRoute<\n const TSchema extends RouteSchema,\n TReturn,\n const TMiddleware extends readonly AnyMiddleware[],\n TMethod extends HTTPMethod = HTTPMethod,\n TPath extends string = string\n>(config: {\n readonly method: TMethod;\n readonly path: TPath;\n readonly name?: string;\n readonly description?: string;\n readonly schema?: TSchema;\n readonly handler: (\n ctx: HandlerContextWithExtra<TSchema, MergeMiddlewareContexts<TMiddleware>>\n ) => TReturn | Promise<TReturn>;\n readonly middleware?: TMiddleware;\n readonly docs?: {\n tags?: string[];\n security?: unknown[];\n responses?: Record<string, unknown>;\n };\n}): LeafRouteConfig<TMethod, TPath, TSchema, TReturn, TMiddleware>;\n\n/**\n * 定义嵌套路由(有 children),支持中间件类型推断\n */\nexport function defineRoute<\n const TMiddleware extends readonly AnyMiddleware[],\n TPath extends string = string\n>(config: {\n readonly path: TPath;\n readonly name?: string;\n readonly description?: string;\n readonly middleware?: TMiddleware;\n readonly children: ReadonlyArray<RouteConfigResult>;\n}): NestedRouteConfig<TPath, TMiddleware>;\n\n/**\n * defineRoute 实现\n */\nexport function defineRoute(config: {\n readonly method?: HTTPMethod;\n readonly path: string;\n readonly name?: string;\n readonly description?: string;\n readonly schema?: RouteSchema;\n readonly handler?: (ctx: HandlerContext<RouteSchema>) => unknown | Promise<unknown>;\n readonly middleware?: readonly AnyMiddleware[];\n readonly children?: ReadonlyArray<RouteConfigResult>;\n readonly docs?: {\n tags?: string[];\n security?: unknown[];\n responses?: Record<string, unknown>;\n };\n}): RouteConfigResult {\n return config as RouteConfigResult;\n}\n\n// ============= 扁平化嵌套路由 =============\n\n/**\n * 递归扁平化路由,合并路径和中间件\n */\nfunction flattenRoutes(\n routes: ReadonlyArray<RouteConfigResult>,\n parentPath: string = \"\",\n parentMiddleware: readonly AnyMiddleware[] = []\n): ProcessedRoute[] {\n const result: ProcessedRoute[] = [];\n\n for (const route of routes) {\n const fullPath = parentPath + route.path;\n const mergedMiddleware = [...parentMiddleware, ...(route.middleware || [])];\n\n if (isLeafRoute(route)) {\n result.push({\n method: route.method,\n path: fullPath,\n name: route.name,\n description: route.description,\n schema: route.schema,\n handler: wrapHandler(route.schema, route.handler as (ctx: HandlerContext<RouteSchema>) => unknown),\n middleware: mergedMiddleware.length > 0 ? mergedMiddleware : undefined,\n docs: route.docs,\n });\n } else if (isNestedRoute(route)) {\n result.push(...flattenRoutes(route.children, fullPath, mergedMiddleware));\n }\n }\n\n return result;\n}\n\n// ============= defineRoutes 函数 =============\n\n/**\n * 定义路由数组,支持嵌套路由\n */\nexport function defineRoutes(routes: ReadonlyArray<RouteConfigResult>): ProcessedRoute[] {\n return flattenRoutes(routes);\n}\n\n// ============= 用于 API Client 的类型推断 =============\n\n/** 可推断的路由类型(供 vafast-api-client 使用) */\nexport type InferableRoute<\n TMethod extends string = string,\n TPath extends string = string,\n TReturn = unknown,\n TSchema extends RouteSchema = RouteSchema\n> = {\n readonly method: TMethod;\n readonly path: TPath;\n readonly name?: string;\n readonly description?: string;\n readonly schema?: TSchema;\n readonly handler: {\n __returnType: TReturn;\n __schema: TSchema;\n };\n readonly middleware?: ReadonlyArray<AnyMiddleware>;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+KA,SAAgB,iBACd,SAI2B;CAE3B,MAAM,eAAe,KAAc,iBAA0C;EAE3E,MAAM,mBAAmB,QAAsC;AAC7D,OAAI,KAAK;IACP,MAAM,SAAS;AACf,WAAO,WAAW;KAAE,GAAI,OAAO,YAAY,EAAE;KAAG,GAAG;KAAK;;AAE1D,UAAO,cAAc;;AAEvB,SAAO,QAAQ,KAAK,gBAAgB;;AAGtC,QAAO;;;AAMT,SAAS,aAAa,QAA2B;AAC/C,KAAI,kBAAkB,SAAU,QAAO;AACvC,KAAI,WAAW,QAAQ,WAAW,OAAW,QAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;AACvF,KAAI,OAAO,WAAW,SACpB,QAAO,IAAI,SAAS,QAAQ,EAAE,SAAS,EAAE,gBAAgB,6BAA6B,EAAE,CAAC;AAE3F,KAAI,OAAO,WAAW,YAAY,OAAO,WAAW,UAClD,QAAO,IAAI,SAAS,OAAO,OAAO,EAAE,EAAE,SAAS,EAAE,gBAAgB,6BAA6B,EAAE,CAAC;AAEnG,KAAI,OAAO,WAAW,UAAU;EAC9B,MAAM,MAAM;AACZ,MAAI,UAAU,QAAQ,YAAY,OAAO,aAAa,MAAM;GAC1D,MAAM,EAAE,MAAM,SAAS,KAAK,UAAU,EAAE,KAAK;AAC7C,OAAI,SAAS,QAAQ,SAAS,OAC5B,QAAO,IAAI,SAAS,MAAM;IAAE,QAAQ,WAAW,MAAM,MAAO;IAA4B;IAAwB,CAAC;AAEnH,UAAO,KAAK,MAAM,QAAkB,QAAkC;;AAExE,SAAO,KAAK,OAAO;;AAErB,QAAO,IAAI,SAAS,MAAM,EAAE,QAAQ,KAAK,CAAC;;;AAI5C,SAAS,YACP,QACA,aACqC;AACrC,KAAI,WAAW,OAAO,QAAQ,OAAO,SAAS,OAAO,UAAU,OAAO,WAAW,OAAO,SACtF,mBAAkB,OAAO;AAG3B,QAAO,OAAO,QAAoC;AAChD,MAAI;GACF,MAAM,QAAQ,WAAW,IAAI;GAC7B,MAAM,UAAU,aAAa,IAAI;GACjC,MAAM,UAAU,aAAa,IAAI;GACjC,MAAM,SAAW,IAA2C,UAAqC,EAAE;GAEnG,IAAI,OAAgB;AACpB,OAAI,IAAI,WAAW,SAAS,IAAI,WAAW,OACzC,KAAI;AACF,WAAO,MAAM,UAAU,IAAI;WACrB;GAKV,MAAM,OAAO;IAAE;IAAM;IAAO;IAAQ;IAAS;IAAS;AACtD,OAAI,WAAW,OAAO,QAAQ,OAAO,SAAS,OAAO,UAAU,OAAO,WAAW,OAAO,SACtF,oBAAmB,QAAQ,KAAK;GAIlC,MAAM,WAAY,IAA0C,YAAY,EAAE;AAY1E,UAAO,aAVQ,MAAM,YAAY;IAC/B;IACM;IACC;IACC;IACC;IACA;IACT,GAAG;IACJ,CAA4B,CAEF;WACpB,OAAO;AAEd,OAAI,iBAAiB,YACnB,OAAM;AAER,OAAI,iBAAiB,SAAS,MAAM,QAAQ,SAAS,OAAO,CAC1D,QAAO,KAAK;IAAE,SAAS;IAAO,OAAO;IAAoB,SAAS,MAAM;IAAS,EAAE,IAAI;AAEzF,UAAO,KAAK;IAAE,SAAS;IAAO,OAAO;IAAkB,SAAS,iBAAiB,QAAQ,MAAM,UAAU;IAAQ,EAAE,IAAI;;;;;AAQ7H,SAAS,YAAY,OAAoD;AACvE,QAAO,YAAY,SAAS,aAAa;;;AAI3C,SAAS,cAAc,OAAsD;AAC3E,QAAO,cAAc;;;;;AAgDvB,SAAgB,YAAY,QAcN;AACpB,QAAO;;;;;AAQT,SAAS,cACP,QACA,aAAqB,IACrB,mBAA6C,EAAE,EAC7B;CAClB,MAAM,SAA2B,EAAE;AAEnC,MAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,WAAW,aAAa,MAAM;EACpC,MAAM,mBAAmB,CAAC,GAAG,kBAAkB,GAAI,MAAM,cAAc,EAAE,CAAE;AAE3E,MAAI,YAAY,MAAM,CACpB,QAAO,KAAK;GACV,QAAQ,MAAM;GACd,MAAM;GACN,MAAM,MAAM;GACZ,aAAa,MAAM;GACnB,QAAQ,MAAM;GACd,SAAS,YAAY,MAAM,QAAQ,MAAM,QAAyD;GAClG,YAAY,iBAAiB,SAAS,IAAI,mBAAmB;GAC7D,MAAM,MAAM;GACb,CAAC;WACO,cAAc,MAAM,CAC7B,QAAO,KAAK,GAAG,cAAc,MAAM,UAAU,UAAU,iBAAiB,CAAC;;AAI7E,QAAO;;;;;AAQT,SAAgB,aAAa,QAA4D;AACvF,QAAO,cAAc,OAAO"}
@@ -57,4 +57,4 @@ var DependencyManager = class {
57
57
 
58
58
  //#endregion
59
59
  export { DependencyManager as t };
60
- //# sourceMappingURL=dependency-manager-DCmh7xFc.mjs.map
60
+ //# sourceMappingURL=dependency-manager-CGMZJTer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-manager-DCmh7xFc.mjs","names":[],"sources":["../src/utils/dependency-manager.ts"],"sourcesContent":["/**\n * 依赖管理器\n * 负责按需加载和管理框架依赖\n */\nexport class DependencyManager {\n private dependencyCache = new Map<string, any>();\n\n /**\n * 按需获取框架依赖\n */\n async getFrameworkDeps(framework: \"vue\" | \"react\") {\n if (this.dependencyCache.has(framework)) {\n return this.dependencyCache.get(framework);\n }\n\n console.log(`📦 按需加载 ${framework} 依赖...`);\n\n try {\n let deps;\n switch (framework) {\n case \"vue\":\n deps = await Promise.all([\n import(\"vue\"),\n import(\"@vue/server-renderer\"),\n ]);\n break;\n case \"react\":\n deps = await Promise.all([\n import(\"react\"),\n import(\"react-dom/server\"),\n ]);\n break;\n default:\n throw new Error(`不支持的框架: ${framework}`);\n }\n\n this.dependencyCache.set(framework, deps);\n console.log(`✅ ${framework} 依赖加载完成`);\n return deps;\n } catch (error) {\n console.error(`❌ ${framework} 依赖加载失败:`, error);\n throw error;\n }\n }\n\n /**\n * 检测组件类型\n */\n detectComponentType(component: any): \"vue\" | \"react\" {\n // 简单的组件类型检测\n if (component.render && typeof component.render === \"function\") {\n return \"vue\";\n }\n if (component.$$typeof) {\n return \"react\";\n }\n // 默认使用 Vue\n return \"vue\";\n }\n\n /**\n * 清除缓存\n */\n clearCache(): void {\n this.dependencyCache.clear();\n console.log(\"🧹 依赖缓存已清除\");\n }\n\n /**\n * 获取缓存状态\n */\n getCacheStatus(): Record<string, boolean> {\n const status: Record<string, boolean> = {};\n for (const [framework] of this.dependencyCache) {\n status[framework] = true;\n }\n return status;\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,oBAAb,MAA+B;CAC7B,AAAQ,kCAAkB,IAAI,KAAkB;;;;CAKhD,MAAM,iBAAiB,WAA4B;AACjD,MAAI,KAAK,gBAAgB,IAAI,UAAU,CACrC,QAAO,KAAK,gBAAgB,IAAI,UAAU;AAG5C,UAAQ,IAAI,WAAW,UAAU,QAAQ;AAEzC,MAAI;GACF,IAAI;AACJ,WAAQ,WAAR;IACE,KAAK;AACH,YAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,QACP,OAAO,wBACR,CAAC;AACF;IACF,KAAK;AACH,YAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,UACP,OAAO,oBACR,CAAC;AACF;IACF,QACE,OAAM,IAAI,MAAM,WAAW,YAAY;;AAG3C,QAAK,gBAAgB,IAAI,WAAW,KAAK;AACzC,WAAQ,IAAI,KAAK,UAAU,SAAS;AACpC,UAAO;WACA,OAAO;AACd,WAAQ,MAAM,KAAK,UAAU,WAAW,MAAM;AAC9C,SAAM;;;;;;CAOV,oBAAoB,WAAiC;AAEnD,MAAI,UAAU,UAAU,OAAO,UAAU,WAAW,WAClD,QAAO;AAET,MAAI,UAAU,SACZ,QAAO;AAGT,SAAO;;;;;CAMT,aAAmB;AACjB,OAAK,gBAAgB,OAAO;AAC5B,UAAQ,IAAI,aAAa;;;;;CAM3B,iBAA0C;EACxC,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,cAAc,KAAK,gBAC7B,QAAO,aAAa;AAEtB,SAAO"}
1
+ {"version":3,"file":"dependency-manager-CGMZJTer.mjs","names":[],"sources":["../src/utils/dependency-manager.ts"],"sourcesContent":["/**\n * 依赖管理器\n * 负责按需加载和管理框架依赖\n */\nexport class DependencyManager {\n private dependencyCache = new Map<string, any>();\n\n /**\n * 按需获取框架依赖\n */\n async getFrameworkDeps(framework: \"vue\" | \"react\") {\n if (this.dependencyCache.has(framework)) {\n return this.dependencyCache.get(framework);\n }\n\n console.log(`📦 按需加载 ${framework} 依赖...`);\n\n try {\n let deps;\n switch (framework) {\n case \"vue\":\n deps = await Promise.all([\n import(\"vue\"),\n import(\"@vue/server-renderer\"),\n ]);\n break;\n case \"react\":\n deps = await Promise.all([\n import(\"react\"),\n import(\"react-dom/server\"),\n ]);\n break;\n default:\n throw new Error(`不支持的框架: ${framework}`);\n }\n\n this.dependencyCache.set(framework, deps);\n console.log(`✅ ${framework} 依赖加载完成`);\n return deps;\n } catch (error) {\n console.error(`❌ ${framework} 依赖加载失败:`, error);\n throw error;\n }\n }\n\n /**\n * 检测组件类型\n */\n detectComponentType(component: any): \"vue\" | \"react\" {\n // 简单的组件类型检测\n if (component.render && typeof component.render === \"function\") {\n return \"vue\";\n }\n if (component.$$typeof) {\n return \"react\";\n }\n // 默认使用 Vue\n return \"vue\";\n }\n\n /**\n * 清除缓存\n */\n clearCache(): void {\n this.dependencyCache.clear();\n console.log(\"🧹 依赖缓存已清除\");\n }\n\n /**\n * 获取缓存状态\n */\n getCacheStatus(): Record<string, boolean> {\n const status: Record<string, boolean> = {};\n for (const [framework] of this.dependencyCache) {\n status[framework] = true;\n }\n return status;\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,oBAAb,MAA+B;CAC7B,AAAQ,kCAAkB,IAAI,KAAkB;;;;CAKhD,MAAM,iBAAiB,WAA4B;AACjD,MAAI,KAAK,gBAAgB,IAAI,UAAU,CACrC,QAAO,KAAK,gBAAgB,IAAI,UAAU;AAG5C,UAAQ,IAAI,WAAW,UAAU,QAAQ;AAEzC,MAAI;GACF,IAAI;AACJ,WAAQ,WAAR;IACE,KAAK;AACH,YAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,QACP,OAAO,wBACR,CAAC;AACF;IACF,KAAK;AACH,YAAO,MAAM,QAAQ,IAAI,CACvB,OAAO,UACP,OAAO,oBACR,CAAC;AACF;IACF,QACE,OAAM,IAAI,MAAM,WAAW,YAAY;;AAG3C,QAAK,gBAAgB,IAAI,WAAW,KAAK;AACzC,WAAQ,IAAI,KAAK,UAAU,SAAS;AACpC,UAAO;WACA,OAAO;AACd,WAAQ,MAAM,KAAK,UAAU,WAAW,MAAM;AAC9C,SAAM;;;;;;CAOV,oBAAoB,WAAiC;AAEnD,MAAI,UAAU,UAAU,OAAO,UAAU,WAAW,WAClD,QAAO;AAET,MAAI,UAAU,SACZ,QAAO;AAGT,SAAO;;;;;CAMT,aAAmB;AACjB,OAAK,gBAAgB,OAAO;AAC5B,UAAQ,IAAI,aAAa;;;;;CAM3B,iBAA0C;EACxC,MAAM,SAAkC,EAAE;AAC1C,OAAK,MAAM,CAAC,cAAc,KAAK,gBAC7B,QAAO,aAAa;AAEtB,SAAO"}
@@ -24,4 +24,4 @@ declare class DependencyManager {
24
24
  }
25
25
  //#endregion
26
26
  export { DependencyManager as t };
27
- //# sourceMappingURL=dependency-manager-C3_7ic4h.d.mts.map
27
+ //# sourceMappingURL=dependency-manager-DIN9X0Gj.d.mts.map
@@ -39,4 +39,4 @@ declare const Patterns: {
39
39
  };
40
40
  //#endregion
41
41
  export { registerFormats as i, hasFormat as n, registerFormat as r, Patterns as t };
42
- //# sourceMappingURL=formats-Dk-DSBY4.d.mts.map
42
+ //# sourceMappingURL=formats-DDDSFWP0.d.mts.map
@@ -30,4 +30,4 @@ function goAwait(promise) {
30
30
 
31
31
  //#endregion
32
32
  export { goAwait as t };
33
- //# sourceMappingURL=go-await-C4ZdEUwY.mjs.map
33
+ //# sourceMappingURL=go-await-B1U27PgB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"go-await-C4ZdEUwY.mjs","names":[],"sources":["../src/utils/go-await.ts"],"sourcesContent":["/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @author Framework Team\n * @version 1.0.0\n * @license MIT\n */\n\n/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @param promise 要处理的 Promise\n * @returns [Error | null, T | undefined] 元组,第一个元素是错误,第二个是结果\n *\n * @example\n * ```typescript\n * const [error, result] = await goAwait(someAsyncFunction());\n * if (error) {\n * console.error(\"操作失败:\", error);\n * } else {\n * console.log(\"操作成功:\", result);\n * }\n * ```\n */\nexport function goAwait<T>(\n promise: Promise<T>,\n): Promise<[Error | null, T | undefined]> {\n return promise\n .then<[null, T]>((data) => [null, data])\n .catch<\n [Error, undefined]\n >((err) => [err instanceof Error ? err : new Error(String(err)), undefined]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,QACd,SACwC;AACxC,QAAO,QACJ,MAAiB,SAAS,CAAC,MAAM,KAAK,CAAC,CACvC,OAEE,QAAQ,CAAC,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAAE,OAAU,CAAC"}
1
+ {"version":3,"file":"go-await-B1U27PgB.mjs","names":[],"sources":["../src/utils/go-await.ts"],"sourcesContent":["/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @author Framework Team\n * @version 1.0.0\n * @license MIT\n */\n\n/**\n * Go 风格的错误处理工具\n * 将 Promise 转换为 [Error | null, T | undefined] 格式\n *\n * @param promise 要处理的 Promise\n * @returns [Error | null, T | undefined] 元组,第一个元素是错误,第二个是结果\n *\n * @example\n * ```typescript\n * const [error, result] = await goAwait(someAsyncFunction());\n * if (error) {\n * console.error(\"操作失败:\", error);\n * } else {\n * console.log(\"操作成功:\", result);\n * }\n * ```\n */\nexport function goAwait<T>(\n promise: Promise<T>,\n): Promise<[Error | null, T | undefined]> {\n return promise\n .then<[null, T]>((data) => [null, data])\n .catch<\n [Error, undefined]\n >((err) => [err instanceof Error ? err : new Error(String(err)), undefined]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,QACd,SACwC;AACxC,QAAO,QACJ,MAAiB,SAAS,CAAC,MAAM,KAAK,CAAC,CACvC,OAEE,QAAQ,CAAC,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,EAAE,OAAU,CAAC"}
@@ -27,4 +27,4 @@
27
27
  declare function goAwait<T>(promise: Promise<T>): Promise<[Error | null, T | undefined]>;
28
28
  //#endregion
29
29
  export { goAwait as t };
30
- //# sourceMappingURL=go-await-DL1A_-4X.d.mts.map
30
+ //# sourceMappingURL=go-await-DPtVBug4.d.mts.map
@@ -66,4 +66,4 @@ var HtmlRenderer = class {
66
66
 
67
67
  //#endregion
68
68
  export { HtmlRenderer as t };
69
- //# sourceMappingURL=html-renderer-DTtJ_Yic.mjs.map
69
+ //# sourceMappingURL=html-renderer-D1zzDVQM.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"html-renderer-DTtJ_Yic.mjs","names":[],"sources":["../src/utils/html-renderer.ts"],"sourcesContent":["/**\n * HTML渲染工具类\n * 提供统一的HTML模板生成功能\n */\nexport class HtmlRenderer {\n /**\n * 生成基础HTML模板\n */\n static generateBaseHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"app\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n\n /**\n * 生成Vue组件HTML\n */\n static generateVueHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return this.generateBaseHtml(content, context, clientScriptPath);\n }\n\n /**\n * 生成React组件HTML\n */\n static generateReactHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"root\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,eAAb,MAA0B;;;;CAIxB,OAAO,iBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO;;;;;;;;;0BASe,QAAQ;;;wBAGV,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB;;;;;;;;CAStD,OAAO,gBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO,KAAK,iBAAiB,SAAS,SAAS,iBAAiB;;;;;CAMlE,OAAO,kBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO;;;;;;;;;2BASgB,QAAQ;;;wBAGX,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB"}
1
+ {"version":3,"file":"html-renderer-D1zzDVQM.mjs","names":[],"sources":["../src/utils/html-renderer.ts"],"sourcesContent":["/**\n * HTML渲染工具类\n * 提供统一的HTML模板生成功能\n */\nexport class HtmlRenderer {\n /**\n * 生成基础HTML模板\n */\n static generateBaseHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"app\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n\n /**\n * 生成Vue组件HTML\n */\n static generateVueHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return this.generateBaseHtml(content, context, clientScriptPath);\n }\n\n /**\n * 生成React组件HTML\n */\n static generateReactHtml(\n content: string,\n context: any,\n clientScriptPath: string = \"/client.js\",\n ): string {\n return `\n <!doctype html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <title>Vafast SSR App</title>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n </head>\n <body>\n <div id=\"root\">${content}</div>\n <script>\n window.__ROUTE_INFO__ = {\n params: ${JSON.stringify(context.params || {})},\n query: ${JSON.stringify(context.query || {})},\n pathname: '${context.pathname}'\n };\n </script>\n <script type=\"module\" src=\"${clientScriptPath}\"></script>\n </body>\n </html>\n `;\n }\n}\n"],"mappings":";;;;;AAIA,IAAa,eAAb,MAA0B;;;;CAIxB,OAAO,iBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO;;;;;;;;;0BASe,QAAQ;;;wBAGV,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB;;;;;;;;CAStD,OAAO,gBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO,KAAK,iBAAiB,SAAS,SAAS,iBAAiB;;;;;CAMlE,OAAO,kBACL,SACA,SACA,mBAA2B,cACnB;AACR,SAAO;;;;;;;;;2BASgB,QAAQ;;;wBAGX,KAAK,UAAU,QAAQ,UAAU,EAAE,CAAC,CAAC;uBACtC,KAAK,UAAU,QAAQ,SAAS,EAAE,CAAC,CAAC;2BAChC,QAAQ,SAAS;;;uCAGL,iBAAiB"}
@@ -19,4 +19,4 @@ declare class HtmlRenderer {
19
19
  }
20
20
  //#endregion
21
21
  export { HtmlRenderer as t };
22
- //# sourceMappingURL=html-renderer-CfKK2BrP.d.mts.map
22
+ //# sourceMappingURL=html-renderer-DhQxRuyi.d.mts.map
@@ -1,7 +1,7 @@
1
- import { l as Route, s as NestedRoute } from "./types-D1PUFkda.mjs";
2
- import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-nrrO0iSI.mjs";
3
- import { t as Server } from "./server-C2RPKSvC.mjs";
4
- import { t as ComponentServer } from "./component-server-JqpDC7wy.mjs";
1
+ import { r as ProcessedRoute } from "./defineRoute-BjLBWeSj.mjs";
2
+ import { r as NestedComponentRoute, t as ComponentRoute } from "./component-route-Di7R40-2.mjs";
3
+ import { t as Server } from "./server-CW1cdqGD.mjs";
4
+ import { t as ComponentServer } from "./component-server-fR4UV6Jq.mjs";
5
5
 
6
6
  //#region src/server/server-factory.d.ts
7
7
 
@@ -14,7 +14,7 @@ declare class ServerFactory {
14
14
  /**
15
15
  * 创建标准REST API服务器
16
16
  */
17
- createRestServer(routes: (Route | NestedRoute)[]): Server;
17
+ createRestServer(routes: ProcessedRoute[]): Server;
18
18
  /**
19
19
  * 创建组件服务器
20
20
  */
@@ -45,4 +45,4 @@ declare class ServerFactory {
45
45
  }
46
46
  //#endregion
47
47
  export { ServerFactory as t };
48
- //# sourceMappingURL=index-Bj3SWrMU.d.mts.map
48
+ //# sourceMappingURL=index-DCloGU_g.d.mts.map
package/dist/index.d.mts CHANGED
@@ -1,30 +1,25 @@
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
- import { i as simpleHandler, n as createHandler, r as createHandlerWithExtra, t as InferableHandler } from "./create-handler-DKw-sQOV.mjs";
7
- import { InferableRoute, defineRoutes } from "./defineRoute.mjs";
8
- import { t as BaseServer } from "./base-server-DLxtulAO.mjs";
9
- import { t as Server } from "./server-C2RPKSvC.mjs";
10
- import { t as DependencyManager } from "./dependency-manager-C3_7ic4h.mjs";
11
- import { t as ComponentServer } from "./component-server-JqpDC7wy.mjs";
12
- import { t as ServerFactory } from "./index-Bj3SWrMU.mjs";
13
- import { n as composeMiddleware, t as VafastError } from "./middleware-KXEoefLX.mjs";
14
- 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";
15
- 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";
16
- import { t as goAwait } from "./go-await-DL1A_-4X.mjs";
17
- import { n as base64urlEncode, t as base64urlDecode } from "./base64url-Dwi2Afhc.mjs";
18
- import { i as setLocals, n as getLocals } from "./handle-BhR3oyky.mjs";
19
- 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";
20
- import { a as parseAndValidateRequest, i as createRequestValidator, o as parseRequest, s as validateRequest } from "./request-validator-Coo8dI-p.mjs";
21
- import { t as HtmlRenderer } from "./html-renderer-CfKK2BrP.mjs";
22
- import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "./formats-Dk-DSBY4.mjs";
23
- import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "./sse-BgLhEo43.mjs";
24
- 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";
1
+ import { a as TypedMiddleware, c as defineRoutes, i as RouteSchema, n as InferableRoute, o as defineMiddleware, r as ProcessedRoute, s as defineRoute, t as HandlerContext } from "./defineRoute-BjLBWeSj.mjs";
2
+ import { i as ResponseBody, n as Method, r as Middleware, t as Handler } from "./types-B8Z3cMtZ.mjs";
3
+ import { n as FlattenedComponentRoute, r as NestedComponentRoute, t as ComponentRoute } from "./component-route-Di7R40-2.mjs";
4
+ import { t as BaseServer } from "./base-server-Contwrlf.mjs";
5
+ import { t as Server } from "./server-CW1cdqGD.mjs";
6
+ import { t as DependencyManager } from "./dependency-manager-DIN9X0Gj.mjs";
7
+ import { t as ComponentServer } from "./component-server-fR4UV6Jq.mjs";
8
+ import { t as ServerFactory } from "./index-DCloGU_g.mjs";
9
+ import { n as composeMiddleware, t as VafastError } from "./middleware-BR-R4p0M.mjs";
10
+ 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";
11
+ 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";
12
+ import { t as goAwait } from "./go-await-DPtVBug4.mjs";
13
+ import { n as base64urlEncode, t as base64urlDecode } from "./base64url-DNUGwekK.mjs";
14
+ import { t as HtmlRenderer } from "./html-renderer-DhQxRuyi.mjs";
15
+ 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";
16
+ import { i as registerFormats, n as hasFormat, r as registerFormat, t as Patterns } from "./formats-DDDSFWP0.mjs";
17
+ import { a as createSSEHandler, i as SSEMarker, r as SSEHandler, t as SSEEvent } from "./sse-5HykEmSm.mjs";
18
+ 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";
19
+ import { n as getApiSpec, t as generateAITools } from "./contract-BL3JflJ7.mjs";
25
20
  import "./utils/index.mjs";
26
- import { flattenNestedRoutes, normalizePath } from "./router.mjs";
27
- import { i as ServeResult, o as serve, r as ServeOptions, t as FetchHandler } from "./serve-AG80VaIr.mjs";
21
+ import { normalizePath } from "./router.mjs";
22
+ import { i as ServeResult, o as serve, r as ServeOptions, t as FetchHandler } from "./serve-DlzxgOhz.mjs";
28
23
  import "./serve.mjs";
29
24
  import { FormatRegistry, Type } from "@sinclair/typebox";
30
- export { BaseRouteConfig, BaseServer, CompatibleRoute, ComponentRoute, ComponentServer, DependencyManager, ExtendedRouteConfig, type FetchHandler, FlattenedComponentRoute, FlattenedRoute, FormatRegistry, Handler, HandlerContext, HandlerContextWithExtra, HtmlRenderer, InferSchema, InferableHandler, InferableRoute, Method, Middleware, NestedComponentRoute, NestedRoute, NestedRouteConfig, Patterns, ResponseBody, Route, RouteMeta, RouteRegistry, RouteSchema, SSEEvent, SSEHandler, SSEMarker, SchemaConfig, type ServeOptions, type ServeResult, Server, ServerFactory, Type, TypedHandler, TypedRoute, TypedRouteConfig, VafastError, ValidationError, ValidationResult, base64urlDecode, base64urlEncode, composeMiddleware, createHandler, createHandlerWithExtra, createRequestValidator, createRouteRegistry, createSSEHandler, createTypedRoute, createValidator, defineRoutes, empty, err, filterRoutes, flattenNestedRoutes, getAllRoutes, getCookie, getHeader, getLocals, getRoute, getRouteRegistry, getValidatorCacheStats, goAwait, hasFormat, html, isTypedRoute, json, normalizePath, parseAndValidateRequest, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, parseRequest, precompileSchemas, redirect, registerFormat, registerFormats, serve, setLocals, simpleHandler, stream, text, validateAllSchemas, validateFast, validateRequest, validateSchema, validateSchemaOrThrow };
25
+ export { BaseServer, ComponentRoute, ComponentServer, DependencyManager, type FetchHandler, FlattenedComponentRoute, FormatRegistry, Handler, HandlerContext, HtmlRenderer, InferableRoute, Method, Middleware, NestedComponentRoute, Patterns, ProcessedRoute, ResponseBody, RouteMeta, RouteRegistry, RouteSchema, SSEEvent, SSEHandler, SSEMarker, SchemaConfig, type ServeOptions, type ServeResult, Server, ServerFactory, Type, TypedMiddleware, VafastError, ValidationError, ValidationResult, base64urlDecode, base64urlEncode, composeMiddleware, createRouteRegistry, createSSEHandler, createValidator, defineMiddleware, defineRoute, defineRoutes, empty, err, filterRoutes, generateAITools, getAllRoutes, getApiSpec, getCookie, getHeader, getRoute, getRouteRegistry, getRoutesByMethod, getValidatorCacheStats, goAwait, hasFormat, html, json, normalizePath, parseBody, parseCookies, parseCookiesFast, parseHeaders, parseQuery, parseQueryFast, precompileSchemas, redirect, registerFormat, registerFormats, serve, stream, text, validateAllSchemas, validateFast, validateSchema, validateSchemaOrThrow };