vafast 0.3.2 → 0.3.4

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 (136) hide show
  1. package/dist/auth/token.d.ts +13 -11
  2. package/dist/auth/token.js +118 -111
  3. package/dist/auth/token.js.map +1 -0
  4. package/dist/defineRoute.d.ts +5 -2
  5. package/dist/defineRoute.js +7 -2
  6. package/dist/defineRoute.js.map +1 -0
  7. package/dist/index.d.ts +30 -14
  8. package/dist/index.js +2247 -15
  9. package/dist/index.js.map +1 -0
  10. package/dist/middleware/auth.d.ts +8 -6
  11. package/dist/middleware/auth.js +198 -99
  12. package/dist/middleware/auth.js.map +1 -0
  13. package/dist/middleware/authMiddleware.d.ts +5 -2
  14. package/dist/middleware/authMiddleware.js +55 -11
  15. package/dist/middleware/authMiddleware.js.map +1 -0
  16. package/dist/middleware/component-renderer.d.ts +4 -2
  17. package/dist/middleware/component-renderer.js +87 -80
  18. package/dist/middleware/component-renderer.js.map +1 -0
  19. package/dist/middleware/component-router.d.ts +8 -3
  20. package/dist/middleware/component-router.js +33 -39
  21. package/dist/middleware/component-router.js.map +1 -0
  22. package/dist/middleware/cors.d.ts +6 -3
  23. package/dist/middleware/cors.js +42 -29
  24. package/dist/middleware/cors.js.map +1 -0
  25. package/dist/middleware/rateLimit.d.ts +5 -3
  26. package/dist/middleware/rateLimit.js +45 -29
  27. package/dist/middleware/rateLimit.js.map +1 -0
  28. package/dist/middleware.d.ts +6 -3
  29. package/dist/middleware.js +97 -51
  30. package/dist/middleware.js.map +1 -0
  31. package/dist/monitoring/index.d.ts +11 -4
  32. package/dist/monitoring/index.js +1299 -17
  33. package/dist/monitoring/index.js.map +1 -0
  34. package/dist/monitoring/native-monitor.d.ts +12 -6
  35. package/dist/monitoring/native-monitor.js +1258 -161
  36. package/dist/monitoring/native-monitor.js.map +1 -0
  37. package/dist/monitoring/types.d.ts +8 -6
  38. package/dist/monitoring/types.js +1 -1
  39. package/dist/monitoring/types.js.map +1 -0
  40. package/dist/node-server/index.d.ts +4 -22
  41. package/dist/node-server/index.js +254 -21
  42. package/dist/node-server/index.js.map +1 -0
  43. package/dist/node-server/request.d.ts +6 -2
  44. package/dist/node-server/request.js +102 -134
  45. package/dist/node-server/request.js.map +1 -0
  46. package/dist/node-server/response.d.ts +7 -3
  47. package/dist/node-server/response.js +67 -89
  48. package/dist/node-server/response.js.map +1 -0
  49. package/dist/node-server/serve.d.ts +11 -7
  50. package/dist/node-server/serve.js +231 -82
  51. package/dist/node-server/serve.js.map +1 -0
  52. package/dist/router/index.d.ts +3 -5
  53. package/dist/router/index.js +228 -7
  54. package/dist/router/index.js.map +1 -0
  55. package/dist/router/radix-tree.d.ts +7 -4
  56. package/dist/router/radix-tree.js +186 -218
  57. package/dist/router/radix-tree.js.map +1 -0
  58. package/dist/router.d.ts +7 -3
  59. package/dist/router.js +37 -83
  60. package/dist/router.js.map +1 -0
  61. package/dist/serve.d.ts +2 -12
  62. package/dist/serve.js +237 -11
  63. package/dist/serve.js.map +1 -0
  64. package/dist/server/base-server.d.ts +5 -2
  65. package/dist/server/base-server.js +124 -135
  66. package/dist/server/base-server.js.map +1 -0
  67. package/dist/server/component-server.d.ts +9 -4
  68. package/dist/server/component-server.js +481 -139
  69. package/dist/server/component-server.js.map +1 -0
  70. package/dist/server/index.d.ts +8 -7
  71. package/dist/server/index.js +985 -11
  72. package/dist/server/index.js.map +1 -0
  73. package/dist/server/server-factory.d.ts +11 -5
  74. package/dist/server/server-factory.js +979 -67
  75. package/dist/server/server-factory.js.map +1 -0
  76. package/dist/server/server.d.ts +7 -3
  77. package/dist/server/server.js +553 -112
  78. package/dist/server/server.js.map +1 -0
  79. package/dist/types/component-route.d.ts +8 -4
  80. package/dist/types/component-route.js +1 -1
  81. package/dist/types/component-route.js.map +1 -0
  82. package/dist/types/index.d.ts +5 -5
  83. package/dist/types/index.js +21 -4
  84. package/dist/types/index.js.map +1 -0
  85. package/dist/types/route.d.ts +13 -10
  86. package/dist/types/route.js +10 -9
  87. package/dist/types/route.js.map +1 -0
  88. package/dist/types/schema.d.ts +11 -7
  89. package/dist/types/schema.js +1 -1
  90. package/dist/types/schema.js.map +1 -0
  91. package/dist/types/types.d.ts +11 -9
  92. package/dist/types/types.js +1 -1
  93. package/dist/types/types.js.map +1 -0
  94. package/dist/utils/base64url.d.ts +4 -2
  95. package/dist/utils/base64url.js +12 -9
  96. package/dist/utils/base64url.js.map +1 -0
  97. package/dist/utils/create-handler.d.ts +11 -7
  98. package/dist/utils/create-handler.js +393 -217
  99. package/dist/utils/create-handler.js.map +1 -0
  100. package/dist/utils/dependency-manager.d.ts +3 -1
  101. package/dist/utils/dependency-manager.js +67 -69
  102. package/dist/utils/dependency-manager.js.map +1 -0
  103. package/dist/utils/go-await.d.ts +3 -1
  104. package/dist/utils/go-await.js +8 -22
  105. package/dist/utils/go-await.js.map +1 -0
  106. package/dist/utils/handle.d.ts +6 -4
  107. package/dist/utils/handle.js +44 -25
  108. package/dist/utils/handle.js.map +1 -0
  109. package/dist/utils/html-renderer.d.ts +3 -1
  110. package/dist/utils/html-renderer.js +25 -24
  111. package/dist/utils/html-renderer.js.map +1 -0
  112. package/dist/utils/index.d.ts +13 -13
  113. package/dist/utils/index.js +832 -21
  114. package/dist/utils/index.js.map +1 -0
  115. package/dist/utils/parsers.d.ts +15 -13
  116. package/dist/utils/parsers.js +138 -188
  117. package/dist/utils/parsers.js.map +1 -0
  118. package/dist/utils/path-matcher.d.ts +3 -1
  119. package/dist/utils/path-matcher.js +68 -78
  120. package/dist/utils/path-matcher.js.map +1 -0
  121. package/dist/utils/request-validator.d.ts +13 -10
  122. package/dist/utils/request-validator.js +234 -84
  123. package/dist/utils/request-validator.js.map +1 -0
  124. package/dist/utils/response.d.ts +9 -7
  125. package/dist/utils/response.js +93 -102
  126. package/dist/utils/response.js.map +1 -0
  127. package/dist/utils/validators/schema-validator.d.ts +13 -9
  128. package/dist/utils/validators/schema-validator.js +228 -209
  129. package/dist/utils/validators/schema-validator.js.map +1 -0
  130. package/dist/utils/validators/schema-validators-ultra.d.ts +15 -12
  131. package/dist/utils/validators/schema-validators-ultra.js +233 -256
  132. package/dist/utils/validators/schema-validators-ultra.js.map +1 -0
  133. package/dist/utils/validators/validators.d.ts +15 -12
  134. package/dist/utils/validators/validators.js +81 -122
  135. package/dist/utils/validators/validators.js.map +1 -0
  136. package/package.json +5 -4
