vafast 0.1.13 → 0.2.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 (40) hide show
  1. package/dist/middleware/component-renderer.js +10 -14
  2. package/dist/middleware/component-router.js +4 -1
  3. package/dist/middleware.d.ts +1 -1
  4. package/dist/middleware.js +8 -3
  5. package/dist/monitoring/types.d.ts +1 -1
  6. package/dist/router/index.d.ts +5 -0
  7. package/dist/router/index.js +7 -0
  8. package/dist/router/radix-tree.d.ts +51 -0
  9. package/dist/router/radix-tree.js +186 -0
  10. package/dist/router.d.ts +38 -10
  11. package/dist/router.js +55 -43
  12. package/dist/server/base-server.d.ts +0 -4
  13. package/dist/server/base-server.js +2 -24
  14. package/dist/server/index.d.ts +4 -4
  15. package/dist/server/index.js +8 -6
  16. package/dist/server/server.d.ts +30 -2
  17. package/dist/server/server.js +84 -60
  18. package/dist/types/index.d.ts +4 -2
  19. package/dist/types/index.js +3 -2
  20. package/dist/types/route.d.ts +2 -2
  21. package/dist/types/schema.d.ts +75 -0
  22. package/dist/types/schema.js +10 -0
  23. package/dist/types/types.d.ts +6 -2
  24. package/dist/utils/create-handler.d.ts +74 -0
  25. package/dist/utils/create-handler.js +234 -0
  26. package/dist/utils/dependency-manager.js +8 -2
  27. package/dist/utils/go-await.js +1 -4
  28. package/dist/utils/handle.d.ts +1 -0
  29. package/dist/utils/handle.js +5 -0
  30. package/dist/utils/index.d.ts +12 -10
  31. package/dist/utils/index.js +21 -11
  32. package/dist/utils/path-matcher.js +2 -1
  33. package/dist/utils/response.d.ts +5 -0
  34. package/dist/utils/response.js +41 -0
  35. package/package.json +30 -27
  36. package/dist/index.js.map +0 -1
  37. package/dist/types.d.ts +0 -18
  38. package/dist/types.js +0 -1
  39. package/dist/utils/route-handler-factory.d.ts +0 -50
  40. package/dist/utils/route-handler-factory.js +0 -182
