vafast 0.4.4 → 0.4.8

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 (168) hide show
  1. package/README.md +43 -8
  2. package/dist/base-server-B7MYJNsl.mjs +112 -0
  3. package/dist/{base-server-CSkyjEaY.mjs.map → base-server-B7MYJNsl.mjs.map} +1 -1
  4. package/dist/{base-server-DvGS6ATg.d.mts → base-server-DLxtulAO.d.mts} +2 -2
  5. package/dist/{base64url-CwQnvZyp.mjs → base64url-C2zopQdH.mjs} +1 -1
  6. package/dist/{base64url-CwQnvZyp.mjs.map → base64url-C2zopQdH.mjs.map} +1 -1
  7. package/dist/{base64url-0N9uQPjZ.d.mts → base64url-Dwi2Afhc.d.mts} +1 -1
  8. package/dist/{component-route-CZawYn61.d.mts → component-route-nrrO0iSI.d.mts} +2 -2
  9. package/dist/{component-router-CErbGh2A.mjs → component-router-RwPL20vN.mjs} +10 -11
  10. package/dist/{component-router-CErbGh2A.mjs.map → component-router-RwPL20vN.mjs.map} +1 -1
  11. package/dist/component-server-DomPJ_7S.mjs +119 -0
  12. package/dist/{component-server-DAbIyIPI.mjs.map → component-server-DomPJ_7S.mjs.map} +1 -1
  13. package/dist/{component-server-CGzU4bss.d.mts → component-server-JqpDC7wy.d.mts} +4 -4
  14. package/dist/{create-handler-Bo-hvWp-.d.mts → create-handler-DKw-sQOV.d.mts} +2 -2
  15. package/dist/{create-handler-B_pfxh3m.mjs → create-handler-RconAcAB.mjs} +5 -6
  16. package/dist/{create-handler-B_pfxh3m.mjs.map → create-handler-RconAcAB.mjs.map} +1 -1
  17. package/dist/defineRoute.d.mts +3 -3
  18. package/dist/{dependency-manager-C6vFWP2L.d.mts → dependency-manager-C3_7ic4h.d.mts} +1 -1
  19. package/dist/dependency-manager-DCmh7xFc.mjs +60 -0
  20. package/dist/{dependency-manager-Czg7Po2j.mjs.map → dependency-manager-DCmh7xFc.mjs.map} +1 -1
  21. package/dist/{formats-CYLwo9GJ.d.mts → formats-Dk-DSBY4.d.mts} +1 -1
  22. package/dist/{go-await-BGAGJfrB.mjs → go-await-C4ZdEUwY.mjs} +1 -1
  23. package/dist/{go-await-BGAGJfrB.mjs.map → go-await-C4ZdEUwY.mjs.map} +1 -1
  24. package/dist/{go-await-DRItVwwh.d.mts → go-await-DL1A_-4X.d.mts} +1 -1
  25. package/dist/{handle-D0TFoOiX.d.mts → handle-BhR3oyky.d.mts} +1 -1
  26. package/dist/{handle-Csjtywdc.mjs → handle-BxJwSvV0.mjs} +2 -2
  27. package/dist/{handle-Csjtywdc.mjs.map → handle-BxJwSvV0.mjs.map} +1 -1
  28. package/dist/{html-renderer-CMGKJoIy.d.mts → html-renderer-CfKK2BrP.d.mts} +1 -1
  29. package/dist/{html-renderer-CczE8mwC.mjs → html-renderer-DTtJ_Yic.mjs} +26 -27
  30. package/dist/{html-renderer-CczE8mwC.mjs.map → html-renderer-DTtJ_Yic.mjs.map} +1 -1
  31. package/dist/{index-Ci52vt55.d.mts → index-CEfOqqvd.d.mts} +5 -5
  32. package/dist/index.d.mts +25 -25
  33. package/dist/index.mjs +21 -25
  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 -2
  37. package/dist/middleware-CewKbtb4.mjs +182 -0
  38. package/dist/middleware-CewKbtb4.mjs.map +1 -0
  39. package/dist/middleware-KXEoefLX.d.mts +23 -0
  40. package/dist/middleware.d.mts +4 -25
  41. package/dist/middleware.mjs +1 -2
  42. package/dist/monitoring/index.d.mts +8 -33
  43. package/dist/monitoring/index.mjs +1 -25
  44. package/dist/monitoring/native-monitor.d.mts +148 -27
  45. package/dist/monitoring/native-monitor.mjs +320 -114
  46. package/dist/monitoring/native-monitor.mjs.map +1 -1
  47. package/dist/node-server/index.d.mts +1 -1
  48. package/dist/node-server/index.mjs +3 -3
  49. package/dist/node-server/request.mjs +1 -1
  50. package/dist/node-server/response.mjs +1 -1
  51. package/dist/node-server/serve.d.mts +1 -1
  52. package/dist/node-server/serve.mjs +2 -2
  53. package/dist/{parsers-7lvt3Oss.d.mts → parsers-BerGr2_q.d.mts} +1 -1
  54. package/dist/{parsers-CI_TZ7pO.mjs → parsers-DpH_mD0H.mjs} +1 -1
  55. package/dist/{parsers-CI_TZ7pO.mjs.map → parsers-DpH_mD0H.mjs.map} +1 -1
  56. package/dist/path-matcher-CGczAIl_.mjs +61 -0
  57. package/dist/{path-matcher-73cJd5Y7.mjs.map → path-matcher-CGczAIl_.mjs.map} +1 -1
  58. package/dist/radix-tree-qqSjnVXF.mjs +163 -0
  59. package/dist/{radix-tree-D0XYaJKb.mjs.map → radix-tree-qqSjnVXF.mjs.map} +1 -1
  60. package/dist/{request-CKC3Ox6M.mjs → request-B-Nct5f7.mjs} +1 -1
  61. package/dist/{request-CKC3Ox6M.mjs.map → request-B-Nct5f7.mjs.map} +1 -1
  62. package/dist/{request-validator-_J5HloRq.mjs → request-validator-Bz9X48FX.mjs} +3 -3
  63. package/dist/{request-validator-_J5HloRq.mjs.map → request-validator-Bz9X48FX.mjs.map} +1 -1
  64. package/dist/{request-validator-42lY21gn.d.mts → request-validator-Coo8dI-p.d.mts} +2 -2
  65. package/dist/response-BMfdEcTm.d.mts +48 -0
  66. package/dist/{response-Cf5FgtmE.mjs → response-BnkYA4pj.mjs} +1 -1
  67. package/dist/{response-Cf5FgtmE.mjs.map → response-BnkYA4pj.mjs.map} +1 -1
  68. package/dist/{route-BJ-40LNI.d.mts → route-6A7umH7b.d.mts} +2 -2
  69. package/dist/{route-9pAVP1GC.mjs → route-Ds53PR4M.mjs} +1 -1
  70. package/dist/{route-9pAVP1GC.mjs.map → route-Ds53PR4M.mjs.map} +1 -1
  71. package/dist/{route-registry--tx1PNui.d.mts → route-registry-CmABJA2V.d.mts} +2 -2
  72. package/dist/route-registry-emTmRrWQ.mjs +226 -0
  73. package/dist/{route-registry-mcTG0M-t.mjs.map → route-registry-emTmRrWQ.mjs.map} +1 -1
  74. package/dist/router/index.d.mts +2 -2
  75. package/dist/router/index.mjs +3 -9
  76. package/dist/router/radix-tree.d.mts +3 -3
  77. package/dist/router/radix-tree.mjs +1 -2
  78. package/dist/{router-B9HUUCkR.mjs → router-xWzwz_1a.mjs} +2 -5
  79. package/dist/{router-B9HUUCkR.mjs.map → router-xWzwz_1a.mjs.map} +1 -1
  80. package/dist/router.d.mts +3 -3
  81. package/dist/router.mjs +1 -2
  82. package/dist/{schema-CPQudJpE.d.mts → schema-B6DFN5c2.d.mts} +1 -1
  83. package/dist/{serve-Be6NvuQk.mjs → serve-48LEIkPa.mjs} +3 -3
  84. package/dist/{serve-Be6NvuQk.mjs.map → serve-48LEIkPa.mjs.map} +1 -1
  85. package/dist/{serve-B5WmhK6m.d.mts → serve-AG80VaIr.d.mts} +1 -1
  86. package/dist/serve.d.mts +1 -1
  87. package/dist/serve.mjs +2 -2
  88. package/dist/server/base-server.d.mts +3 -3
  89. package/dist/server/base-server.mjs +1 -2
  90. package/dist/server/component-server.d.mts +4 -4
  91. package/dist/server/component-server.mjs +2 -3
  92. package/dist/server/index.d.mts +6 -6
  93. package/dist/server/index.mjs +6 -6
  94. package/dist/server/server-factory.d.mts +6 -6
  95. package/dist/server/server-factory.mjs +5 -4
  96. package/dist/server/server.d.mts +4 -4
  97. package/dist/server/server.mjs +2 -2
  98. package/dist/server-C75o1b-a.mjs +70 -0
  99. package/dist/server-C75o1b-a.mjs.map +1 -0
  100. package/dist/{server-D9gjszHe.d.mts → server-DGA3dd5s.d.mts} +3 -3
  101. package/dist/server-L_FNwdap.mjs +137 -0
  102. package/dist/{server-BmPKs8oM.mjs.map → server-L_FNwdap.mjs.map} +1 -1
  103. package/dist/{sse-BMM6KTfy.d.mts → sse-BgLhEo43.d.mts} +2 -2
  104. package/dist/{sse-BT5yyLgX.mjs → sse-CBl-szg1.mjs} +3 -3
  105. package/dist/{sse-BT5yyLgX.mjs.map → sse-CBl-szg1.mjs.map} +1 -1
  106. package/dist/types/component-route.d.mts +1 -1
  107. package/dist/types/index.d.mts +5 -5
  108. package/dist/types/index.mjs +1 -1
  109. package/dist/types/route.d.mts +1 -1
  110. package/dist/types/route.mjs +1 -1
  111. package/dist/types/schema.d.mts +1 -1
  112. package/dist/types/types.d.mts +1 -1
  113. package/dist/{types-DuTa8AVN.d.mts → types-D1PUFkda.d.mts} +1 -1
  114. package/dist/utils/base64url.d.mts +1 -1
  115. package/dist/utils/base64url.mjs +1 -1
  116. package/dist/utils/create-handler.d.mts +2 -2
  117. package/dist/utils/create-handler.mjs +4 -3
  118. package/dist/utils/dependency-manager.d.mts +1 -1
  119. package/dist/utils/dependency-manager.mjs +1 -2
  120. package/dist/utils/formats.d.mts +1 -1
  121. package/dist/utils/go-await.d.mts +1 -1
  122. package/dist/utils/go-await.mjs +1 -1
  123. package/dist/utils/handle.d.mts +1 -1
  124. package/dist/utils/handle.mjs +2 -2
  125. package/dist/utils/html-renderer.d.mts +1 -1
  126. package/dist/utils/html-renderer.mjs +1 -2
  127. package/dist/utils/index.d.mts +17 -16
  128. package/dist/utils/index.mjs +13 -21
  129. package/dist/utils/parsers.d.mts +1 -1
  130. package/dist/utils/parsers.mjs +1 -1
  131. package/dist/utils/path-matcher.mjs +1 -2
  132. package/dist/utils/request-validator.d.mts +2 -2
  133. package/dist/utils/request-validator.mjs +3 -3
  134. package/dist/utils/response.d.mts +5 -2
  135. package/dist/utils/response.mjs +2 -3
  136. package/dist/utils/route-registry.d.mts +3 -3
  137. package/dist/utils/route-registry.mjs +1 -2
  138. package/dist/utils/sse.d.mts +2 -2
  139. package/dist/utils/sse.mjs +3 -3
  140. package/dist/utils/validators/validators.d.mts +1 -1
  141. package/dist/utils/validators/validators.mjs +1 -1
  142. package/dist/{validators-CPmnj_y9.d.mts → validators-Ch71zkT8.d.mts} +1 -1
  143. package/dist/{validators-BBrGePBr.mjs → validators-DBkyw6BG.mjs} +1 -1
  144. package/dist/{validators-BBrGePBr.mjs.map → validators-DBkyw6BG.mjs.map} +1 -1
  145. package/package.json +6 -1
  146. package/dist/base-server-CSkyjEaY.mjs +0 -113
  147. package/dist/chunk-DW4-Jl94.mjs +0 -37
  148. package/dist/component-server-DAbIyIPI.mjs +0 -124
  149. package/dist/dependency-manager-Czg7Po2j.mjs +0 -61
  150. package/dist/middleware-Byp3Hjae.mjs +0 -59
  151. package/dist/middleware-Byp3Hjae.mjs.map +0 -1
  152. package/dist/monitoring/index.mjs.map +0 -1
  153. package/dist/monitoring/types.d.mts +0 -150
  154. package/dist/path-matcher-73cJd5Y7.mjs +0 -62
  155. package/dist/radix-tree-D0XYaJKb.mjs +0 -157
  156. package/dist/response-A-sZZiJ7.d.mts +0 -21
  157. package/dist/response-DXg4i_yh.mjs +0 -97
  158. package/dist/response-DXg4i_yh.mjs.map +0 -1
  159. package/dist/route-registry-mcTG0M-t.mjs +0 -225
  160. package/dist/router/index.mjs.map +0 -1
  161. package/dist/schema-CtVBNfnQ.mjs +0 -1
  162. package/dist/server-BmPKs8oM.mjs +0 -137
  163. package/dist/server-Cbd3Ia51.mjs +0 -88
  164. package/dist/server-Cbd3Ia51.mjs.map +0 -1
  165. package/dist/utils/index.mjs.map +0 -1
  166. /package/dist/{component-route-CYxLOnci.mjs → component-route-DNgAj6VC.mjs} +0 -0
  167. /package/dist/{index-CzItj62a.d.mts → index-CREkvfw9.d.mts} +0 -0
  168. /package/dist/{monitoring/types.mjs → schema-1fwiv7cm.mjs} +0 -0