@@ -1,234 +1,410 @@
1
- /**
2
- * 类型安全的路由处理器工厂
3
- *
4
- * 非柯里化设计,API 更简洁
5
- *
6
- * @author Framework Team
7
- * @version 3.0.0
8
- * @license MIT
9
- */
10
- import { parseBody, parseQuery, parseHeaders, parseCookies } from "./parsers";
11
- import { goAwait } from "./go-await";
12
- import { json } from "./response";
13
- import { validateAllSchemasUltra, precompileSchemasUltra, } from "./validators/schema-validators-ultra";
14
- /**
15
- * 自动响应转换
16
- * 将各种返回值类型转换为 Response 对象
17
- */
18
- function autoResponse(result) {
19
- // 已经是 Response
20
- if (result instanceof Response) {
21
- return result;
22
- }
23
- // null/undefined -> 204
24
- if (result === null || result === undefined) {
25
- return new Response(null, { status: 204 });
1
+ // src/utils/parsers.ts
2
+ import qs from "qs";
3
+ import cookie from "cookie";
4
+ async function parseBody(req) {
5
+ const contentType = req.headers.get("content-type") || "";
6
+ if (contentType.includes("application/json")) {
7
+ return await req.json();
8
+ }
9
+ if (contentType.includes("application/x-www-form-urlencoded")) {
10
+ const text = await req.text();
11
+ return Object.fromEntries(new URLSearchParams(text));
12
+ }
13
+ return await req.text();
14
+ }
15
+ function extractQueryString(url) {
16
+ const qIndex = url.indexOf("?");
17
+ if (qIndex === -1) return "";
18
+ const hashIndex = url.indexOf("#", qIndex);
19
+ return hashIndex === -1 ? url.substring(qIndex + 1) : url.substring(qIndex + 1, hashIndex);
20
+ }
21
+ function parseQuery(req) {
22
+ const queryString = extractQueryString(req.url);
23
+ if (!queryString) return {};
24
+ return qs.parse(queryString);
25
+ }
26
+ function parseHeaders(req) {
27
+ const headers = /* @__PURE__ */ Object.create(null);
28
+ req.headers.forEach((value, key) => {
29
+ headers[key] = value;
30
+ });
31
+ return headers;
32
+ }
33
+ function parseCookies(req) {
34
+ const cookieHeader = req.headers.get("cookie");
35
+ if (!cookieHeader) return {};
36
+ try {
37
+ const parsed = cookie.parse(cookieHeader);
38
+ const result = {};
39
+ for (const [key, value] of Object.entries(parsed)) {
40
+ if (value !== void 0 && value !== null) {
41
+ result[key] = value;
42
+ }
26
43
  }
27
- // 字符串 -> text/plain
28
- if (typeof result === "string") {
29
- return new Response(result, {
30
- headers: { "Content-Type": "text/plain; charset=utf-8" },
31
- });
44
+ return result;
45
+ } catch {
46
+ return {};
47
+ }
48
+ }
49
+
50
+ // src/utils/go-await.ts
51
+ function goAwait(promise) {
52
+ return promise.then((data) => [null, data]).catch((err) => [err instanceof Error ? err : new Error(String(err)), void 0]);
53
+ }
54
+
55
+ // src/utils/response.ts
56
+ function json(data, status = 200, headers = {}) {
57
+ const body = JSON.stringify(data);
58
+ if (Object.keys(headers).length === 0) {
59
+ return new Response(body, {
60
+ status,
61
+ headers: { "Content-Type": "application/json" }
62
+ });
63
+ }
64
+ const h = new Headers({
65
+ "Content-Type": "application/json",
66
+ ...headers
67
+ });
68
+ return new Response(body, {
69
+ status,
70
+ headers: h
71
+ });
72
+ }
73
+
74
+ // src/utils/validators/schema-validators-ultra.ts
75
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
76
+ var SCHEMA_FLAGS = {
77
+ BODY: 1 << 0,
78
+ // 1
79
+ QUERY: 1 << 1,
80
+ // 2
81
+ PARAMS: 1 << 2,
82
+ // 4
83
+ HEADERS: 1 << 3,
84
+ // 8
85
+ COOKIES: 1 << 4
86
+ // 16
87
+ };
88
+ var ultraSchemaCache = /* @__PURE__ */ new Map();
89
+ var schemaCacheHits = /* @__PURE__ */ new Map();
90
+ var errorPool = [];
91
+ var ERROR_POOL_SIZE = 200;
92
+ var errorMessagePool = /* @__PURE__ */ new Map();
93
+ var commonMessages = [
94
+ "\u8BF7\u6C42\u4F53\u9A8C\u8BC1\u5931\u8D25",
95
+ "Query\u53C2\u6570\u9A8C\u8BC1\u5931\u8D25",
96
+ "\u8DEF\u5F84\u53C2\u6570\u9A8C\u8BC1\u5931\u8D25",
97
+ "\u8BF7\u6C42\u5934\u9A8C\u8BC1\u5931\u8D25",
98
+ "Cookie\u9A8C\u8BC1\u5931\u8D25",
99
+ "\u7C7B\u578B\u9A8C\u8BC1\u5931\u8D25",
100
+ "Schema\u7F16\u8BD1\u5931\u8D25",
101
+ "\u672A\u77E5\u9519\u8BEF"
102
+ ];
103
+ commonMessages.forEach((msg) => errorMessagePool.set(msg, msg));
104
+ for (let i = 0; i < ERROR_POOL_SIZE; i++) {
105
+ errorPool.push(new Error());
106
+ }
107
+ var errorPoolIndex = 0;
108
+ function getErrorFromPool(message) {
109
+ const error = errorPool[errorPoolIndex];
110
+ error.message = message;
111
+ errorPoolIndex = (errorPoolIndex + 1) % ERROR_POOL_SIZE;
112
+ return error;
113
+ }
114
+ function getPooledString(key) {
115
+ let pooled = errorMessagePool.get(key);
116
+ if (!pooled) {
117
+ pooled = key;
118
+ errorMessagePool.set(key, key);
119
+ }
120
+ return pooled;
121
+ }
122
+ function getUltraSchemaCompiler(schema) {
123
+ let compiler = ultraSchemaCache.get(schema);
124
+ if (compiler) {
125
+ schemaCacheHits.set(schema, (schemaCacheHits.get(schema) || 0) + 1);
126
+ return compiler;
127
+ }
128
+ try {
129
+ compiler = TypeCompiler.Compile(schema);
130
+ ultraSchemaCache.set(schema, compiler);
131
+ return compiler;
132
+ } catch (error) {
133
+ return null;
134
+ }
135
+ }
136
+ function getSchemaFlags(config) {
137
+ let flags = 0;
138
+ if (config.body) flags |= SCHEMA_FLAGS.BODY;
139
+ if (config.query) flags |= SCHEMA_FLAGS.QUERY;
140
+ if (config.params) flags |= SCHEMA_FLAGS.PARAMS;
141
+ if (config.headers) flags |= SCHEMA_FLAGS.HEADERS;
142
+ if (config.cookies) flags |= SCHEMA_FLAGS.COOKIES;
143
+ return flags;
144
+ }
145
+ function validateSchemaUltra(schema, data, context) {
146
+ if (!schema) return data;
147
+ try {
148
+ let compiler = ultraSchemaCache.get(schema);
149
+ if (!compiler) {
150
+ try {
151
+ compiler = TypeCompiler.Compile(schema);
152
+ ultraSchemaCache.set(schema, compiler);
153
+ } catch (error) {
154
+ const message = getPooledString(`${context}\u9A8C\u8BC1\u5931\u8D25: Schema\u7F16\u8BD1\u5931\u8D25`);
155
+ throw getErrorFromPool(message);
156
+ }
32
157
  }
33
- // 数字/布尔 -> text/plain
34
- if (typeof result === "number" || typeof result === "boolean") {
35
- return new Response(String(result), {
36
- headers: { "Content-Type": "text/plain; charset=utf-8" },
37
- });
158
+ const result = compiler.Check(data);
159
+ if (!result) {
160
+ const message = getPooledString(`${context}\u9A8C\u8BC1\u5931\u8D25`);
161
+ throw getErrorFromPool(message);
38
162
  }
39
- // 对象 -> 检查是否是 { data, status, headers } 格式
40
- if (typeof result === "object") {
41
- const obj = result;
42
- if ("data" in obj && ("status" in obj || "headers" in obj)) {
43
- const { data, status = 200, headers = {} } = obj;
44
- if (data === null || data === undefined) {
45
- return new Response(null, {
46
- status: status === 200 ? 204 : status,
47
- headers: headers,
48
- });
49
- }
50
- if (typeof data === "string" ||
51
- typeof data === "number" ||
52
- typeof data === "boolean") {
53
- return new Response(String(data), {
54
- status: status,
55
- headers: {
56
- "Content-Type": "text/plain; charset=utf-8",
57
- ...headers,
58
- },
59
- });
60
- }
61
- return json(data, status, headers);
62
- }
63
- // 普通对象 -> JSON
64
- return json(result);
163
+ return data;
164
+ } catch (error) {
165
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
166
+ throw error;
65
167
  }
66
- // 其他类型 -> 204
168
+ const message = getPooledString(
169
+ `${context}\u9A8C\u8BC1\u5931\u8D25: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`
170
+ );
171
+ throw getErrorFromPool(message);
172
+ }
173
+ }
174
+ function validateAllSchemasUltra(config, data) {
175
+ const flags = getSchemaFlags(config);
176
+ if (flags & SCHEMA_FLAGS.BODY) {
177
+ validateSchemaUltra(config.body, data.body, "\u8BF7\u6C42\u4F53");
178
+ }
179
+ if (flags & SCHEMA_FLAGS.QUERY) {
180
+ validateSchemaUltra(config.query, data.query, "Query\u53C2\u6570");
181
+ }
182
+ if (flags & SCHEMA_FLAGS.PARAMS) {
183
+ validateSchemaUltra(config.params, data.params, "\u8DEF\u5F84\u53C2\u6570");
184
+ }
185
+ if (flags & SCHEMA_FLAGS.HEADERS) {
186
+ validateSchemaUltra(config.headers, data.headers, "\u8BF7\u6C42\u5934");
187
+ }
188
+ if (flags & SCHEMA_FLAGS.COOKIES) {
189
+ validateSchemaUltra(config.cookies, data.cookies, "Cookie");
190
+ }
191
+ return data;
192
+ }
193
+ function precompileSchemasUltra(config) {
194
+ const flags = getSchemaFlags(config);
195
+ if (flags & SCHEMA_FLAGS.BODY && config.body) {
196
+ getUltraSchemaCompiler(config.body);
197
+ }
198
+ if (flags & SCHEMA_FLAGS.QUERY && config.query) {
199
+ getUltraSchemaCompiler(config.query);
200
+ }
201
+ if (flags & SCHEMA_FLAGS.PARAMS && config.params) {
202
+ getUltraSchemaCompiler(config.params);
203
+ }
204
+ if (flags & SCHEMA_FLAGS.HEADERS && config.headers) {
205
+ getUltraSchemaCompiler(config.headers);
206
+ }
207
+ if (flags & SCHEMA_FLAGS.COOKIES && config.cookies) {
208
+ getUltraSchemaCompiler(config.cookies);
209
+ }
210
+ }
211
+
212
+ // src/utils/create-handler.ts
213
+ function autoResponse(result) {
214
+ if (result instanceof Response) {
215
+ return result;
216
+ }
217
+ if (result === null || result === void 0) {
67
218
  return new Response(null, { status: 204 });
219
+ }
220
+ if (typeof result === "string") {
221
+ return new Response(result, {
222
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
223
+ });
224
+ }
225
+ if (typeof result === "number" || typeof result === "boolean") {
226
+ return new Response(String(result), {
227
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
228
+ });
229
+ }
230
+ if (typeof result === "object") {
231
+ const obj = result;
232
+ if ("data" in obj && ("status" in obj || "headers" in obj)) {
233
+ const { data, status = 200, headers = {} } = obj;
234
+ if (data === null || data === void 0) {
235
+ return new Response(null, {
236
+ status: status === 200 ? 204 : status,
237
+ headers
238
+ });
239
+ }
240
+ if (typeof data === "string" || typeof data === "number" || typeof data === "boolean") {
241
+ return new Response(String(data), {
242
+ status,
243
+ headers: {
244
+ "Content-Type": "text/plain; charset=utf-8",
245
+ ...headers
246
+ }
247
+ });
248
+ }
249
+ return json(data, status, headers);
250
+ }
251
+ return json(result);
252
+ }
253
+ return new Response(null, { status: 204 });
68
254
  }
69
- /**
70
- * 处理验证错误
71
- */
72
255
  function handleValidationError(error) {
73
- return json({
74
- success: false,
75
- error: "Validation Error",
76
- message: error.message,
77
- timestamp: new Date().toISOString(),
78
- }, 400);
256
+ return json(
257
+ {
258
+ success: false,
259
+ error: "Validation Error",
260
+ message: error.message,
261
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
262
+ },
263
+ 400
264
+ );
79
265
  }
80
- /**
81
- * 处理内部错误
82
- */
83
266
  function handleInternalError(error) {
84
- return json({
85
- success: false,
86
- error: "Internal Error",
87
- message: error instanceof Error ? error.message : "未知错误",
88
- }, 500);
267
+ return json(
268
+ {
269
+ success: false,
270
+ error: "Internal Error",
271
+ message: error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"
272
+ },
273
+ 500
274
+ );
89
275
  }
90
- /**
91
- * 判断是否为 handler 函数
92
- */
93
276
  function isHandler(value) {
94
- return typeof value === "function";
95
- }
96
- // 实现
97
- export function createHandler(schemaOrHandler, maybeHandler) {
98
- // 判断调用方式
99
- const hasSchema = !isHandler(schemaOrHandler);
100
- const schema = hasSchema ? schemaOrHandler : {};
101
- const handler = hasSchema
102
- ? maybeHandler
103
- : schemaOrHandler;
104
- // 预编译 schema
105
- if (schema.body ||
106
- schema.query ||
107
- schema.params ||
108
- schema.headers ||
109
- schema.cookies) {
110
- precompileSchemasUltra(schema);
277
+ return typeof value === "function";
278
+ }
279
+ function createHandler(schemaOrHandler, maybeHandler) {
280
+ const hasSchema = !isHandler(schemaOrHandler);
281
+ const schema = hasSchema ? schemaOrHandler : {};
282
+ const handler = hasSchema ? maybeHandler : schemaOrHandler;
283
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
284
+ precompileSchemasUltra(schema);
285
+ }
286
+ return async (req) => {
287
+ try {
288
+ const query = parseQuery(req);
289
+ const headers = parseHeaders(req);
290
+ const cookies = parseCookies(req);
291
+ const params = req.params || {};
292
+ let body = void 0;
293
+ if (req.method !== "GET" && req.method !== "HEAD") {
294
+ const [, parsedBody] = await goAwait(parseBody(req));
295
+ body = parsedBody;
296
+ }
297
+ const data = { body, query, params, headers, cookies };
298
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
299
+ validateAllSchemasUltra(schema, data);
300
+ }
301
+ const result = await handler({
302
+ req,
303
+ body,
304
+ query,
305
+ params,
306
+ headers,
307
+ cookies
308
+ });
309
+ return autoResponse(result);
310
+ } catch (error) {
311
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
312
+ return handleValidationError(error);
313
+ }
314
+ return handleInternalError(error);
315
+ }
316
+ };
317
+ }
318
+ function createHandlerWithExtra(schemaOrHandler, maybeHandler) {
319
+ const hasSchema = !isHandler(schemaOrHandler);
320
+ const schema = hasSchema ? schemaOrHandler : {};
321
+ const handler = hasSchema ? maybeHandler : schemaOrHandler;
322
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
323
+ precompileSchemasUltra(schema);
324
+ }
325
+ return async (req) => {
326
+ try {
327
+ const query = parseQuery(req);
328
+ const headers = parseHeaders(req);
329
+ const cookies = parseCookies(req);
330
+ const params = req.params || {};
331
+ let body = void 0;
332
+ if (req.method !== "GET" && req.method !== "HEAD") {
333
+ const [, parsedBody] = await goAwait(parseBody(req));
334
+ body = parsedBody;
335
+ }
336
+ const data = { body, query, params, headers, cookies };
337
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
338
+ validateAllSchemasUltra(schema, data);
339
+ }
340
+ const extras = req.__locals ?? {};
341
+ const result = await handler({
342
+ req,
343
+ body,
344
+ query,
345
+ params,
346
+ headers,
347
+ cookies,
348
+ ...extras
349
+ });
350
+ return autoResponse(result);
351
+ } catch (error) {
352
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
353
+ return handleValidationError(error);
354
+ }
355
+ return handleInternalError(error);
111
356
  }
112
- return async (req) => {
113
- try {
114
- // 解析请求数据
115
- const query = parseQuery(req);
116
- const headers = parseHeaders(req);
117
- const cookies = parseCookies(req);
118
- const params = req.params || {};
119
- // 解析请求体
120
- let body = undefined;
121
- if (req.method !== "GET" && req.method !== "HEAD") {
122
- const [, parsedBody] = await goAwait(parseBody(req));
123
- body = parsedBody;
124
- }
125
- // 验证 schema
126
- const data = { body, query, params, headers, cookies };
127
- if (schema.body ||
128
- schema.query ||
129
- schema.params ||
130
- schema.headers ||
131
- schema.cookies) {
132
- validateAllSchemasUltra(schema, data);
133
- }
134
- // 调用 handler
135
- const result = await handler({
136
- req,
137
- body: body,
138
- query: query,
139
- params: params,
140
- headers: headers,
141
- cookies: cookies,
142
- });
143
- return autoResponse(result);
144
- }
145
- catch (error) {
146
- if (error instanceof Error && error.message.includes("验证失败")) {
147
- return handleValidationError(error);
148
- }
149
- return handleInternalError(error);
150
- }
151
- };
152
- }
153
- // 实现
154
- export function createHandlerWithExtra(schemaOrHandler, maybeHandler) {
155
- // 判断调用方式
156
- const hasSchema = !isHandler(schemaOrHandler);
157
- const schema = hasSchema ? schemaOrHandler : {};
158
- const handler = hasSchema
159
- ? maybeHandler
160
- : schemaOrHandler;
161
- // 预编译 schema
162
- if (schema.body ||
163
- schema.query ||
164
- schema.params ||
165
- schema.headers ||
166
- schema.cookies) {
167
- precompileSchemasUltra(schema);
357
+ };
358
+ }
359
+ function simpleHandler(handler) {
360
+ return async (req) => {
361
+ try {
362
+ const result = await handler({ req });
363
+ return autoResponse(result);
364
+ } catch (error) {
365
+ return handleInternalError(error);
168
366
  }
169
- return async (req) => {
170
- try {
171
- // 解析请求数据
172
- const query = parseQuery(req);
173
- const headers = parseHeaders(req);
174
- const cookies = parseCookies(req);
175
- const params = req.params || {};
176
- // 解析请求体
177
- let body = undefined;
178
- if (req.method !== "GET" && req.method !== "HEAD") {
179
- const [, parsedBody] = await goAwait(parseBody(req));
180
- body = parsedBody;
181
- }
182
- // 验证 schema
183
- const data = { body, query, params, headers, cookies };
184
- if (schema.body ||
185
- schema.query ||
186
- schema.params ||
187
- schema.headers ||
188
- schema.cookies) {
189
- validateAllSchemasUltra(schema, data);
190
- }
191
- // 获取中间件注入的额外数据
192
- const extras = (req.__locals ??
193
- {});
194
- // 调用 handler
195
- const result = await handler({
196
- req,
197
- body: body,
198
- query: query,
199
- params: params,
200
- headers: headers,
201
- cookies: cookies,
202
- ...extras,
203
- });
204
- return autoResponse(result);
205
- }
206
- catch (error) {
207
- if (error instanceof Error && error.message.includes("验证失败")) {
208
- return handleValidationError(error);
209
- }
210
- return handleInternalError(error);
211
- }
212
- };
367
+ };
213
368
  }