@@ -1,182 +0,0 @@
1
- /**
2
- * 路由处理器工厂
3
- *
4
- * 负责创建和配置路由处理器,处理请求数据解析和验证
5
- * 提供统一的错误处理和响应格式
6
- *
7
- * @author Framework Team
8
- * @version 1.0.0
9
- * @license MIT
10
- */
11
- import { parseQuery, parseHeaders, parseCookies, parseBody } from "./parsers";
12
- import { goAwait } from "./go-await";
13
- import { json } from "./response";
14
- import { validateAllSchemasUltra, precompileSchemasUltra, } from "./validators/schema-validators-ultra";
15
- // 默认验证错误处理器
16
- const defaultValidationErrorHandler = (error, field, value, schema) => {
17
- return json({
18
- success: false,
19
- error: "Validation Error",
20
- message: error instanceof Error ? error.message : "验证失败",
21
- field,
22
- receivedValue: value,
23
- timestamp: new Date().toISOString(),
24
- }, 400);
25
- };
26
- // 预定义的常用响应头,避免重复创建
27
- const TEXT_HEADERS = { "Content-Type": "text/plain; charset=utf-8" };
28
- const JSON_HEADERS = { "Content-Type": "application/json" };
29
- const EMPTY_RESPONSE_204 = new Response(null, { status: 204 });
30
- // 超高性能的 Response 自动转换函数 - 生产环境推荐使用
31
- function autoResponseUltra(result) {
32
- // 快速路径:已经是 Response 对象
33
- if (result instanceof Response) {
34
- return result;
35
- }
36
- // 快速路径:null/undefined - 复用预创建的对象
37
- if (result === null || result === undefined) {
38
- return EMPTY_RESPONSE_204;
39
- }
40
- // 使用 switch 语句优化类型检查
41
- switch (typeof result) {
42
- case "string":
43
- // 优化:复用预定义的头部对象
44
- return new Response(result, { headers: TEXT_HEADERS });
45
- case "number":
46
- case "boolean":
47
- // 优化:使用更高效的字符串转换,复用头部
48
- return new Response(result.toString(), { headers: TEXT_HEADERS });
49
- case "object":
50
- // 检查是否是 { data, status, headers } 格式
51
- // 只有当对象同时包含 data、status 或 headers 字段时,才认为是这种格式
52
- if ("data" in result && ("status" in result || "headers" in result)) {
53
- const { data, status = 200, headers = {} } = result;
54
- // 无内容
55
- if (data === null || data === undefined) {
56
- return new Response("", {
57
- status: status === 200 ? 204 : status,
58
- headers,
59
- });
60
- }
61
- // 纯文本类型
62
- if (typeof data === "string" ||
63
- typeof data === "number" ||
64
- typeof data === "boolean") {
65
- // 优化:减少对象展开操作,直接构建最终对象
66
- const finalHeaders = {
67
- "Content-Type": "text/plain; charset=utf-8",
68
- ...headers,
69
- };
70
- return new Response(data.toString(), {
71
- status,
72
- headers: finalHeaders,
73
- });
74
- }
75
- // JSON 类型 - 复用 json 函数
76
- return json(data, status, headers);
77
- }
78
- // 普通对象/数组,复用 json 函数
79
- return json(result);
80
- default:
81
- // 其他类型(如 symbol, function 等)
82
- return EMPTY_RESPONSE_204;
83
- }
84
- }
85
- // 创建路由处理器的通用函数
86
- export function createRouteHandler(handler, config = {}) {
87
- // 检查哪些验证器是必需的
88
- const hasBodySchema = config.body !== undefined;
89
- const hasQuerySchema = config.query !== undefined;
90
- const hasParamsSchema = config.params !== undefined;
91
- const hasHeadersSchema = config.headers !== undefined;
92
- const hasCookiesSchema = config.cookies !== undefined;
93
- // 只在有验证器时预编译Schema
94
- if (hasBodySchema ||
95
- hasQuerySchema ||
96
- hasParamsSchema ||
97
- hasHeadersSchema ||
98
- hasCookiesSchema) {
99
- precompileSchemasUltra(config);
100
- }
101
- // 获取验证错误处理器
102
- const errorHandler = config.validationErrorHandler || defaultValidationErrorHandler;
103
- return async (req) => {
104
- try {
105
- let queryObj = {};
106
- let headers = {};
107
- let cookies = {};
108
- let body = undefined;
109
- let params = {};
110
- // 默认总是解析所有数据,只有在有验证器时才进行验证
111
- queryObj = parseQuery(req);
112
- headers = parseHeaders(req);
113
- cookies = parseCookies(req);
114
- // 总是解析 body
115
- const [, parsedBody] = await goAwait(parseBody(req));
116
- body = parsedBody;
117
- // 总是尝试获取路径参数
118
- params = (req.pathParams ||
119
- req.params ||
120
- {});
121
- // 只在有验证器时执行验证
122
- if (hasBodySchema ||
123
- hasQuerySchema ||
124
- hasParamsSchema ||
125
- hasHeadersSchema ||
126
- hasCookiesSchema) {
127
- const data = { body, query: queryObj, params, headers, cookies };
128
- validateAllSchemasUltra(config, data);
129
- }
130
- // 合并中间件注入的本地上下文
131
- const extras = (req.__locals ?? {});
132
- // 调用处理器,传递上下文
133
- const result = await handler({
134
- req,
135
- body,
136
- query: queryObj,
137
- params,
138
- headers,
139
- cookies,
140
- ...extras,
141
- });
142
- return autoResponseUltra(result);
143
- }
144
- catch (error) {
145
- // 使用用户自定义的验证错误处理器
146
- if (error instanceof Error && error.message.includes("验证失败")) {
147
- // 尝试提取字段信息
148
- const field = extractFieldFromError(error);
149
- const value = extractValueFromError(error);
150
- const schema = extractSchemaFromError(error);
151
- return await errorHandler(error, field, value, schema);
152
- }
153
- // 其他错误使用默认处理
154
- return json({
155
- success: false,
156
- error: "Internal Error",
157
- message: error instanceof Error ? error.message : "未知错误",
158
- }, 500);
159
- }
160
- };
161
- }
162
- // 从错误中提取字段信息的辅助函数
163
- function extractFieldFromError(error) {
164
- // 尝试从错误消息中提取字段名
165
- const fieldMatch = error.message.match(/字段\s*(\w+)/);
166
- return fieldMatch ? fieldMatch[1] : "unknown";
167
- }
168
- // 从错误中提取值的辅助函数
169
- function extractValueFromError(error) {
170
- // 这里可以根据实际错误类型提取值
171
- return undefined;
172
- }
173
- // 从错误中提取Schema的辅助函数
174
- function extractSchemaFromError(error) {
175
- // 这里可以根据实际错误类型提取Schema
176
- return undefined;
177
- }
178
- export function withExtra() {
179
- return function withExtraHandler(config, handler) {
180
- return createRouteHandler(handler, config);
181
- };
182
- }