@@ -1,225 +0,0 @@
1
- import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
2
-
3
- //#region src/utils/route-registry.ts
4
- /**
5
- * 创建路由注册表
6
- *
7
- * @example
8
- * ```typescript
9
- * // 定义扩展字段类型
10
- * interface MyRouteMeta {
11
- * webhook?: { eventKey: string }
12
- * permission?: string
13
- * }
14
- *
15
- * // 创建带类型的注册表
16
- * const registry = createRouteRegistry<MyRouteMeta>(server.getRoutes())
17
- *
18
- * // 类型安全的查询
19
- * const route = registry.get('POST', '/auth/signIn')
20
- * if (route?.webhook) {
21
- * console.log(route.webhook.eventKey)
22
- * }
23
- * ```
24
- */
25
- function createRouteRegistry(routes) {
26
- return new RouteRegistry(routes);
27
- }
28
- /**
29
- * 设置全局 registry(框架内部使用)
30
- * @internal
31
- */
32
- function setGlobalRegistry(registry) {
33
- globalRegistry = registry;
34
- }
35
- /**
36
- * 获取全局路由注册表
37
- *
38
- * @example
39
- * ```typescript
40
- * // 在任意文件中
41
- * import { getRouteRegistry } from 'vafast'
42
- *
43
- * const registry = getRouteRegistry()
44
- * const webhookRoutes = registry.filter('webhook')
45
- * ```
46
- *
47
- * @throws 如果 Server 尚未创建
48
- */
49
- function getRouteRegistry() {
50
- if (!globalRegistry) throw new Error("RouteRegistry not initialized. Make sure Server is created first.");
51
- return globalRegistry;
52
- }
53
- /**
54
- * 按 method + path 获取单个路由
55
- *
56
- * 便捷函数,无需先获取 registry
57
- *
58
- * @example
59
- * ```typescript
60
- * // 在中间件或接口中
61
- * import { getRoute } from 'vafast'
62
- *
63
- * const route = getRoute('POST', '/auth/signIn')
64
- * if (route?.webhook) {
65
- * console.log('This route has webhook:', route.webhook)
66
- * }
67
- * ```
68
- */
69
- function getRoute(method, path) {
70
- return getRouteRegistry().get(method, path);
71
- }
72
- /**
73
- * 获取所有路由
74
- *
75
- * @example
76
- * ```typescript
77
- * import { getAllRoutes } from 'vafast'
78
- *
79
- * const routes = getAllRoutes()
80
- * console.log(`Total ${routes.length} routes`)
81
- * ```
82
- */
83
- function getAllRoutes() {
84
- return getRouteRegistry().getAll();
85
- }
86
- /**
87
- * 筛选有特定字段的路由
88
- *
89
- * @example
90
- * ```typescript
91
- * import { filterRoutes } from 'vafast'
92
- *
93
- * // 获取所有配置了 webhook 的路由
94
- * const webhookRoutes = filterRoutes('webhook')
95
- * ```
96
- */
97
- function filterRoutes(field) {
98
- return getRouteRegistry().filter(field);
99
- }
100
- var RouteRegistry, globalRegistry;
101
- var init_route_registry = __esmMin((() => {
102
- RouteRegistry = class {
103
- /** 所有路由元信息 */
104
- routes = [];
105
- /** 路由映射表:METHOD:fullPath -> RouteMeta */
106
- routeMap = /* @__PURE__ */ new Map();
107
- /** 分类映射表:category -> RouteMeta[] */
108
- categoryMap = /* @__PURE__ */ new Map();
109
- constructor(routes) {
110
- this.buildRegistry(routes);
111
- }
112
- /**
113
- * 构建注册表
114
- */
115
- buildRegistry(routes) {
116
- for (const route of routes) {
117
- const meta = {
118
- method: route.method,
119
- path: route.path,
120
- fullPath: route.fullPath,
121
- name: route.name,
122
- description: route.description
123
- };
124
- for (const key of Object.keys(route)) if (![
125
- "method",
126
- "path",
127
- "fullPath",
128
- "name",
129
- "description",
130
- "handler",
131
- "middleware",
132
- "middlewareChain"
133
- ].includes(key)) meta[key] = route[key];
134
- this.routes.push(meta);
135
- this.routeMap.set(`${route.method}:${route.fullPath}`, meta);
136
- const category = this.extractCategory(route.fullPath);
137
- if (!this.categoryMap.has(category)) this.categoryMap.set(category, []);
138
- this.categoryMap.get(category).push(meta);
139
- }
140
- }
141
- /**
142
- * 提取分类(第一段路径)
143
- */
144
- extractCategory(path) {
145
- return path.split("/").filter(Boolean)[0] || "root";
146
- }
147
- /**
148
- * 获取所有路由元信息
149
- */
150
- getAll() {
151
- return [...this.routes];
152
- }
153
- /**
154
- * 按 method + path 查询路由
155
- */
156
- get(method, path) {
157
- return this.routeMap.get(`${method}:${path}`);
158
- }
159
- /**
160
- * 检查路由是否存在
161
- */
162
- has(method, path) {
163
- return this.routeMap.has(`${method}:${path}`);
164
- }
165
- /**
166
- * 按分类获取路由
167
- */
168
- getByCategory(category) {
169
- return this.categoryMap.get(category) || [];
170
- }
171
- /**
172
- * 获取所有分类
173
- */
174
- getCategories() {
175
- return Array.from(this.categoryMap.keys()).sort();
176
- }
177
- /**
178
- * 筛选有特定字段的路由
179
- *
180
- * @example
181
- * ```typescript
182
- * // 获取所有配置了 webhook 的路由
183
- * const webhookRoutes = registry.filter('webhook')
184
- * ```
185
- */
186
- filter(field) {
187
- return this.routes.filter((r) => field in r && r[field] !== void 0);
188
- }
189
- /**
190
- * 按条件筛选路由
191
- *
192
- * @example
193
- * ```typescript
194
- * // 获取所有 POST 请求
195
- * const postRoutes = registry.filterBy(r => r.method === 'POST')
196
- * ```
197
- */
198
- filterBy(predicate) {
199
- return this.routes.filter(predicate);
200
- }
201
- /**
202
- * 获取路由数量
203
- */
204
- get size() {
205
- return this.routes.length;
206
- }
207
- /**
208
- * 遍历所有路由
209
- */
210
- forEach(callback) {
211
- this.routes.forEach(callback);
212
- }
213
- /**
214
- * 映射所有路由
215
- */
216
- map(callback) {
217
- return this.routes.map(callback);
218
- }
219
- };
220
- globalRegistry = null;
221
- }));
222
-
223
- //#endregion
224
- export { getRoute as a, setGlobalRegistry as c, getAllRoutes as i, createRouteRegistry as n, getRouteRegistry as o, filterRoutes as r, init_route_registry as s, RouteRegistry as t };
225
- //# sourceMappingURL=route-registry-mcTG0M-t.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/router/index.ts"],"sourcesContent":["/**\n * 路由模块导出\n */\n\n// Radix Tree 路由器\nexport { RadixRouter } from \"./radix-tree\";\n\n// 路由工具函数\nexport { flattenNestedRoutes, normalizePath } from \"../router\";\n"],"mappings":";;;;iBAK2C;aAGoB"}
@@ -1 +0,0 @@
1
- export { };
@@ -1,137 +0,0 @@
1
- import { t as __esmMin } from "./chunk-DW4-Jl94.mjs";
2
- import { n as init_router, t as flattenNestedRoutes } from "./router-B9HUUCkR.mjs";
3
- import { i as json, r as init_response } from "./response-DXg4i_yh.mjs";
4
- import { n as composeMiddleware, r as init_middleware } from "./middleware-Byp3Hjae.mjs";
5
- import { n as init_base_server, t as BaseServer } from "./base-server-CSkyjEaY.mjs";
6
- import { n as init_radix_tree, t as RadixRouter } from "./radix-tree-D0XYaJKb.mjs";
7
- import { c as setGlobalRegistry, s as init_route_registry, t as RouteRegistry } from "./route-registry-mcTG0M-t.mjs";
8
-
9
- //#region src/server/server.ts
10
- var Server;
11
- var init_server = __esmMin((() => {
12
- init_router();
13
- init_middleware();
14
- init_response();
15
- init_base_server();
16
- init_radix_tree();
17
- init_route_registry();
18
- Server = class extends BaseServer {
19
- router;
20
- routes;
21
- /** 是否已预编译 */
22
- isCompiled = false;
23
- /** 预编译时的全局中间件数量 */
24
- compiledWithMiddlewareCount = 0;
25
- constructor(routes = []) {
26
- super();
27
- this.router = new RadixRouter();
28
- this.routes = [];
29
- this.router.setCompiler((middleware, handler) => composeMiddleware(middleware, handler));
30
- if (routes.length > 0) this.registerRoutes([...routes]);
31
- }
32
- /**
33
- * 预编译所有路由处理链
34
- * 在添加所有路由和全局中间件后调用,可提升运行时性能
35
- */
36
- compile() {
37
- this.router.precompileAll(this.globalMiddleware);
38
- this.isCompiled = true;
39
- this.compiledWithMiddlewareCount = this.globalMiddleware.length;
40
- return this;
41
- }
42
- registerRoutes(routes) {
43
- const flattened = flattenNestedRoutes(routes);
44
- this.routes.push(...flattened);
45
- for (const route of flattened) this.router.register(route.method, route.fullPath, route.handler, route.middlewareChain || []);
46
- this.detectRouteConflicts(flattened);
47
- this.logFlattenedRoutes(flattened);
48
- if (this.globalMiddleware.length === 0 && !this.isCompiled) this.compile();
49
- setGlobalRegistry(new RouteRegistry(this.routes));
50
- }
51
- /** 快速提取 pathname */
52
- extractPathname(url) {
53
- let start = url.indexOf("://");
54
- start = start === -1 ? 0 : start + 3;
55
- const pathStart = url.indexOf("/", start);
56
- if (pathStart === -1) return "/";
57
- let end = url.indexOf("?", pathStart);
58
- if (end === -1) end = url.indexOf("#", pathStart);
59
- if (end === -1) end = url.length;
60
- return url.substring(pathStart, end) || "/";
61
- }
62
- /** 生成 404/405 响应 */
63
- createErrorResponse(method, pathname) {
64
- const allowedMethods = this.router.getAllowedMethods(pathname);
65
- if (allowedMethods.length > 0) return json({
66
- success: false,
67
- error: "Method Not Allowed",
68
- message: `Method ${method} not allowed for this endpoint`,
69
- allowedMethods
70
- }, 405, { Allow: allowedMethods.join(", ") });
71
- return json({
72
- success: false,
73
- error: "Not Found"
74
- }, 404);
75
- }
76
- /** 处理请求 */
77
- fetch = async (req) => {
78
- const pathname = this.extractPathname(req.url);
79
- const method = req.method;
80
- const match = this.router.match(method, pathname);
81
- if (match) {
82
- req.params = match.params;
83
- if (match.compiled && this.globalMiddleware.length === this.compiledWithMiddlewareCount) return match.compiled(req);
84
- return composeMiddleware([...this.globalMiddleware, ...match.middleware], match.handler)(req);
85
- }
86
- if (method === "OPTIONS") {
87
- const allowedMethods = this.router.getAllowedMethods(pathname);
88
- if (allowedMethods.length > 0) {
89
- const routeMiddleware = this.router.match(allowedMethods[0], pathname)?.middleware || [];
90
- const allMiddleware = [...this.globalMiddleware, ...routeMiddleware];
91
- const optionsHandler = () => new Response(null, {
92
- status: 204,
93
- headers: { Allow: allowedMethods.join(", ") }
94
- });
95
- return composeMiddleware(allMiddleware, optionsHandler)(req);
96
- }
97
- }
98
- if (this.globalMiddleware.length > 0) return composeMiddleware(this.globalMiddleware, () => this.createErrorResponse(method, pathname))(req);
99
- return this.createErrorResponse(method, pathname);
100
- };
101
- addRoute(route) {
102
- const flattenedRoute = {
103
- ...route,
104
- fullPath: route.path,
105
- middlewareChain: route.middleware || []
106
- };
107
- this.routes.push(flattenedRoute);
108
- this.router.register(route.method, route.path, route.handler, route.middleware || []);
109
- }
110
- addRoutes(routes) {
111
- this.registerRoutes([...routes]);
112
- }
113
- getRoutes() {
114
- return this.router.getRoutes();
115
- }
116
- /**
117
- * 获取完整的路由元信息(不含 handler 和 middleware)
118
- *
119
- * 用于 API 文档生成、Webhook 事件注册、权限检查等场景
120
- *
121
- * @example
122
- * ```typescript
123
- * const routes = server.getRoutesWithMeta()
124
- * for (const route of routes) {
125
- * console.log(route.fullPath, route.name, route.description)
126
- * }
127
- * ```
128
- */
129
- getRoutesWithMeta() {
130
- return this.routes;
131
- }
132
- };
133
- }));
134
-
135
- //#endregion
136
- export { init_server as n, Server as t };
137
- //# sourceMappingURL=server-BmPKs8oM.mjs.map
@@ -1,88 +0,0 @@
1
- import { n as __exportAll, t as __esmMin } from "./chunk-DW4-Jl94.mjs";
2
- import { n as init_base_server, t as BaseServer } from "./base-server-CSkyjEaY.mjs";
3
- import { n as init_server$1, t as Server } from "./server-BmPKs8oM.mjs";
4
- import { n as init_component_server, t as ComponentServer } from "./component-server-DAbIyIPI.mjs";
5
-
6
- //#region src/server/server-factory.ts
7
- var ServerFactory;
8
- var init_server_factory = __esmMin((() => {
9
- init_server();
10
- init_component_server();
11
- ServerFactory = class {
12
- servers = /* @__PURE__ */ new Map();
13
- /**
14
- * 创建标准REST API服务器
15
- */
16
- createRestServer(routes) {
17
- const server = new Server(routes);
18
- this.servers.set("rest", server);
19
- return server;
20
- }
21
- /**
22
- * 创建组件服务器
23
- */
24
- createComponentServer(routes) {
25
- const server = new ComponentServer(routes);
26
- this.servers.set("component", server);
27
- return server;
28
- }
29
- /**
30
- * 获取指定类型的服务器
31
- */
32
- getServer(type) {
33
- return this.servers.get(type);
34
- }
35
- /**
36
- * 获取所有服务器
37
- */
38
- getAllServers() {
39
- return this.servers;
40
- }
41
- /**
42
- * 移除指定类型的服务器
43
- */
44
- removeServer(type) {
45
- return this.servers.delete(type);
46
- }
47
- /**
48
- * 清除所有服务器
49
- */
50
- clearServers() {
51
- this.servers.clear();
52
- }
53
- /**
54
- * 获取服务器状态信息
55
- */
56
- getServerStatus() {
57
- const status = {};
58
- for (const [name, server] of this.servers) if (server instanceof Server) status[name] = {
59
- type: "REST API",
60
- routes: server.routes?.length || 0
61
- };
62
- else if (server instanceof ComponentServer) status[name] = {
63
- type: "Component",
64
- routes: server.routes?.length || 0
65
- };
66
- return status;
67
- }
68
- };
69
- }));
70
-
71
- //#endregion
72
- //#region src/server/index.ts
73
- var server_exports = /* @__PURE__ */ __exportAll({
74
- BaseServer: () => BaseServer,
75
- ComponentServer: () => ComponentServer,
76
- Server: () => Server,
77
- ServerFactory: () => ServerFactory
78
- });
79
- var init_server = __esmMin((() => {
80
- init_server$1();
81
- init_component_server();
82
- init_server_factory();
83
- init_base_server();
84
- }));
85
-
86
- //#endregion
87
- export { init_server_factory as i, server_exports as n, ServerFactory as r, init_server as t };
88
- //# sourceMappingURL=server-Cbd3Ia51.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server-Cbd3Ia51.mjs","names":[],"sources":["../src/server/server-factory.ts","../src/server/index.ts"],"sourcesContent":["import type { Route, NestedRoute } from \"../types\";\nimport type {\n ComponentRoute,\n NestedComponentRoute,\n} from \"../types/component-route\";\nimport { Server } from \"../server\";\nimport { ComponentServer } from \"./component-server\";\n\n/**\n * 服务器工厂类\n * 用于创建和管理不同类型的服务器\n */\nexport class ServerFactory {\n private servers: Map<string, Server | ComponentServer> = new Map();\n\n /**\n * 创建标准REST API服务器\n */\n createRestServer(routes: (Route | NestedRoute)[]): Server {\n const server = new Server(routes);\n this.servers.set(\"rest\", server);\n return server;\n }\n\n /**\n * 创建组件服务器\n */\n createComponentServer(\n routes: (ComponentRoute | NestedComponentRoute)[],\n ): ComponentServer {\n const server = new ComponentServer(routes);\n this.servers.set(\"component\", server);\n return server;\n }\n\n /**\n * 获取指定类型的服务器\n */\n getServer(type: \"rest\" | \"component\"): Server | ComponentServer | undefined {\n return this.servers.get(type);\n }\n\n /**\n * 获取所有服务器\n */\n getAllServers(): Map<string, Server | ComponentServer> {\n return this.servers;\n }\n\n /**\n * 移除指定类型的服务器\n */\n removeServer(type: string): boolean {\n return this.servers.delete(type);\n }\n\n /**\n * 清除所有服务器\n */\n clearServers(): void {\n this.servers.clear();\n }\n\n /**\n * 获取服务器状态信息\n */\n getServerStatus(): Record<string, { type: string; routes: number }> {\n const status: Record<string, { type: string; routes: number }> = {};\n\n for (const [name, server] of this.servers) {\n if (server instanceof Server) {\n status[name] = {\n type: \"REST API\",\n routes: (server as any).routes?.length || 0,\n };\n } else if (server instanceof ComponentServer) {\n status[name] = {\n type: \"Component\",\n routes: (server as any).routes?.length || 0,\n };\n }\n }\n\n return status;\n }\n}\n","/**\n * 服务器模块导出\n */\n\n// 主服务器类\nexport { Server } from \"./server\";\n\n// 组件服务器 (SSR)\nexport { ComponentServer } from \"./component-server\";\n\n// 服务器工厂\nexport { ServerFactory } from \"./server-factory\";\n\n// 基类 (仅用于扩展)\nexport { BaseServer } from \"./base-server\";\n"],"mappings":";;;;;;;;cAKmC;wBACkB;CAMxC,gBAAb,MAA2B;EACzB,AAAQ,0BAAiD,IAAI,KAAK;;;;EAKlE,iBAAiB,QAAyC;GACxD,MAAM,SAAS,IAAI,OAAO,OAAO;AACjC,QAAK,QAAQ,IAAI,QAAQ,OAAO;AAChC,UAAO;;;;;EAMT,sBACE,QACiB;GACjB,MAAM,SAAS,IAAI,gBAAgB,OAAO;AAC1C,QAAK,QAAQ,IAAI,aAAa,OAAO;AACrC,UAAO;;;;;EAMT,UAAU,MAAkE;AAC1E,UAAO,KAAK,QAAQ,IAAI,KAAK;;;;;EAM/B,gBAAuD;AACrD,UAAO,KAAK;;;;;EAMd,aAAa,MAAuB;AAClC,UAAO,KAAK,QAAQ,OAAO,KAAK;;;;;EAMlC,eAAqB;AACnB,QAAK,QAAQ,OAAO;;;;;EAMtB,kBAAoE;GAClE,MAAM,SAA2D,EAAE;AAEnE,QAAK,MAAM,CAAC,MAAM,WAAW,KAAK,QAChC,KAAI,kBAAkB,OACpB,QAAO,QAAQ;IACb,MAAM;IACN,QAAS,OAAe,QAAQ,UAAU;IAC3C;YACQ,kBAAkB,gBAC3B,QAAO,QAAQ;IACb,MAAM;IACN,QAAS,OAAe,QAAQ,UAAU;IAC3C;AAIL,UAAO;;;;;;;;;;;;;;gBC9EuB;wBAGmB;sBAGJ;mBAGN"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/utils/index.ts"],"sourcesContent":["/**\n * 工具函数模块导出\n */\n\n// 处理器工厂\nexport {\n createHandler,\n createHandlerWithExtra,\n simpleHandler,\n type InferableHandler,\n} from \"./create-handler\";\n\n// 请求解析\nexport {\n parseBody,\n parseQuery,\n parseQueryFast,\n parseHeaders,\n getHeader,\n parseCookies,\n parseCookiesFast,\n getCookie,\n} from \"./parsers\";\n\n// 响应工具\nexport { json, text, html, redirect, empty, stream } from \"./response\";\n\n// Go 风格错误处理\nexport { goAwait } from \"./go-await\";\n\n// Base64 编码\nexport { base64urlEncode, base64urlDecode } from \"./base64url\";\n\n// 请求上下文\nexport { setLocals, getLocals } from \"./handle\";\n\n// 请求验证\nexport {\n parseRequest,\n validateRequest,\n parseAndValidateRequest,\n createRequestValidator,\n} from \"./request-validator\";\n\n// HTML 渲染 (SSR)\nexport { HtmlRenderer } from \"./html-renderer\";\n\n// 依赖管理\nexport { DependencyManager } from \"./dependency-manager\";\n\n// 验证器(JIT 编译 + Format 支持)\nexport {\n validateSchema,\n validateSchemaOrThrow,\n validateFast,\n validateAllSchemas,\n precompileSchemas,\n createValidator,\n getValidatorCacheStats,\n type SchemaConfig,\n type ValidationError,\n type ValidationResult,\n} from \"./validators/validators\";\n\n// Format 验证器(内置常用 format)\nexport {\n registerFormats,\n registerFormat,\n hasFormat,\n Patterns,\n} from \"./formats\";\n\n// SSE (Server-Sent Events) 支持\nexport {\n createSSEHandler,\n type SSEEvent,\n type SSEHandler,\n type SSEMarker,\n} from \"./sse\";\n\n// 路由注册表\nexport {\n RouteRegistry,\n createRouteRegistry,\n // 全局访问函数(Server 创建后可在任意位置使用)\n getRouteRegistry,\n getRoute,\n getAllRoutes,\n filterRoutes,\n type RouteMeta,\n} from \"./route-registry\";\n"],"mappings":";;;;;;;;;;;;;;;eAyBuE;oBAoBxB;yBAGU;qBA0C/B"}