369
+ export {
370
+ createHandler,
371
+ createHandlerWithExtra,
372
+ simpleHandler
373
+ };
214
374
  /**
215
- * 简单的路由处理器 (无 schema 验证,只有 req)
375
+ * Go 风格的错误处理工具
376
+ * 将 Promise 转换为 [Error | null, T | undefined] 格式
216
377
  *
217
- * @example
218
- * ```typescript
219
- * simpleHandler(({ req }) => {
220
- * return { message: "Hello World" };
221
- * })
222
- * ```
378
+ * @author Framework Team
379
+ * @version 1.0.0
380
+ * @license MIT
223
381
  */
224
- export function simpleHandler(handler) {
225
- return async (req) => {
226
- try {
227
- const result = await handler({ req });
228
- return autoResponse(result);
229
- }
230
- catch (error) {
231
- return handleInternalError(error);
232
- }
233
- };
234
- }
382
+ /**
383
+ * 超优化版Schema验证器 v5.0.0
384
+ *
385
+ * 使用经过验证的优化技术,确保极致性能
386
+ * - 内联函数调用
387
+ * - 预编译缓存优化
388
+ * - 内存池优化
389
+ * - 位运算优化
390
+ * - 类型特化优化
391
+ * - 循环展开优化
392
+ * - 位掩码优化
393
+ * - 字符串池优化
394
+ * - 内联缓存优化
395
+ * - 内存对齐优化
396
+ *
397
+ * @author Framework Team
398
+ * @version 5.0.0
399
+ * @license MIT
400
+ */
401
+ /**
402
+ * 类型安全的路由处理器工厂
403
+ *
404
+ * 非柯里化设计,API 更简洁
405
+ *
406
+ * @author Framework Team
407
+ * @version 3.0.0
408
+ * @license MIT
409
+ */
410
+ //# sourceMappingURL=create-handler.js.map