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,23 +1,834 @@
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 text2 = await req.text();
11
+ return Object.fromEntries(new URLSearchParams(text2));
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 parseQueryFast(req) {
27
+ const queryString = extractQueryString(req.url);
28
+ if (!queryString) return {};
29
+ const result = /* @__PURE__ */ Object.create(null);
30
+ const pairs = queryString.split("&");
31
+ for (const pair of pairs) {
32
+ const eqIndex = pair.indexOf("=");
33
+ if (eqIndex === -1) {
34
+ result[decodeURIComponent(pair)] = "";
35
+ } else {
36
+ const key = decodeURIComponent(pair.substring(0, eqIndex));
37
+ const value = decodeURIComponent(pair.substring(eqIndex + 1));
38
+ result[key] = value;
39
+ }
40
+ }
41
+ return result;
42
+ }
43
+ function parseHeaders(req) {
44
+ const headers = /* @__PURE__ */ Object.create(null);
45
+ req.headers.forEach((value, key) => {
46
+ headers[key] = value;
47
+ });
48
+ return headers;
49
+ }
50
+ function getHeader(req, name) {
51
+ return req.headers.get(name);
52
+ }
53
+ function parseCookies(req) {
54
+ const cookieHeader = req.headers.get("cookie");
55
+ if (!cookieHeader) return {};
56
+ try {
57
+ const parsed = cookie.parse(cookieHeader);
58
+ const result = {};
59
+ for (const [key, value] of Object.entries(parsed)) {
60
+ if (value !== void 0 && value !== null) {
61
+ result[key] = value;
62
+ }
63
+ }
64
+ return result;
65
+ } catch {
66
+ return {};
67
+ }
68
+ }
69
+ function parseCookiesFast(req) {
70
+ const cookieHeader = req.headers.get("cookie");
71
+ if (!cookieHeader) return {};
72
+ const result = /* @__PURE__ */ Object.create(null);
73
+ const pairs = cookieHeader.split(";");
74
+ for (const pair of pairs) {
75
+ const trimmed = pair.trim();
76
+ const eqIndex = trimmed.indexOf("=");
77
+ if (eqIndex > 0) {
78
+ const key = trimmed.substring(0, eqIndex).trim();
79
+ const value = trimmed.substring(eqIndex + 1).trim();
80
+ result[key] = value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value;
81
+ }
82
+ }
83
+ return result;
84
+ }
85
+ function getCookie(req, name) {
86
+ const cookieHeader = req.headers.get("cookie");
87
+ if (!cookieHeader) return null;
88
+ const prefix = `${name}=`;
89
+ const pairs = cookieHeader.split(";");
90
+ for (const pair of pairs) {
91
+ const trimmed = pair.trim();
92
+ if (trimmed.startsWith(prefix)) {
93
+ const value = trimmed.substring(prefix.length).trim();
94
+ return value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1) : value;
95
+ }
96
+ }
97
+ return null;
98
+ }
99
+
100
+ // src/utils/go-await.ts
101
+ function goAwait(promise) {
102
+ return promise.then((data) => [null, data]).catch((err) => [err instanceof Error ? err : new Error(String(err)), void 0]);
103
+ }
104
+
105
+ // src/utils/response.ts
106
+ function json(data, status = 200, headers = {}) {
107
+ const body = JSON.stringify(data);
108
+ if (Object.keys(headers).length === 0) {
109
+ return new Response(body, {
110
+ status,
111
+ headers: { "Content-Type": "application/json" }
112
+ });
113
+ }
114
+ const h = new Headers({
115
+ "Content-Type": "application/json",
116
+ ...headers
117
+ });
118
+ return new Response(body, {
119
+ status,
120
+ headers: h
121
+ });
122
+ }
123
+ function redirect(location, status = 302) {
124
+ return new Response(null, {
125
+ status,
126
+ headers: {
127
+ Location: location
128
+ }
129
+ });
130
+ }
131
+ function text(content, status = 200, headers = {}) {
132
+ const h = new Headers({
133
+ "Content-Type": "text/plain; charset=utf-8",
134
+ ...headers
135
+ });
136
+ return new Response(content, {
137
+ status,
138
+ headers: h
139
+ });
140
+ }
141
+ function html(content, status = 200, headers = {}) {
142
+ const h = new Headers({
143
+ "Content-Type": "text/html; charset=utf-8",
144
+ ...headers
145
+ });
146
+ return new Response(content, {
147
+ status,
148
+ headers: h
149
+ });
150
+ }
151
+ function empty(status = 204, headers = {}) {
152
+ return new Response(null, {
153
+ status,
154
+ headers
155
+ });
156
+ }
157
+ function stream(stream2, status = 200, headers = {}) {
158
+ const h = new Headers({
159
+ "Content-Type": "application/octet-stream",
160
+ ...headers
161
+ });
162
+ return new Response(stream2, {
163
+ status,
164
+ headers: h
165
+ });
166
+ }
167
+
168
+ // src/utils/validators/schema-validators-ultra.ts
169
+ import { TypeCompiler } from "@sinclair/typebox/compiler";
170
+ var SCHEMA_FLAGS = {
171
+ BODY: 1 << 0,
172
+ // 1
173
+ QUERY: 1 << 1,
174
+ // 2
175
+ PARAMS: 1 << 2,
176
+ // 4
177
+ HEADERS: 1 << 3,
178
+ // 8
179
+ COOKIES: 1 << 4
180
+ // 16
181
+ };
182
+ var ultraSchemaCache = /* @__PURE__ */ new Map();
183
+ var schemaCacheHits = /* @__PURE__ */ new Map();
184
+ var errorPool = [];
185
+ var ERROR_POOL_SIZE = 200;
186
+ var errorMessagePool = /* @__PURE__ */ new Map();
187
+ var commonMessages = [
188
+ "\u8BF7\u6C42\u4F53\u9A8C\u8BC1\u5931\u8D25",
189
+ "Query\u53C2\u6570\u9A8C\u8BC1\u5931\u8D25",
190
+ "\u8DEF\u5F84\u53C2\u6570\u9A8C\u8BC1\u5931\u8D25",
191
+ "\u8BF7\u6C42\u5934\u9A8C\u8BC1\u5931\u8D25",
192
+ "Cookie\u9A8C\u8BC1\u5931\u8D25",
193
+ "\u7C7B\u578B\u9A8C\u8BC1\u5931\u8D25",
194
+ "Schema\u7F16\u8BD1\u5931\u8D25",
195
+ "\u672A\u77E5\u9519\u8BEF"
196
+ ];
197
+ commonMessages.forEach((msg) => errorMessagePool.set(msg, msg));
198
+ for (let i = 0; i < ERROR_POOL_SIZE; i++) {
199
+ errorPool.push(new Error());
200
+ }
201
+ var errorPoolIndex = 0;
202
+ function getErrorFromPool(message) {
203
+ const error = errorPool[errorPoolIndex];
204
+ error.message = message;
205
+ errorPoolIndex = (errorPoolIndex + 1) % ERROR_POOL_SIZE;
206
+ return error;
207
+ }
208
+ function getPooledString(key) {
209
+ let pooled = errorMessagePool.get(key);
210
+ if (!pooled) {
211
+ pooled = key;
212
+ errorMessagePool.set(key, key);
213
+ }
214
+ return pooled;
215
+ }
216
+ function getUltraSchemaCompiler(schema) {
217
+ let compiler = ultraSchemaCache.get(schema);
218
+ if (compiler) {
219
+ schemaCacheHits.set(schema, (schemaCacheHits.get(schema) || 0) + 1);
220
+ return compiler;
221
+ }
222
+ try {
223
+ compiler = TypeCompiler.Compile(schema);
224
+ ultraSchemaCache.set(schema, compiler);
225
+ return compiler;
226
+ } catch (error) {
227
+ return null;
228
+ }
229
+ }
230
+ function getSchemaFlags(config) {
231
+ let flags = 0;
232
+ if (config.body) flags |= SCHEMA_FLAGS.BODY;
233
+ if (config.query) flags |= SCHEMA_FLAGS.QUERY;
234
+ if (config.params) flags |= SCHEMA_FLAGS.PARAMS;
235
+ if (config.headers) flags |= SCHEMA_FLAGS.HEADERS;
236
+ if (config.cookies) flags |= SCHEMA_FLAGS.COOKIES;
237
+ return flags;
238
+ }
239
+ function validateSchemaUltra(schema, data, context) {
240
+ if (!schema) return data;
241
+ try {
242
+ let compiler = ultraSchemaCache.get(schema);
243
+ if (!compiler) {
244
+ try {
245
+ compiler = TypeCompiler.Compile(schema);
246
+ ultraSchemaCache.set(schema, compiler);
247
+ } catch (error) {
248
+ const message = getPooledString(`${context}\u9A8C\u8BC1\u5931\u8D25: Schema\u7F16\u8BD1\u5931\u8D25`);
249
+ throw getErrorFromPool(message);
250
+ }
251
+ }
252
+ const result = compiler.Check(data);
253
+ if (!result) {
254
+ const message = getPooledString(`${context}\u9A8C\u8BC1\u5931\u8D25`);
255
+ throw getErrorFromPool(message);
256
+ }
257
+ return data;
258
+ } catch (error) {
259
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
260
+ throw error;
261
+ }
262
+ const message = getPooledString(
263
+ `${context}\u9A8C\u8BC1\u5931\u8D25: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`
264
+ );
265
+ throw getErrorFromPool(message);
266
+ }
267
+ }
268
+ function validateAllSchemasUltra(config, data) {
269
+ const flags = getSchemaFlags(config);
270
+ if (flags & SCHEMA_FLAGS.BODY) {
271
+ validateSchemaUltra(config.body, data.body, "\u8BF7\u6C42\u4F53");
272
+ }
273
+ if (flags & SCHEMA_FLAGS.QUERY) {
274
+ validateSchemaUltra(config.query, data.query, "Query\u53C2\u6570");
275
+ }
276
+ if (flags & SCHEMA_FLAGS.PARAMS) {
277
+ validateSchemaUltra(config.params, data.params, "\u8DEF\u5F84\u53C2\u6570");
278
+ }
279
+ if (flags & SCHEMA_FLAGS.HEADERS) {
280
+ validateSchemaUltra(config.headers, data.headers, "\u8BF7\u6C42\u5934");
281
+ }
282
+ if (flags & SCHEMA_FLAGS.COOKIES) {
283
+ validateSchemaUltra(config.cookies, data.cookies, "Cookie");
284
+ }
285
+ return data;
286
+ }
287
+ function precompileSchemasUltra(config) {
288
+ const flags = getSchemaFlags(config);
289
+ if (flags & SCHEMA_FLAGS.BODY && config.body) {
290
+ getUltraSchemaCompiler(config.body);
291
+ }
292
+ if (flags & SCHEMA_FLAGS.QUERY && config.query) {
293
+ getUltraSchemaCompiler(config.query);
294
+ }
295
+ if (flags & SCHEMA_FLAGS.PARAMS && config.params) {
296
+ getUltraSchemaCompiler(config.params);
297
+ }
298
+ if (flags & SCHEMA_FLAGS.HEADERS && config.headers) {
299
+ getUltraSchemaCompiler(config.headers);
300
+ }
301
+ if (flags & SCHEMA_FLAGS.COOKIES && config.cookies) {
302
+ getUltraSchemaCompiler(config.cookies);
303
+ }
304
+ }
305
+
306
+ // src/utils/create-handler.ts
307
+ function autoResponse(result) {
308
+ if (result instanceof Response) {
309
+ return result;
310
+ }
311
+ if (result === null || result === void 0) {
312
+ return new Response(null, { status: 204 });
313
+ }
314
+ if (typeof result === "string") {
315
+ return new Response(result, {
316
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
317
+ });
318
+ }
319
+ if (typeof result === "number" || typeof result === "boolean") {
320
+ return new Response(String(result), {
321
+ headers: { "Content-Type": "text/plain; charset=utf-8" }
322
+ });
323
+ }
324
+ if (typeof result === "object") {
325
+ const obj = result;
326
+ if ("data" in obj && ("status" in obj || "headers" in obj)) {
327
+ const { data, status = 200, headers = {} } = obj;
328
+ if (data === null || data === void 0) {
329
+ return new Response(null, {
330
+ status: status === 200 ? 204 : status,
331
+ headers
332
+ });
333
+ }
334
+ if (typeof data === "string" || typeof data === "number" || typeof data === "boolean") {
335
+ return new Response(String(data), {
336
+ status,
337
+ headers: {
338
+ "Content-Type": "text/plain; charset=utf-8",
339
+ ...headers
340
+ }
341
+ });
342
+ }
343
+ return json(data, status, headers);
344
+ }
345
+ return json(result);
346
+ }
347
+ return new Response(null, { status: 204 });
348
+ }
349
+ function handleValidationError(error) {
350
+ return json(
351
+ {
352
+ success: false,
353
+ error: "Validation Error",
354
+ message: error.message,
355
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
356
+ },
357
+ 400
358
+ );
359
+ }
360
+ function handleInternalError(error) {
361
+ return json(
362
+ {
363
+ success: false,
364
+ error: "Internal Error",
365
+ message: error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"
366
+ },
367
+ 500
368
+ );
369
+ }
370
+ function isHandler(value) {
371
+ return typeof value === "function";
372
+ }
373
+ function createHandler(schemaOrHandler, maybeHandler) {
374
+ const hasSchema = !isHandler(schemaOrHandler);
375
+ const schema = hasSchema ? schemaOrHandler : {};
376
+ const handler = hasSchema ? maybeHandler : schemaOrHandler;
377
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
378
+ precompileSchemasUltra(schema);
379
+ }
380
+ return async (req) => {
381
+ try {
382
+ const query = parseQuery(req);
383
+ const headers = parseHeaders(req);
384
+ const cookies = parseCookies(req);
385
+ const params = req.params || {};
386
+ let body = void 0;
387
+ if (req.method !== "GET" && req.method !== "HEAD") {
388
+ const [, parsedBody] = await goAwait(parseBody(req));
389
+ body = parsedBody;
390
+ }
391
+ const data = { body, query, params, headers, cookies };
392
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
393
+ validateAllSchemasUltra(schema, data);
394
+ }
395
+ const result = await handler({
396
+ req,
397
+ body,
398
+ query,
399
+ params,
400
+ headers,
401
+ cookies
402
+ });
403
+ return autoResponse(result);
404
+ } catch (error) {
405
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
406
+ return handleValidationError(error);
407
+ }
408
+ return handleInternalError(error);
409
+ }
410
+ };
411
+ }
412
+ function createHandlerWithExtra(schemaOrHandler, maybeHandler) {
413
+ const hasSchema = !isHandler(schemaOrHandler);
414
+ const schema = hasSchema ? schemaOrHandler : {};
415
+ const handler = hasSchema ? maybeHandler : schemaOrHandler;
416
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
417
+ precompileSchemasUltra(schema);
418
+ }
419
+ return async (req) => {
420
+ try {
421
+ const query = parseQuery(req);
422
+ const headers = parseHeaders(req);
423
+ const cookies = parseCookies(req);
424
+ const params = req.params || {};
425
+ let body = void 0;
426
+ if (req.method !== "GET" && req.method !== "HEAD") {
427
+ const [, parsedBody] = await goAwait(parseBody(req));
428
+ body = parsedBody;
429
+ }
430
+ const data = { body, query, params, headers, cookies };
431
+ if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
432
+ validateAllSchemasUltra(schema, data);
433
+ }
434
+ const extras = req.__locals ?? {};
435
+ const result = await handler({
436
+ req,
437
+ body,
438
+ query,
439
+ params,
440
+ headers,
441
+ cookies,
442
+ ...extras
443
+ });
444
+ return autoResponse(result);
445
+ } catch (error) {
446
+ if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
447
+ return handleValidationError(error);
448
+ }
449
+ return handleInternalError(error);
450
+ }
451
+ };
452
+ }
453
+ function simpleHandler(handler) {
454
+ return async (req) => {
455
+ try {
456
+ const result = await handler({ req });
457
+ return autoResponse(result);
458
+ } catch (error) {
459
+ return handleInternalError(error);
460
+ }
461
+ };
462
+ }
463
+
464
+ // src/utils/base64url.ts
465
+ function base64urlEncode(str) {
466
+ return btoa(str).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
467
+ }
468
+ function base64urlDecode(str) {
469
+ const pad = str.length % 4 === 0 ? "" : "=".repeat(4 - str.length % 4);
470
+ const base64 = str.replace(/-/g, "+").replace(/_/g, "/") + pad;
471
+ return atob(base64);
472
+ }
473
+
474
+ // src/utils/handle.ts
475
+ function setLocals(req, extras) {
476
+ const target = req;
477
+ target.__locals = { ...target.__locals ?? {}, ...extras };
478
+ }
479
+ function getLocals(req) {
480
+ const target = req;
481
+ return target.__locals ?? {};
482
+ }
483
+
484
+ // src/utils/request-validator.ts
485
+ async function parseRequest(request, params) {
486
+ const requestData = {
487
+ body: void 0,
488
+ query: parseQuery(request),
489
+ params: params || {},
490
+ headers: parseHeaders(request),
491
+ cookies: parseCookies(request)
492
+ };
493
+ if (request.method !== "GET" && request.method !== "HEAD") {
494
+ requestData.body = await parseBody(request);
495
+ }
496
+ return requestData;
497
+ }
498
+ function validateRequest(config, requestData) {
499
+ try {
500
+ const validatedData = validateAllSchemasUltra(config, requestData);
501
+ return {
502
+ success: true,
503
+ data: validatedData
504
+ };
505
+ } catch (error) {
506
+ return {
507
+ success: false,
508
+ errors: [
509
+ {
510
+ field: "unknown",
511
+ message: error instanceof Error ? error.message : "\u9A8C\u8BC1\u5931\u8D25"
512
+ }
513
+ ]
514
+ };
515
+ }
516
+ }
517
+ async function parseAndValidateRequest(request, config, params) {
518
+ try {
519
+ const requestData = await parseRequest(request, params);
520
+ return validateRequest(config, requestData);
521
+ } catch (error) {
522
+ return {
523
+ success: false,
524
+ errors: [
525
+ {
526
+ field: "unknown",
527
+ message: error instanceof Error ? error.message : "\u8BF7\u6C42\u89E3\u6790\u5931\u8D25"
528
+ }
529
+ ]
530
+ };
531
+ }
532
+ }
533
+ function createRequestValidator(config) {
534
+ return async (request, params) => {
535
+ return parseAndValidateRequest(request, config, params);
536
+ };
537
+ }
538
+
539
+ // src/utils/html-renderer.ts
540
+ var HtmlRenderer = class {
541
+ /**
542
+ * 生成基础HTML模板
543
+ */
544
+ static generateBaseHtml(content, context, clientScriptPath = "/client.js") {
545
+ return `
546
+ <!doctype html>
547
+ <html>
548
+ <head>
549
+ <meta charset="utf-8">
550
+ <title>Vafast SSR App</title>
551
+ <meta name="viewport" content="width=device-width, initial-scale=1">
552
+ </head>
553
+ <body>
554
+ <div id="app">${content}</div>
555
+ <script>
556
+ window.__ROUTE_INFO__ = {
557
+ params: ${JSON.stringify(context.params || {})},
558
+ query: ${JSON.stringify(context.query || {})},
559
+ pathname: '${context.pathname}'
560
+ };
561
+ </script>
562
+ <script type="module" src="${clientScriptPath}"></script>
563
+ </body>
564
+ </html>
565
+ `;
566
+ }
567
+ /**
568
+ * 生成Vue组件HTML
569
+ */
570
+ static generateVueHtml(content, context, clientScriptPath = "/client.js") {
571
+ return this.generateBaseHtml(content, context, clientScriptPath);
572
+ }
573
+ /**
574
+ * 生成React组件HTML
575
+ */
576
+ static generateReactHtml(content, context, clientScriptPath = "/client.js") {
577
+ return `
578
+ <!doctype html>
579
+ <html>
580
+ <head>
581
+ <meta charset="utf-8">
582
+ <title>Vafast SSR App</title>
583
+ <meta name="viewport" content="width=device-width, initial-scale=1">
584
+ </head>
585
+ <body>
586
+ <div id="root">${content}</div>
587
+ <script>
588
+ window.__ROUTE_INFO__ = {
589
+ params: ${JSON.stringify(context.params || {})},
590
+ query: ${JSON.stringify(context.query || {})},
591
+ pathname: '${context.pathname}'
592
+ };
593
+ </script>
594
+ <script type="module" src="${clientScriptPath}"></script>
595
+ </body>
596
+ </html>
597
+ `;
598
+ }
599
+ };
600
+
601
+ // src/utils/dependency-manager.ts
602
+ var DependencyManager = class {
603
+ dependencyCache = /* @__PURE__ */ new Map();
604
+ /**
605
+ * 按需获取框架依赖
606
+ */
607
+ async getFrameworkDeps(framework) {
608
+ if (this.dependencyCache.has(framework)) {
609
+ return this.dependencyCache.get(framework);
610
+ }
611
+ console.log(`\u{1F4E6} \u6309\u9700\u52A0\u8F7D ${framework} \u4F9D\u8D56...`);
612
+ try {
613
+ let deps;
614
+ switch (framework) {
615
+ case "vue":
616
+ deps = await Promise.all([
617
+ import("vue"),
618
+ import("@vue/server-renderer")
619
+ ]);
620
+ break;
621
+ case "react":
622
+ deps = await Promise.all([
623
+ import("react"),
624
+ import("react-dom/server")
625
+ ]);
626
+ break;
627
+ default:
628
+ throw new Error(`\u4E0D\u652F\u6301\u7684\u6846\u67B6: ${framework}`);
629
+ }
630
+ this.dependencyCache.set(framework, deps);
631
+ console.log(`\u2705 ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5B8C\u6210`);
632
+ return deps;
633
+ } catch (error) {
634
+ console.error(`\u274C ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5931\u8D25:`, error);
635
+ throw error;
636
+ }
637
+ }
638
+ /**
639
+ * 检测组件类型
640
+ */
641
+ detectComponentType(component) {
642
+ if (component.render && typeof component.render === "function") {
643
+ return "vue";
644
+ }
645
+ if (component.$$typeof) {
646
+ return "react";
647
+ }
648
+ return "vue";
649
+ }
650
+ /**
651
+ * 清除缓存
652
+ */
653
+ clearCache() {
654
+ this.dependencyCache.clear();
655
+ console.log("\u{1F9F9} \u4F9D\u8D56\u7F13\u5B58\u5DF2\u6E05\u9664");
656
+ }
657
+ /**
658
+ * 获取缓存状态
659
+ */
660
+ getCacheStatus() {
661
+ const status = {};
662
+ for (const [framework] of this.dependencyCache) {
663
+ status[framework] = true;
664
+ }
665
+ return status;
666
+ }
667
+ };
668
+
669
+ // src/utils/validators/validators.ts
670
+ import { Type } from "@sinclair/typebox";
671
+ import { TypeCompiler as TypeCompiler2 } from "@sinclair/typebox/compiler";
672
+ var compilerCache = /* @__PURE__ */ new WeakMap();
673
+ function getCompiledValidator(schema) {
674
+ let compiler = compilerCache.get(schema);
675
+ if (!compiler) {
676
+ compiler = TypeCompiler2.Compile(schema);
677
+ compilerCache.set(schema, compiler);
678
+ }
679
+ return compiler;
680
+ }
681
+ function precompileSchemas(schemas) {
682
+ for (const schema of schemas) {
683
+ getCompiledValidator(schema);
684
+ }
685
+ }
686
+ function validateSchema(schema, data) {
687
+ try {
688
+ const compiler = getCompiledValidator(schema);
689
+ if (compiler.Check(data)) {
690
+ return {
691
+ success: true,
692
+ data
693
+ };
694
+ }
695
+ const errors = [];
696
+ const errorIterator = compiler.Errors(data);
697
+ for (const error of errorIterator) {
698
+ errors.push({
699
+ path: error.path,
700
+ message: error.message,
701
+ code: "VALIDATION_FAILED",
702
+ value: error.value,
703
+ schema: error.schema
704
+ });
705
+ }
706
+ return {
707
+ success: false,
708
+ errors
709
+ };
710
+ } catch (error) {
711
+ return {
712
+ success: false,
713
+ errors: [
714
+ {
715
+ path: "",
716
+ message: error instanceof Error ? error.message : "Unknown validation error",
717
+ code: "VALIDATION_EXCEPTION",
718
+ value: data
719
+ }
720
+ ]
721
+ };
722
+ }
723
+ }
724
+ function createValidator(schema) {
725
+ const compiler = getCompiledValidator(schema);
726
+ return (data) => {
727
+ if (compiler.Check(data)) {
728
+ return { success: true, data };
729
+ }
730
+ const errors = [];
731
+ for (const error of compiler.Errors(data)) {
732
+ errors.push({
733
+ path: error.path,
734
+ message: error.message,
735
+ code: "VALIDATION_FAILED",
736
+ value: error.value,
737
+ schema: error.schema
738
+ });
739
+ }
740
+ return { success: false, errors };
741
+ };
742
+ }
743
+ function validateFast(schema, data) {
744
+ const compiler = getCompiledValidator(schema);
745
+ return compiler.Check(data);
746
+ }
747
+ function getValidatorCacheStats() {
748
+ return {
749
+ cacheType: "WeakMap",
750
+ note: "WeakMap \u4E0D\u652F\u6301 size \u5C5E\u6027\uFF0C\u7F13\u5B58\u4F1A\u968F Schema \u5BF9\u8C61\u81EA\u52A8\u6E05\u7406"
751
+ };
752
+ }
753
+ export {
754
+ DependencyManager,
755
+ HtmlRenderer,
756
+ base64urlDecode,
757
+ base64urlEncode,
758
+ createHandler,
759
+ createHandlerWithExtra,
760
+ createRequestValidator,
761
+ createValidator,
762
+ empty,
763
+ getCookie,
764
+ getHeader,
765
+ getLocals,
766
+ getValidatorCacheStats,
767
+ goAwait,
768
+ html,
769
+ json,
770
+ parseAndValidateRequest,
771
+ parseBody,
772
+ parseCookies,
773
+ parseCookiesFast,
774
+ parseHeaders,
775
+ parseQuery,
776
+ parseQueryFast,
777
+ parseRequest,
778
+ precompileSchemas,
779
+ redirect,
780
+ setLocals,
781
+ simpleHandler,
782
+ stream,
783
+ text,
784
+ validateFast,
785
+ validateRequest,
786
+ validateSchema
787
+ };
1
788
  /**
2
- * 工具函数模块导出
789
+ * Go 风格的错误处理工具
790
+ * 将 Promise 转换为 [Error | null, T | undefined] 格式
791
+ *
792
+ * @author Framework Team
793
+ * @version 1.0.0
794
+ * @license MIT
3
795
  */
