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.
- package/dist/auth/token.d.ts +13 -11
- package/dist/auth/token.js +118 -111
- package/dist/auth/token.js.map +1 -0
- package/dist/defineRoute.d.ts +5 -2
- package/dist/defineRoute.js +7 -2
- package/dist/defineRoute.js.map +1 -0
- package/dist/index.d.ts +30 -14
- package/dist/index.js +2247 -15
- package/dist/index.js.map +1 -0
- package/dist/middleware/auth.d.ts +8 -6
- package/dist/middleware/auth.js +198 -99
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/authMiddleware.d.ts +5 -2
- package/dist/middleware/authMiddleware.js +55 -11
- package/dist/middleware/authMiddleware.js.map +1 -0
- package/dist/middleware/component-renderer.d.ts +4 -2
- package/dist/middleware/component-renderer.js +87 -80
- package/dist/middleware/component-renderer.js.map +1 -0
- package/dist/middleware/component-router.d.ts +8 -3
- package/dist/middleware/component-router.js +33 -39
- package/dist/middleware/component-router.js.map +1 -0
- package/dist/middleware/cors.d.ts +6 -3
- package/dist/middleware/cors.js +42 -29
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +5 -3
- package/dist/middleware/rateLimit.js +45 -29
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware.d.ts +6 -3
- package/dist/middleware.js +97 -51
- package/dist/middleware.js.map +1 -0
- package/dist/monitoring/index.d.ts +11 -4
- package/dist/monitoring/index.js +1299 -17
- package/dist/monitoring/index.js.map +1 -0
- package/dist/monitoring/native-monitor.d.ts +12 -6
- package/dist/monitoring/native-monitor.js +1258 -161
- package/dist/monitoring/native-monitor.js.map +1 -0
- package/dist/monitoring/types.d.ts +8 -6
- package/dist/monitoring/types.js +1 -1
- package/dist/monitoring/types.js.map +1 -0
- package/dist/node-server/index.d.ts +4 -22
- package/dist/node-server/index.js +254 -21
- package/dist/node-server/index.js.map +1 -0
- package/dist/node-server/request.d.ts +6 -2
- package/dist/node-server/request.js +102 -134
- package/dist/node-server/request.js.map +1 -0
- package/dist/node-server/response.d.ts +7 -3
- package/dist/node-server/response.js +67 -89
- package/dist/node-server/response.js.map +1 -0
- package/dist/node-server/serve.d.ts +11 -7
- package/dist/node-server/serve.js +231 -82
- package/dist/node-server/serve.js.map +1 -0
- package/dist/router/index.d.ts +3 -5
- package/dist/router/index.js +228 -7
- package/dist/router/index.js.map +1 -0
- package/dist/router/radix-tree.d.ts +7 -4
- package/dist/router/radix-tree.js +186 -218
- package/dist/router/radix-tree.js.map +1 -0
- package/dist/router.d.ts +7 -3
- package/dist/router.js +37 -83
- package/dist/router.js.map +1 -0
- package/dist/serve.d.ts +2 -12
- package/dist/serve.js +237 -11
- package/dist/serve.js.map +1 -0
- package/dist/server/base-server.d.ts +5 -2
- package/dist/server/base-server.js +124 -135
- package/dist/server/base-server.js.map +1 -0
- package/dist/server/component-server.d.ts +9 -4
- package/dist/server/component-server.js +481 -139
- package/dist/server/component-server.js.map +1 -0
- package/dist/server/index.d.ts +8 -7
- package/dist/server/index.js +985 -11
- package/dist/server/index.js.map +1 -0
- package/dist/server/server-factory.d.ts +11 -5
- package/dist/server/server-factory.js +979 -67
- package/dist/server/server-factory.js.map +1 -0
- package/dist/server/server.d.ts +7 -3
- package/dist/server/server.js +553 -112
- package/dist/server/server.js.map +1 -0
- package/dist/types/component-route.d.ts +8 -4
- package/dist/types/component-route.js +1 -1
- package/dist/types/component-route.js.map +1 -0
- package/dist/types/index.d.ts +5 -5
- package/dist/types/index.js +21 -4
- package/dist/types/index.js.map +1 -0
- package/dist/types/route.d.ts +13 -10
- package/dist/types/route.js +10 -9
- package/dist/types/route.js.map +1 -0
- package/dist/types/schema.d.ts +11 -7
- package/dist/types/schema.js +1 -1
- package/dist/types/schema.js.map +1 -0
- package/dist/types/types.d.ts +11 -9
- package/dist/types/types.js +1 -1
- package/dist/types/types.js.map +1 -0
- package/dist/utils/base64url.d.ts +4 -2
- package/dist/utils/base64url.js +12 -9
- package/dist/utils/base64url.js.map +1 -0
- package/dist/utils/create-handler.d.ts +11 -7
- package/dist/utils/create-handler.js +393 -217
- package/dist/utils/create-handler.js.map +1 -0
- package/dist/utils/dependency-manager.d.ts +3 -1
- package/dist/utils/dependency-manager.js +67 -69
- package/dist/utils/dependency-manager.js.map +1 -0
- package/dist/utils/go-await.d.ts +3 -1
- package/dist/utils/go-await.js +8 -22
- package/dist/utils/go-await.js.map +1 -0
- package/dist/utils/handle.d.ts +6 -4
- package/dist/utils/handle.js +44 -25
- package/dist/utils/handle.js.map +1 -0
- package/dist/utils/html-renderer.d.ts +3 -1
- package/dist/utils/html-renderer.js +25 -24
- package/dist/utils/html-renderer.js.map +1 -0
- package/dist/utils/index.d.ts +13 -13
- package/dist/utils/index.js +832 -21
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/parsers.d.ts +15 -13
- package/dist/utils/parsers.js +138 -188
- package/dist/utils/parsers.js.map +1 -0
- package/dist/utils/path-matcher.d.ts +3 -1
- package/dist/utils/path-matcher.js +68 -78
- package/dist/utils/path-matcher.js.map +1 -0
- package/dist/utils/request-validator.d.ts +13 -10
- package/dist/utils/request-validator.js +234 -84
- package/dist/utils/request-validator.js.map +1 -0
- package/dist/utils/response.d.ts +9 -7
- package/dist/utils/response.js +93 -102
- package/dist/utils/response.js.map +1 -0
- package/dist/utils/validators/schema-validator.d.ts +13 -9
- package/dist/utils/validators/schema-validator.js +228 -209
- package/dist/utils/validators/schema-validator.js.map +1 -0
- package/dist/utils/validators/schema-validators-ultra.d.ts +15 -12
- package/dist/utils/validators/schema-validators-ultra.js +233 -256
- package/dist/utils/validators/schema-validators-ultra.js.map +1 -0
- package/dist/utils/validators/validators.d.ts +15 -12
- package/dist/utils/validators/validators.js +81 -122
- package/dist/utils/validators/validators.js.map +1 -0
- package/package.json +5 -4
|
@@ -1,234 +1,410 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
34
|
-
if (
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
375
|
+
* Go 风格的错误处理工具
|
|
376
|
+
* 将 Promise 转换为 [Error | null, T | undefined] 格式
|
|
216
377
|
*
|
|
217
|
-
* @
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* return { message: "Hello World" };
|
|
221
|
-
* })
|
|
222
|
-
* ```
|
|
378
|
+
* @author Framework Team
|
|
379
|
+
* @version 1.0.0
|
|
380
|
+
* @license MIT
|
|
223
381
|
*/
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
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
|