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,222 +1,241 @@
1
- /**
2
- * Schema配置验证器
3
- *
4
- * 使用validateSchema函数对SchemaConfig结构的数据进行验证
5
- * 提供统一的验证接口和错误处理
6
- *
7
- * @author Framework Team
8
- * @version 1.0.0
9
- * @license MIT
10
- */
11
- import { validateSchema } from "./validators";
12
- /**
13
- * 验证单个Schema配置项
14
- * @param schema Schema定义
15
- * @param data 要验证的数据
16
- * @param fieldName 字段名称(用于错误标识)
17
- * @returns 验证结果
18
- */
19
- function validateSingleSchema(schema, data, fieldName) {
20
- return validateSchema(schema, data);
1
+ // src/utils/validators/validators.ts
2
+ import { Type } from "@sinclair/typebox";
3
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
4
+ var compilerCache = /* @__PURE__ */ new WeakMap();
5
+ function getCompiledValidator(schema) {
6
+ let compiler = compilerCache.get(schema);
7
+ if (!compiler) {
8
+ compiler = TypeCompiler.Compile(schema);
9
+ compilerCache.set(schema, compiler);
10
+ }
11
+ return compiler;
21
12
  }
22
- /**
23
- * 使用SchemaConfig验证完整的请求数据
24
- * @param config Schema配置
25
- * @param data 请求数据
26
- * @returns 验证结果
27
- */
28
- export function validateSchemaConfig(config, data) {
29
- const errors = [];
30
- const validatedData = {};
31
- // 验证body
32
- if (config.body && data.body !== undefined) {
33
- const result = validateSingleSchema(config.body, data.body, "body");
34
- if (result.success) {
35
- validatedData.body = result.data;
36
- }
37
- else {
38
- errors.push({ field: "body", error: result });
39
- }
40
- }
41
- else if (data.body !== undefined) {
42
- validatedData.body = data.body;
43
- }
44
- // 验证query
45
- if (config.query && data.query !== undefined) {
46
- const result = validateSingleSchema(config.query, data.query, "query");
47
- if (result.success) {
48
- validatedData.query = result.data;
49
- }
50
- else {
51
- errors.push({ field: "query", error: result });
52
- }
53
- }
54
- else if (data.query !== undefined) {
55
- validatedData.query = data.query;
56
- }
57
- // 验证params
58
- if (config.params && data.params !== undefined) {
59
- const result = validateSingleSchema(config.params, data.params, "params");
60
- if (result.success) {
61
- validatedData.params = result.data;
62
- }
63
- else {
64
- errors.push({ field: "params", error: result });
65
- }
66
- }
67
- else if (data.params !== undefined) {
68
- validatedData.params = data.params;
69
- }
70
- // 验证headers
71
- if (config.headers && data.headers !== undefined) {
72
- const result = validateSingleSchema(config.headers, data.headers, "headers");
73
- if (result.success) {
74
- validatedData.headers = result.data;
75
- }
76
- else {
77
- errors.push({ field: "headers", error: result });
78
- }
79
- }
80
- else if (data.headers !== undefined) {
81
- validatedData.headers = data.headers;
82
- }
83
- // 验证cookies
84
- if (config.cookies && data.cookies !== undefined) {
85
- const result = validateSingleSchema(config.cookies, data.cookies, "cookies");
86
- if (result.success) {
87
- validatedData.cookies = result.data;
88
- }
89
- else {
90
- errors.push({ field: "cookies", error: result });
91
- }
92
- }
93
- else if (data.cookies !== undefined) {
94
- validatedData.cookies = data.cookies;
95
- }
96
- // 添加所有未配置但存在的数据字段
97
- if (data.body !== undefined && !config.body) {
98
- validatedData.body = data.body;
99
- }
100
- if (data.query !== undefined && !config.query) {
101
- validatedData.query = data.query;
102
- }
103
- if (data.params !== undefined && !config.params) {
104
- validatedData.params = data.params;
105
- }
106
- if (data.headers !== undefined && !config.headers) {
107
- validatedData.headers = data.headers;
108
- }
109
- if (data.cookies !== undefined && !config.cookies) {
110
- validatedData.cookies = data.cookies;
13
+ function validateSchema(schema, data) {
14
+ try {
15
+ const compiler = getCompiledValidator(schema);
16
+ if (compiler.Check(data)) {
17
+ return {
18
+ success: true,
19
+ data
20
+ };
111
21
  }
112
- // 如果有错误,返回失败结果
113
- if (errors.length > 0) {
114
- return {
115
- success: false,
116
- errors,
117
- };
22
+ const errors = [];
23
+ const errorIterator = compiler.Errors(data);
24
+ for (const error of errorIterator) {
25
+ errors.push({
26
+ path: error.path,
27
+ message: error.message,
28
+ code: "VALIDATION_FAILED",
29
+ value: error.value,
30
+ schema: error.schema
31
+ });
118
32
  }
119
- // 验证成功,返回验证后的数据
120
33
  return {
121
- success: true,
122
- data: validatedData,
34
+ success: false,
35
+ errors
123
36
  };
124
- }
125
- /**
126
- * 异步验证SchemaConfig(支持异步验证器)
127
- * @param config Schema配置
128
- * @param data 请求数据
129
- * @returns Promise<验证结果>
130
- */
131
- export async function validateSchemaConfigAsync(config, data) {
132
- const errors = [];
133
- const validatedData = {};
134
- // 并行验证所有Schema以提高性能
135
- const validationPromises = [];
136
- // 收集所有需要验证的字段
137
- if (config.body && data.body !== undefined) {
138
- validationPromises.push(Promise.resolve({
139
- field: "body",
140
- result: validateSingleSchema(config.body, data.body, "body"),
141
- }));
142
- }
143
- if (config.query && data.query !== undefined) {
144
- validationPromises.push(Promise.resolve({
145
- field: "query",
146
- result: validateSingleSchema(config.query, data.query, "query"),
147
- }));
148
- }
149
- if (config.params && data.params !== undefined) {
150
- validationPromises.push(Promise.resolve({
151
- field: "params",
152
- result: validateSingleSchema(config.params, data.params, "params"),
153
- }));
154
- }
155
- if (config.headers && data.headers !== undefined) {
156
- validationPromises.push(Promise.resolve({
157
- field: "headers",
158
- result: validateSingleSchema(config.headers, data.headers, "headers"),
159
- }));
160
- }
161
- if (config.cookies && data.cookies !== undefined) {
162
- validationPromises.push(Promise.resolve({
163
- field: "cookies",
164
- result: validateSingleSchema(config.cookies, data.cookies, "cookies"),
165
- }));
166
- }
167
- // 等待所有验证完成
168
- const results = await Promise.all(validationPromises);
169
- // 处理验证结果
170
- for (const { field, result } of results) {
171
- if (result.success) {
172
- validatedData[field] = result.data;
173
- }
174
- else {
175
- errors.push({ field, error: result });
37
+ } catch (error) {
38
+ return {
39
+ success: false,
40
+ errors: [
41
+ {
42
+ path: "",
43
+ message: error instanceof Error ? error.message : "Unknown validation error",
44
+ code: "VALIDATION_EXCEPTION",
45
+ value: data
176
46
  }
177
- }
178
- // 添加未验证但存在的数据
179
- if (data.body !== undefined && !config.body)
180
- validatedData.body = data.body;
181
- if (data.query !== undefined && !config.query)
182
- validatedData.query = data.query;
183
- if (data.params !== undefined && !config.params)
184
- validatedData.params = data.params;
185
- if (data.headers !== undefined && !config.headers)
186
- validatedData.headers = data.headers;
187
- if (data.cookies !== undefined && !config.cookies)
188
- validatedData.cookies = data.cookies;
189
- // 如果有错误,返回失败结果
190
- if (errors.length > 0) {
191
- return {
192
- success: false,
193
- errors,
194
- };
195
- }
196
- // 验证成功,返回验证后的数据
47
+ ]
48
+ };
49
+ }
50
+ }
51
+
52
+ // src/utils/validators/schema-validator.ts
53
+ function validateSingleSchema(schema, data, fieldName) {
54
+ return validateSchema(schema, data);
55
+ }
56
+ function validateSchemaConfig(config, data) {
57
+ const errors = [];
58
+ const validatedData = {};
59
+ if (config.body && data.body !== void 0) {
60
+ const result = validateSingleSchema(config.body, data.body, "body");
61
+ if (result.success) {
62
+ validatedData.body = result.data;
63
+ } else {
64
+ errors.push({ field: "body", error: result });
65
+ }
66
+ } else if (data.body !== void 0) {
67
+ validatedData.body = data.body;
68
+ }
69
+ if (config.query && data.query !== void 0) {
70
+ const result = validateSingleSchema(config.query, data.query, "query");
71
+ if (result.success) {
72
+ validatedData.query = result.data;
73
+ } else {
74
+ errors.push({ field: "query", error: result });
75
+ }
76
+ } else if (data.query !== void 0) {
77
+ validatedData.query = data.query;
78
+ }
79
+ if (config.params && data.params !== void 0) {
80
+ const result = validateSingleSchema(config.params, data.params, "params");
81
+ if (result.success) {
82
+ validatedData.params = result.data;
83
+ } else {
84
+ errors.push({ field: "params", error: result });
85
+ }
86
+ } else if (data.params !== void 0) {
87
+ validatedData.params = data.params;
88
+ }
89
+ if (config.headers && data.headers !== void 0) {
90
+ const result = validateSingleSchema(
91
+ config.headers,
92
+ data.headers,
93
+ "headers"
94
+ );
95
+ if (result.success) {
96
+ validatedData.headers = result.data;
97
+ } else {
98
+ errors.push({ field: "headers", error: result });
99
+ }
100
+ } else if (data.headers !== void 0) {
101
+ validatedData.headers = data.headers;
102
+ }
103
+ if (config.cookies && data.cookies !== void 0) {
104
+ const result = validateSingleSchema(
105
+ config.cookies,
106
+ data.cookies,
107
+ "cookies"
108
+ );
109
+ if (result.success) {
110
+ validatedData.cookies = result.data;
111
+ } else {
112
+ errors.push({ field: "cookies", error: result });
113
+ }
114
+ } else if (data.cookies !== void 0) {
115
+ validatedData.cookies = data.cookies;
116
+ }
117
+ if (data.body !== void 0 && !config.body) {
118
+ validatedData.body = data.body;
119
+ }
120
+ if (data.query !== void 0 && !config.query) {
121
+ validatedData.query = data.query;
122
+ }
123
+ if (data.params !== void 0 && !config.params) {
124
+ validatedData.params = data.params;
125
+ }
126
+ if (data.headers !== void 0 && !config.headers) {
127
+ validatedData.headers = data.headers;
128
+ }
129
+ if (data.cookies !== void 0 && !config.cookies) {
130
+ validatedData.cookies = data.cookies;
131
+ }
132
+ if (errors.length > 0) {
197
133
  return {
198
- success: true,
199
- data: validatedData,
134
+ success: false,
135
+ errors
200
136
  };
137
+ }
138
+ return {
139
+ success: true,
140
+ data: validatedData
141
+ };
201
142
  }
202
- /**
203
- * 创建验证器工厂函数
204
- * @param config Schema配置
205
- * @returns 验证器函数
206
- */
207
- export function createSchemaValidator(config) {
208
- return (data) => {
209
- return validateSchemaConfig(config, data);
143
+ async function validateSchemaConfigAsync(config, data) {
144
+ const errors = [];
145
+ const validatedData = {};
146
+ const validationPromises = [];
147
+ if (config.body && data.body !== void 0) {
148
+ validationPromises.push(
149
+ Promise.resolve({
150
+ field: "body",
151
+ result: validateSingleSchema(config.body, data.body, "body")
152
+ })
153
+ );
154
+ }
155
+ if (config.query && data.query !== void 0) {
156
+ validationPromises.push(
157
+ Promise.resolve({
158
+ field: "query",
159
+ result: validateSingleSchema(config.query, data.query, "query")
160
+ })
161
+ );
162
+ }
163
+ if (config.params && data.params !== void 0) {
164
+ validationPromises.push(
165
+ Promise.resolve({
166
+ field: "params",
167
+ result: validateSingleSchema(config.params, data.params, "params")
168
+ })
169
+ );
170
+ }
171
+ if (config.headers && data.headers !== void 0) {
172
+ validationPromises.push(
173
+ Promise.resolve({
174
+ field: "headers",
175
+ result: validateSingleSchema(config.headers, data.headers, "headers")
176
+ })
177
+ );
178
+ }
179
+ if (config.cookies && data.cookies !== void 0) {
180
+ validationPromises.push(
181
+ Promise.resolve({
182
+ field: "cookies",
183
+ result: validateSingleSchema(config.cookies, data.cookies, "cookies")
184
+ })
185
+ );
186
+ }
187
+ const results = await Promise.all(validationPromises);
188
+ for (const { field, result } of results) {
189
+ if (result.success) {
190
+ validatedData[field] = result.data;
191
+ } else {
192
+ errors.push({ field, error: result });
193
+ }
194
+ }
195
+ if (data.body !== void 0 && !config.body) validatedData.body = data.body;
196
+ if (data.query !== void 0 && !config.query)
197
+ validatedData.query = data.query;
198
+ if (data.params !== void 0 && !config.params)
199
+ validatedData.params = data.params;
200
+ if (data.headers !== void 0 && !config.headers)
201
+ validatedData.headers = data.headers;
202
+ if (data.cookies !== void 0 && !config.cookies)
203
+ validatedData.cookies = data.cookies;
204
+ if (errors.length > 0) {
205
+ return {
206
+ success: false,
207
+ errors
210
208
  };
209
+ }
210
+ return {
211
+ success: true,
212
+ data: validatedData
213
+ };
214
+ }
215
+ function createSchemaValidator(config) {
216
+ return (data) => {
217
+ return validateSchemaConfig(config, data);
218
+ };
211
219
  }
220
+ function createAsyncSchemaValidator(config) {
221
+ return (data) => {
222
+ return validateSchemaConfigAsync(config, data);
223
+ };
224
+ }
225
+ export {
226
+ createAsyncSchemaValidator,
227
+ createSchemaValidator,
228
+ validateSchemaConfig,
229
+ validateSchemaConfigAsync
230
+ };
212
231
  /**
213
- * 创建异步验证器工厂函数
214
- * @param config Schema配置
215
- * @returns 异步验证器函数
232
+ * Schema配置验证器
233
+ *
234
+ * 使用validateSchema函数对SchemaConfig结构的数据进行验证
235
+ * 提供统一的验证接口和错误处理
236
+ *
237
+ * @author Framework Team
238
+ * @version 1.0.0
239
+ * @license MIT
216
240
  */
217
- export function createAsyncSchemaValidator(config) {
218
- return (data) => {
219
- return validateSchemaConfigAsync(config, data);
220
- };
221
- }
222
- // 类型已经在上面定义并导出,无需重复导出
241
+ //# sourceMappingURL=schema-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/utils/validators/validators.ts","../../../src/utils/validators/schema-validator.ts"],"sourcesContent":["// src/utils/validators.ts\n/**\n * 高性能 Schema 验证器\n *\n * 使用 TypeBox TypeCompiler 进行 JIT 编译\n * 编译后的验证器会被缓存,避免重复编译开销\n *\n * @version 2.0.0 - 添加预编译缓存\n */\n\nimport { Type } from \"@sinclair/typebox\";\nimport type { Static, TSchema } from \"@sinclair/typebox\";\nimport { TypeCompiler, type TypeCheck } from \"@sinclair/typebox/compiler\";\n\n/** 验证错误接口 */\nexport interface ValidationError {\n path: string;\n message: string;\n code: string;\n value?: unknown;\n schema?: unknown;\n}\n\n/** 验证失败结果接口 */\nexport interface ValidationFailure {\n success: false;\n errors: ValidationError[];\n}\n\n/** 验证成功结果接口 */\nexport interface ValidationSuccess<T> {\n success: true;\n data: T;\n}\n\n/** 验证结果联合类型 */\nexport type ValidationResult<T = unknown> =\n | ValidationSuccess<T>\n | ValidationFailure;\n\n/**\n * 编译器缓存\n * 使用 WeakMap 避免内存泄漏(Schema 对象被垃圾回收时,缓存也会自动清理)\n */\nconst compilerCache = new WeakMap<TSchema, TypeCheck<TSchema>>();\n\n/**\n * 获取或创建编译后的验证器\n * @param schema TypeBox Schema\n * @returns 编译后的验证器\n */\nfunction getCompiledValidator<T extends TSchema>(schema: T): TypeCheck<T> {\n let compiler = compilerCache.get(schema);\n if (!compiler) {\n compiler = TypeCompiler.Compile(schema);\n compilerCache.set(schema, compiler);\n }\n return compiler as TypeCheck<T>;\n}\n\n/**\n * 预编译 Schema(在启动时调用,避免首次请求的编译开销)\n * @param schemas 要预编译的 Schema 数组\n */\nexport function precompileSchemas(schemas: TSchema[]): void {\n for (const schema of schemas) {\n getCompiledValidator(schema);\n }\n}\n\n/**\n * 使用TypeBox Schema验证数据(带缓存优化)\n * @param schema TypeBox Schema\n * @param data 要验证的数据\n * @returns 验证结果,包含类型安全的数据或详细错误信息\n */\nexport function validateSchema<T extends TSchema>(\n schema: T,\n data: unknown,\n): ValidationResult<Static<T>> {\n try {\n // 从缓存获取或编译验证器\n const compiler = getCompiledValidator(schema);\n\n if (compiler.Check(data)) {\n return {\n success: true,\n data: data as Static<T>,\n };\n }\n\n // 验证失败时,使用Errors函数生成详细的错误信息\n const errors: ValidationError[] = [];\n const errorIterator = compiler.Errors(data);\n\n // 收集所有错误(可以根据需要限制数量)\n for (const error of errorIterator) {\n errors.push({\n path: error.path,\n message: error.message,\n code: \"VALIDATION_FAILED\",\n value: error.value,\n schema: error.schema,\n });\n }\n\n return {\n success: false,\n errors,\n };\n } catch (error) {\n // 处理验证过程中的异常\n return {\n success: false,\n errors: [\n {\n path: \"\",\n message:\n error instanceof Error ? error.message : \"Unknown validation error\",\n code: \"VALIDATION_EXCEPTION\",\n value: data,\n },\n ],\n };\n }\n}\n\n/**\n * 创建类型特化的验证器(最高性能)\n * 适用于频繁验证同一 Schema 的场景\n * @param schema TypeBox Schema\n * @returns 类型安全的验证函数\n */\nexport function createValidator<T extends TSchema>(\n schema: T,\n): (data: unknown) => ValidationResult<Static<T>> {\n const compiler = getCompiledValidator(schema);\n\n return (data: unknown): ValidationResult<Static<T>> => {\n if (compiler.Check(data)) {\n return { success: true, data: data as Static<T> };\n }\n\n const errors: ValidationError[] = [];\n for (const error of compiler.Errors(data)) {\n errors.push({\n path: error.path,\n message: error.message,\n code: \"VALIDATION_FAILED\",\n value: error.value,\n schema: error.schema,\n });\n }\n return { success: false, errors };\n };\n}\n\n/**\n * 快速验证(只返回布尔值,不收集错误)\n * 适用于只需要知道验证结果的场景\n * @param schema TypeBox Schema\n * @param data 要验证的数据\n * @returns 验证是否通过\n */\nexport function validateFast<T extends TSchema>(\n schema: T,\n data: unknown,\n): data is Static<T> {\n const compiler = getCompiledValidator(schema);\n return compiler.Check(data);\n}\n\n/**\n * 获取缓存统计信息(用于调试)\n */\nexport function getValidatorCacheStats(): { cacheType: string; note: string } {\n return {\n cacheType: \"WeakMap\",\n note: \"WeakMap 不支持 size 属性,缓存会随 Schema 对象自动清理\",\n };\n}\n\n// 导出常用的TypeBox类型,方便使用\nexport { Type, Static, TSchema };\n","/**\n * Schema配置验证器\n *\n * 使用validateSchema函数对SchemaConfig结构的数据进行验证\n * 提供统一的验证接口和错误处理\n *\n * @author Framework Team\n * @version 1.0.0\n * @license MIT\n */\n\nimport type { TSchema } from \"@sinclair/typebox\";\nimport { validateSchema, type ValidationResult } from \"./validators\";\n\n// 统一的Schema配置接口\nexport interface SchemaConfig {\n body?: TSchema;\n query?: TSchema;\n params?: TSchema;\n headers?: TSchema;\n cookies?: TSchema;\n}\n\n// 请求数据结构接口\nexport interface RequestData {\n body?: unknown;\n query?: unknown;\n params?: unknown;\n headers?: unknown;\n cookies?: unknown;\n}\n\n// 验证结果数据结构\nexport interface SchemaValidationResult {\n success: boolean;\n data?: {\n body?: unknown;\n query?: unknown;\n params?: unknown;\n headers?: unknown;\n cookies?: unknown;\n };\n errors?: Array<{\n field: keyof SchemaConfig;\n error: ValidationResult<unknown>;\n }>;\n}\n\n/**\n * 验证单个Schema配置项\n * @param schema Schema定义\n * @param data 要验证的数据\n * @param fieldName 字段名称(用于错误标识)\n * @returns 验证结果\n */\nfunction validateSingleSchema(\n schema: TSchema,\n data: unknown,\n fieldName: keyof SchemaConfig,\n): ValidationResult<unknown> {\n return validateSchema(schema, data);\n}\n\n/**\n * 使用SchemaConfig验证完整的请求数据\n * @param config Schema配置\n * @param data 请求数据\n * @returns 验证结果\n */\nexport function validateSchemaConfig(\n config: SchemaConfig,\n data: RequestData,\n): SchemaValidationResult {\n const errors: Array<{\n field: keyof SchemaConfig;\n error: ValidationResult<unknown>;\n }> = [];\n const validatedData: RequestData = {};\n\n // 验证body\n if (config.body && data.body !== undefined) {\n const result = validateSingleSchema(config.body, data.body, \"body\");\n if (result.success) {\n validatedData.body = result.data;\n } else {\n errors.push({ field: \"body\", error: result });\n }\n } else if (data.body !== undefined) {\n validatedData.body = data.body;\n }\n\n // 验证query\n if (config.query && data.query !== undefined) {\n const result = validateSingleSchema(config.query, data.query, \"query\");\n if (result.success) {\n validatedData.query = result.data;\n } else {\n errors.push({ field: \"query\", error: result });\n }\n } else if (data.query !== undefined) {\n validatedData.query = data.query;\n }\n\n // 验证params\n if (config.params && data.params !== undefined) {\n const result = validateSingleSchema(config.params, data.params, \"params\");\n if (result.success) {\n validatedData.params = result.data;\n } else {\n errors.push({ field: \"params\", error: result });\n }\n } else if (data.params !== undefined) {\n validatedData.params = data.params;\n }\n\n // 验证headers\n if (config.headers && data.headers !== undefined) {\n const result = validateSingleSchema(\n config.headers,\n data.headers,\n \"headers\",\n );\n if (result.success) {\n validatedData.headers = result.data;\n } else {\n errors.push({ field: \"headers\", error: result });\n }\n } else if (data.headers !== undefined) {\n validatedData.headers = data.headers;\n }\n\n // 验证cookies\n if (config.cookies && data.cookies !== undefined) {\n const result = validateSingleSchema(\n config.cookies,\n data.cookies,\n \"cookies\",\n );\n if (result.success) {\n validatedData.cookies = result.data;\n } else {\n errors.push({ field: \"cookies\", error: result });\n }\n } else if (data.cookies !== undefined) {\n validatedData.cookies = data.cookies;\n }\n\n // 添加所有未配置但存在的数据字段\n if (data.body !== undefined && !config.body) {\n validatedData.body = data.body;\n }\n if (data.query !== undefined && !config.query) {\n validatedData.query = data.query;\n }\n if (data.params !== undefined && !config.params) {\n validatedData.params = data.params;\n }\n if (data.headers !== undefined && !config.headers) {\n validatedData.headers = data.headers;\n }\n if (data.cookies !== undefined && !config.cookies) {\n validatedData.cookies = data.cookies;\n }\n\n // 如果有错误,返回失败结果\n if (errors.length > 0) {\n return {\n success: false,\n errors,\n };\n }\n\n // 验证成功,返回验证后的数据\n return {\n success: true,\n data: validatedData,\n };\n}\n\n/**\n * 异步验证SchemaConfig(支持异步验证器)\n * @param config Schema配置\n * @param data 请求数据\n * @returns Promise<验证结果>\n */\nexport async function validateSchemaConfigAsync(\n config: SchemaConfig,\n data: RequestData,\n): Promise<SchemaValidationResult> {\n const errors: Array<{\n field: keyof SchemaConfig;\n error: ValidationResult<unknown>;\n }> = [];\n const validatedData: RequestData = {};\n\n // 并行验证所有Schema以提高性能\n const validationPromises: Array<\n Promise<{ field: keyof SchemaConfig; result: ValidationResult<unknown> }>\n > = [];\n\n // 收集所有需要验证的字段\n if (config.body && data.body !== undefined) {\n validationPromises.push(\n Promise.resolve({\n field: \"body\" as keyof SchemaConfig,\n result: validateSingleSchema(config.body, data.body, \"body\"),\n }),\n );\n }\n if (config.query && data.query !== undefined) {\n validationPromises.push(\n Promise.resolve({\n field: \"query\" as keyof SchemaConfig,\n result: validateSingleSchema(config.query, data.query, \"query\"),\n }),\n );\n }\n if (config.params && data.params !== undefined) {\n validationPromises.push(\n Promise.resolve({\n field: \"params\" as keyof SchemaConfig,\n result: validateSingleSchema(config.params, data.params, \"params\"),\n }),\n );\n }\n if (config.headers && data.headers !== undefined) {\n validationPromises.push(\n Promise.resolve({\n field: \"headers\" as keyof SchemaConfig,\n result: validateSingleSchema(config.headers, data.headers, \"headers\"),\n }),\n );\n }\n if (config.cookies && data.cookies !== undefined) {\n validationPromises.push(\n Promise.resolve({\n field: \"cookies\" as keyof SchemaConfig,\n result: validateSingleSchema(config.cookies, data.cookies, \"cookies\"),\n }),\n );\n }\n\n // 等待所有验证完成\n const results = await Promise.all(validationPromises);\n\n // 处理验证结果\n for (const { field, result } of results) {\n if (result.success) {\n validatedData[field] = result.data;\n } else {\n errors.push({ field, error: result });\n }\n }\n\n // 添加未验证但存在的数据\n if (data.body !== undefined && !config.body) validatedData.body = data.body;\n if (data.query !== undefined && !config.query)\n validatedData.query = data.query;\n if (data.params !== undefined && !config.params)\n validatedData.params = data.params;\n if (data.headers !== undefined && !config.headers)\n validatedData.headers = data.headers;\n if (data.cookies !== undefined && !config.cookies)\n validatedData.cookies = data.cookies;\n\n // 如果有错误,返回失败结果\n if (errors.length > 0) {\n return {\n success: false,\n errors,\n };\n }\n\n // 验证成功,返回验证后的数据\n return {\n success: true,\n data: validatedData,\n };\n}\n\n/**\n * 创建验证器工厂函数\n * @param config Schema配置\n * @returns 验证器函数\n */\nexport function createSchemaValidator(config: SchemaConfig) {\n return (data: RequestData): SchemaValidationResult => {\n return validateSchemaConfig(config, data);\n };\n}\n\n/**\n * 创建异步验证器工厂函数\n * @param config Schema配置\n * @returns 异步验证器函数\n */\nexport function createAsyncSchemaValidator(config: SchemaConfig) {\n return (data: RequestData): Promise<SchemaValidationResult> => {\n return validateSchemaConfigAsync(config, data);\n };\n}\n\n// 类型已经在上面定义并导出,无需重复导出\n"],"mappings":"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","names":[]}
@@ -1,3 +1,5 @@
1
+ import { TSchema } from '@sinclair/typebox';
2
+
1
3
  /**
2
4
  * 超优化版Schema验证器 v5.0.0
3
5
  *
@@ -17,26 +19,26 @@
17
19
  * @version 5.0.0
18
20
  * @license MIT
19
21
  */
20
- import type { TSchema } from "@sinclair/typebox";
21
- export interface SchemaConfig {
22
+
23
+ interface SchemaConfig {
22
24
  body?: TSchema;
23
25
  query?: TSchema;
24
26
  params?: TSchema;
25
27
  headers?: TSchema;
26
28
  cookies?: TSchema;
27
29
  }
28
- export declare function validateSchemaUltra(schema: TSchema | undefined, data: any, context: string): any;
29
- export declare function validateAllSchemasUltra(config: SchemaConfig, data: {
30
+ declare function validateSchemaUltra(schema: TSchema | undefined, data: any, context: string): any;
31
+ declare function validateAllSchemasUltra(config: SchemaConfig, data: {
30
32
  body: any;
31
33
  query: any;
32
34
  params: any;
33
35
  headers: any;
34
36
  cookies: any;
35
37
  }): any;
36
- export declare function precompileSchemasUltra(config: SchemaConfig): void;
37
- export declare function createTypedValidatorUltra<T>(schema: TSchema): (data: T) => T;
38
- export declare function validateBatchUltra<T>(schema: TSchema, dataArray: T[]): T[];
39
- export declare function getCacheStats(): {
38
+ declare function precompileSchemasUltra(config: SchemaConfig): void;
39
+ declare function createTypedValidatorUltra<T>(schema: TSchema): (data: T) => T;
40
+ declare function validateBatchUltra<T>(schema: TSchema, dataArray: T[]): T[];
41
+ declare function getCacheStats(): {
40
42
  totalSchemas: number;
41
43
  totalHits: number;
42
44
  hitRate: string;
@@ -45,7 +47,8 @@ export declare function getCacheStats(): {
45
47
  stringPoolSize: number;
46
48
  memoryEfficiency: string;
47
49
  };
48
- export declare function smartClearUltraCache(keepTop?: number): void;
49
- export declare function clearUltraCache(): void;
50
- export declare function withPerformanceMonitoring<T extends (...args: any[]) => any>(fn: T, name: string): T;
51
- export { validateAllSchemasUltra as validateAllSchemas, createTypedValidatorUltra as createTypedValidator, validateBatchUltra as validateBatch, clearUltraCache as clearCache, smartClearUltraCache as smartClearCache, };
50
+ declare function smartClearUltraCache(keepTop?: number): void;
51
+ declare function clearUltraCache(): void;
52
+ declare function withPerformanceMonitoring<T extends (...args: any[]) => any>(fn: T, name: string): T;
53
+
54
+ export { type SchemaConfig, clearUltraCache as clearCache, clearUltraCache, createTypedValidatorUltra as createTypedValidator, createTypedValidatorUltra, getCacheStats, precompileSchemasUltra, smartClearUltraCache as smartClearCache, smartClearUltraCache, validateAllSchemasUltra as validateAllSchemas, validateAllSchemasUltra, validateBatchUltra as validateBatch, validateBatchUltra, validateSchemaUltra, withPerformanceMonitoring };