4
- // 处理器工厂
5
- export { createHandler, createHandlerWithExtra, simpleHandler, } from "./create-handler";
6
- // 请求解析
7
- export { parseBody, parseQuery, parseQueryFast, parseHeaders, getHeader, parseCookies, parseCookiesFast, getCookie, } from "./parsers";
8
- // 响应工具
9
- export { json, text, html, redirect, empty, stream } from "./response";
10
- // Go 风格错误处理
11
- export { goAwait } from "./go-await";
12
- // Base64 编码
13
- export { base64urlEncode, base64urlDecode } from "./base64url";
14
- // 请求上下文
15
- export { setLocals, getLocals } from "./handle";
16
- // 请求验证
17
- export { parseRequest, validateRequest, parseAndValidateRequest, createRequestValidator, } from "./request-validator";
18
- // HTML 渲染 (SSR)
19
- export { HtmlRenderer } from "./html-renderer";
20
- // 依赖管理
21
- export { DependencyManager } from "./dependency-manager";
22
- // 验证器(JIT 编译)
23
- export { validateSchema, createValidator, validateFast, precompileSchemas, getValidatorCacheStats, } from "./validators/validators";
796
+ /**
797
+ * 超优化版Schema验证器 v5.0.0
798
+ *
799
+ * 使用经过验证的优化技术,确保极致性能
800
+ * - 内联函数调用
801
+ * - 预编译缓存优化
802
+ * - 内存池优化
803
+ * - 位运算优化
804
+ * - 类型特化优化
805
+ * - 循环展开优化
806
+ * - 位掩码优化
807
+ * - 字符串池优化
808
+ * - 内联缓存优化
809
+ * - 内存对齐优化
810
+ *
811
+ * @author Framework Team
812
+ * @version 5.0.0
813
+ * @license MIT
814
+ */
815
+ /**
816
+ * 类型安全的路由处理器工厂
817
+ *
818
+ * 非柯里化设计,API 更简洁
819
+ *
820
+ * @author Framework Team
821
+ * @version 3.0.0
822
+ * @license MIT
823
+ */
824
+ /**
825
+ * 请求解析和验证器
826
+ *
827
+ * 解析handler的req参数,使用Ultra验证器进行验证,
828
+ * 并类型安全地返回解析出来的值
829
+ *
830
+ * @author Framework Team
831
+ * @version 1.0.0
832
+ * @license MIT
833
+ */
834
+ //# sourceMappingURL=index.js.map