vafast 0.4.1 → 0.4.3
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/README.md +6 -10
- package/dist/auth/{token.d.ts → token.d.mts} +21 -19
- package/dist/auth/token.mjs +105 -0
- package/dist/auth/token.mjs.map +1 -0
- package/dist/base-server-Bq4_lJWK.mjs +113 -0
- package/dist/base-server-Bq4_lJWK.mjs.map +1 -0
- package/dist/base-server-Gakrozqk.d.mts +40 -0
- package/dist/base64url-BY-HBSpL.d.mts +6 -0
- package/dist/base64url-DLDOeXsk.mjs +13 -0
- package/dist/base64url-DLDOeXsk.mjs.map +1 -0
- package/dist/chunk-67U6L5Jh.mjs +37 -0
- package/dist/component-route-BYV_X1rA.d.mts +31 -0
- package/dist/component-route-Do2yyYTi.mjs +1 -0
- package/dist/component-router-DXUXLp1R.mjs +33 -0
- package/dist/component-router-DXUXLp1R.mjs.map +1 -0
- package/dist/component-server-ARXvZJUQ.mjs +124 -0
- package/dist/component-server-ARXvZJUQ.mjs.map +1 -0
- package/dist/component-server-BOz4Q-Qt.d.mts +38 -0
- package/dist/create-handler-CbSoroA1.mjs +166 -0
- package/dist/create-handler-CbSoroA1.mjs.map +1 -0
- package/dist/{utils/create-handler.d.ts → create-handler-Dtt0xv6g.d.mts} +24 -24
- package/dist/{defineRoute.d.ts → defineRoute.d.mts} +20 -17
- package/dist/defineRoute.mjs +93 -0
- package/dist/defineRoute.mjs.map +1 -0
- package/dist/dependency-manager-CPkwMI7J.mjs +61 -0
- package/dist/dependency-manager-CPkwMI7J.mjs.map +1 -0
- package/dist/dependency-manager-Dbug5INp.d.mts +27 -0
- package/dist/formats-BSqJWCsG.d.mts +42 -0
- package/dist/go-await-B-KP-K8x.mjs +33 -0
- package/dist/go-await-B-KP-K8x.mjs.map +1 -0
- package/dist/{utils/go-await.d.ts → go-await-CqPx9dVQ.d.mts} +4 -2
- package/dist/handle-BhpqNgGf.mjs +30 -0
- package/dist/handle-BhpqNgGf.mjs.map +1 -0
- package/dist/{utils/handle.d.ts → handle-DOidKTI-.d.mts} +8 -6
- package/dist/html-renderer-C3LKTLme.d.mts +22 -0
- package/dist/{utils/html-renderer.js → html-renderer-CJ3B2Hft.mjs} +34 -29
- package/dist/html-renderer-CJ3B2Hft.mjs.map +1 -0
- package/dist/index-DFsQyT61.d.mts +48 -0
- package/dist/index-DXJd7-2Z.d.mts +1 -0
- package/dist/index.d.mts +35 -0
- package/dist/index.mjs +42 -0
- package/dist/index.mjs.map +1 -0
- package/dist/middleware/{auth.d.ts → auth.d.mts} +12 -8
- package/dist/middleware/auth.mjs +98 -0
- package/dist/middleware/auth.mjs.map +1 -0
- package/dist/middleware/authMiddleware.d.mts +9 -0
- package/dist/middleware/authMiddleware.mjs +19 -0
- package/dist/middleware/authMiddleware.mjs.map +1 -0
- package/dist/middleware/{component-renderer.d.ts → component-renderer.d.mts} +3 -1
- package/dist/middleware/component-renderer.mjs +119 -0
- package/dist/middleware/component-renderer.mjs.map +1 -0
- package/dist/middleware/{component-router.d.ts → component-router.d.mts} +5 -4
- package/dist/middleware/component-router.mjs +4 -0
- package/dist/middleware/cors.d.mts +16 -0
- package/dist/middleware/cors.mjs +38 -0
- package/dist/middleware/cors.mjs.map +1 -0
- package/dist/middleware/rateLimit.d.mts +14 -0
- package/dist/middleware/rateLimit.mjs +34 -0
- package/dist/middleware/rateLimit.mjs.map +1 -0
- package/dist/middleware-3ShRJyd1.mjs +59 -0
- package/dist/middleware-3ShRJyd1.mjs.map +1 -0
- package/dist/middleware.d.mts +25 -0
- package/dist/middleware.mjs +4 -0
- package/dist/monitoring/index.d.mts +33 -0
- package/dist/monitoring/index.mjs +27 -0
- package/dist/monitoring/index.mjs.map +1 -0
- package/dist/monitoring/native-monitor.d.mts +48 -0
- package/dist/monitoring/native-monitor.mjs +154 -0
- package/dist/monitoring/native-monitor.mjs.map +1 -0
- package/dist/monitoring/types.d.mts +150 -0
- package/dist/monitoring/types.mjs +1 -0
- package/dist/node-server/index.d.mts +4 -0
- package/dist/node-server/index.mjs +5 -0
- package/dist/node-server/{request.d.ts → request.d.mts} +4 -6
- package/dist/node-server/request.mjs +3 -0
- package/dist/node-server/{response.d.ts → response.d.mts} +4 -6
- package/dist/node-server/response.mjs +3 -0
- package/dist/node-server/serve.d.mts +2 -0
- package/dist/node-server/serve.mjs +4 -0
- package/dist/{utils/parsers.d.ts → parsers-CodQFP1Z.d.mts} +10 -8
- package/dist/parsers-ROIZWSGI.mjs +168 -0
- package/dist/parsers-ROIZWSGI.mjs.map +1 -0
- package/dist/path-matcher-CXMJ-IrG.mjs +62 -0
- package/dist/path-matcher-CXMJ-IrG.mjs.map +1 -0
- package/dist/radix-tree-BWmhTLhT.mjs +157 -0
- package/dist/radix-tree-BWmhTLhT.mjs.map +1 -0
- package/dist/request-B2BkUecT.mjs +133 -0
- package/dist/request-B2BkUecT.mjs.map +1 -0
- package/dist/request-validator-Dyqng-H_.mjs +77 -0
- package/dist/request-validator-Dyqng-H_.mjs.map +1 -0
- package/dist/request-validator-u2Ccj3_x.d.mts +67 -0
- package/dist/response-BhFKEphr.mjs +72 -0
- package/dist/response-BhFKEphr.mjs.map +1 -0
- package/dist/response-CSKW5hsS.mjs +97 -0
- package/dist/response-CSKW5hsS.mjs.map +1 -0
- package/dist/{utils/response.d.ts → response-CUyV5FIm.d.mts} +4 -2
- package/dist/route-BRR15b-p.mjs +11 -0
- package/dist/route-BRR15b-p.mjs.map +1 -0
- package/dist/route-BqmWCG4e.d.mts +44 -0
- package/dist/route-registry-AlkDgbcE.mjs +225 -0
- package/dist/route-registry-AlkDgbcE.mjs.map +1 -0
- package/dist/route-registry-ykzRmaHB.d.mts +176 -0
- package/dist/router/index.d.mts +5 -0
- package/dist/router/index.mjs +10 -0
- package/dist/router/index.mjs.map +1 -0
- package/dist/router/radix-tree.d.mts +60 -0
- package/dist/router/radix-tree.mjs +4 -0
- package/dist/router-BOeVQrjz.mjs +71 -0
- package/dist/router-BOeVQrjz.mjs.map +1 -0
- package/dist/{router.d.ts → router.d.mts} +6 -7
- package/dist/router.mjs +4 -0
- package/dist/schema-CVuttFSw.d.mts +81 -0
- package/dist/schema-CbAaktsZ.mjs +1 -0
- package/dist/serve-BQQ2JzIH.d.mts +69 -0
- package/dist/serve-MRGGK7-q.mjs +107 -0
- package/dist/serve-MRGGK7-q.mjs.map +1 -0
- package/dist/serve.d.mts +2 -0
- package/dist/serve.mjs +4 -0
- package/dist/server/base-server.d.mts +4 -0
- package/dist/server/base-server.mjs +4 -0
- package/dist/server/component-server.d.mts +5 -0
- package/dist/server/component-server.mjs +5 -0
- package/dist/server/index.d.mts +7 -0
- package/dist/server/index.mjs +8 -0
- package/dist/server/server-factory.d.mts +7 -0
- package/dist/server/server-factory.mjs +6 -0
- package/dist/server/server.d.mts +5 -0
- package/dist/server/server.mjs +4 -0
- package/dist/server-B0nzGCG5.mjs +88 -0
- package/dist/server-B0nzGCG5.mjs.map +1 -0
- package/dist/server-C8WCshmG.mjs +137 -0
- package/dist/server-C8WCshmG.mjs.map +1 -0
- package/dist/server-Drc2kSxp.d.mts +60 -0
- package/dist/sse-BOd2pvUK.d.mts +65 -0
- package/dist/sse-US5D9mgE.mjs +87 -0
- package/dist/sse-US5D9mgE.mjs.map +1 -0
- package/dist/types/component-route.d.mts +2 -0
- package/dist/types/component-route.mjs +1 -0
- package/dist/types/index.d.mts +6 -0
- package/dist/types/index.mjs +3 -0
- package/dist/types/route.d.mts +2 -0
- package/dist/types/route.mjs +3 -0
- package/dist/types/schema.d.mts +2 -0
- package/dist/types/schema.mjs +1 -0
- package/dist/types/types.d.mts +2 -0
- package/dist/types/types.mjs +1 -0
- package/dist/{types/types.d.ts → types-Cb7_2VSt.d.mts} +27 -23
- package/dist/utils/base64url.d.mts +2 -0
- package/dist/utils/base64url.mjs +3 -0
- package/dist/utils/create-handler.d.mts +3 -0
- package/dist/utils/create-handler.mjs +5 -0
- package/dist/utils/dependency-manager.d.mts +2 -0
- package/dist/utils/dependency-manager.mjs +4 -0
- package/dist/utils/formats.d.mts +2 -0
- package/dist/utils/formats.mjs +129 -0
- package/dist/utils/formats.mjs.map +1 -0
- package/dist/utils/go-await.d.mts +2 -0
- package/dist/utils/go-await.mjs +3 -0
- package/dist/utils/handle.d.mts +2 -0
- package/dist/utils/handle.mjs +4 -0
- package/dist/utils/html-renderer.d.mts +2 -0
- package/dist/utils/html-renderer.mjs +4 -0
- package/dist/utils/index.d.mts +16 -0
- package/dist/utils/index.mjs +23 -0
- package/dist/utils/index.mjs.map +1 -0
- package/dist/utils/parsers.d.mts +2 -0
- package/dist/utils/parsers.mjs +3 -0
- package/dist/utils/path-matcher.d.mts +27 -0
- package/dist/utils/path-matcher.mjs +4 -0
- package/dist/utils/request-validator.d.mts +3 -0
- package/dist/utils/request-validator.mjs +5 -0
- package/dist/utils/response.d.mts +2 -0
- package/dist/utils/response.mjs +4 -0
- package/dist/utils/route-registry.d.mts +4 -0
- package/dist/utils/route-registry.mjs +4 -0
- package/dist/utils/sse.d.mts +3 -0
- package/dist/utils/sse.mjs +5 -0
- package/dist/utils/validators/validators.d.mts +2 -0
- package/dist/utils/validators/validators.mjs +3 -0
- package/dist/validators-C0eZyxPh.d.mts +67 -0
- package/dist/validators-CbCLj0Rc.mjs +112 -0
- package/dist/validators-CbCLj0Rc.mjs.map +1 -0
- package/package.json +16 -18
- package/dist/auth/token.js +0 -131
- package/dist/auth/token.js.map +0 -1
- package/dist/defineRoute.js +0 -37
- package/dist/defineRoute.js.map +0 -1
- package/dist/index.d.ts +0 -32
- package/dist/index.js +0 -2575
- package/dist/index.js.map +0 -1
- package/dist/middleware/auth.js +0 -205
- package/dist/middleware/auth.js.map +0 -1
- package/dist/middleware/authMiddleware.d.ts +0 -5
- package/dist/middleware/authMiddleware.js +0 -57
- package/dist/middleware/authMiddleware.js.map +0 -1
- package/dist/middleware/component-renderer.js +0 -139
- package/dist/middleware/component-renderer.js.map +0 -1
- package/dist/middleware/component-router.js +0 -36
- package/dist/middleware/component-router.js.map +0 -1
- package/dist/middleware/cors.d.ts +0 -12
- package/dist/middleware/cors.js +0 -43
- package/dist/middleware/cors.js.map +0 -1
- package/dist/middleware/rateLimit.d.ts +0 -10
- package/dist/middleware/rateLimit.js +0 -49
- package/dist/middleware/rateLimit.js.map +0 -1
- package/dist/middleware.d.ts +0 -21
- package/dist/middleware.js +0 -102
- package/dist/middleware.js.map +0 -1
- package/dist/monitoring/index.d.ts +0 -36
- package/dist/monitoring/index.js +0 -1484
- package/dist/monitoring/index.js.map +0 -1
- package/dist/monitoring/native-monitor.d.ts +0 -44
- package/dist/monitoring/native-monitor.js +0 -1451
- package/dist/monitoring/native-monitor.js.map +0 -1
- package/dist/monitoring/types.d.ts +0 -148
- package/dist/monitoring/types.js +0 -8
- package/dist/monitoring/types.js.map +0 -1
- package/dist/node-server/index.d.ts +0 -4
- package/dist/node-server/index.js +0 -298
- package/dist/node-server/index.js.map +0 -1
- package/dist/node-server/request.js +0 -125
- package/dist/node-server/request.js.map +0 -1
- package/dist/node-server/response.js +0 -76
- package/dist/node-server/response.js.map +0 -1
- package/dist/node-server/serve.d.ts +0 -71
- package/dist/node-server/serve.js +0 -281
- package/dist/node-server/serve.js.map +0 -1
- package/dist/router/index.d.ts +0 -3
- package/dist/router/index.js +0 -229
- package/dist/router/index.js.map +0 -1
- package/dist/router/radix-tree.d.ts +0 -66
- package/dist/router/radix-tree.js +0 -190
- package/dist/router/radix-tree.js.map +0 -1
- package/dist/router.js +0 -41
- package/dist/router.js.map +0 -1
- package/dist/serve.d.ts +0 -2
- package/dist/serve.js +0 -281
- package/dist/serve.js.map +0 -1
- package/dist/server/base-server.d.ts +0 -37
- package/dist/server/base-server.js +0 -134
- package/dist/server/base-server.js.map +0 -1
- package/dist/server/component-server.d.ts +0 -37
- package/dist/server/component-server.js +0 -488
- package/dist/server/component-server.js.map +0 -1
- package/dist/server/index.d.ts +0 -8
- package/dist/server/index.js +0 -1156
- package/dist/server/index.js.map +0 -1
- package/dist/server/server-factory.d.ts +0 -48
- package/dist/server/server-factory.js +0 -1153
- package/dist/server/server-factory.js.map +0 -1
- package/dist/server/server.d.ts +0 -64
- package/dist/server/server.js +0 -734
- package/dist/server/server.js.map +0 -1
- package/dist/types/component-route.d.ts +0 -29
- package/dist/types/component-route.js +0 -1
- package/dist/types/component-route.js.map +0 -1
- package/dist/types/index.d.ts +0 -5
- package/dist/types/index.js +0 -21
- package/dist/types/index.js.map +0 -1
- package/dist/types/route.d.ts +0 -42
- package/dist/types/route.js +0 -12
- package/dist/types/route.js.map +0 -1
- package/dist/types/schema.d.ts +0 -79
- package/dist/types/schema.js +0 -10
- package/dist/types/schema.js.map +0 -1
- package/dist/types/types.js +0 -1
- package/dist/types/types.js.map +0 -1
- package/dist/utils/base64url.d.ts +0 -4
- package/dist/utils/base64url.js +0 -14
- package/dist/utils/base64url.js.map +0 -1
- package/dist/utils/create-handler.js +0 -299
- package/dist/utils/create-handler.js.map +0 -1
- package/dist/utils/dependency-manager.d.ts +0 -25
- package/dist/utils/dependency-manager.js +0 -71
- package/dist/utils/dependency-manager.js.map +0 -1
- package/dist/utils/formats.d.ts +0 -40
- package/dist/utils/formats.js +0 -116
- package/dist/utils/formats.js.map +0 -1
- package/dist/utils/go-await.js +0 -16
- package/dist/utils/go-await.js.map +0 -1
- package/dist/utils/handle.js +0 -48
- package/dist/utils/handle.js.map +0 -1
- package/dist/utils/html-renderer.d.ts +0 -20
- package/dist/utils/html-renderer.js.map +0 -1
- package/dist/utils/index.d.ts +0 -16
- package/dist/utils/index.js +0 -1038
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/parsers.js +0 -160
- package/dist/utils/parsers.js.map +0 -1
- package/dist/utils/path-matcher.d.ts +0 -25
- package/dist/utils/path-matcher.js +0 -73
- package/dist/utils/path-matcher.js.map +0 -1
- package/dist/utils/request-validator.d.ts +0 -66
- package/dist/utils/request-validator.js +0 -158
- package/dist/utils/request-validator.js.map +0 -1
- package/dist/utils/response.js +0 -102
- package/dist/utils/response.js.map +0 -1
- package/dist/utils/route-registry.d.ts +0 -195
- package/dist/utils/route-registry.js +0 -152
- package/dist/utils/route-registry.js.map +0 -1
- package/dist/utils/sse.d.ts +0 -87
- package/dist/utils/sse.js +0 -181
- package/dist/utils/sse.js.map +0 -1
- package/dist/utils/validators/validators.d.ts +0 -76
- package/dist/utils/validators/validators.js +0 -97
- package/dist/utils/validators/validators.js.map +0 -1
package/dist/utils/index.js
DELETED
|
@@ -1,1038 +0,0 @@
|
|
|
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/validators.ts
|
|
169
|
-
import { Type } from "@sinclair/typebox";
|
|
170
|
-
import { TypeCompiler } from "@sinclair/typebox/compiler";
|
|
171
|
-
var compilerCache = /* @__PURE__ */ new WeakMap();
|
|
172
|
-
function getCompiledValidator(schema) {
|
|
173
|
-
let compiler = compilerCache.get(schema);
|
|
174
|
-
if (!compiler) {
|
|
175
|
-
compiler = TypeCompiler.Compile(schema);
|
|
176
|
-
compilerCache.set(schema, compiler);
|
|
177
|
-
}
|
|
178
|
-
return compiler;
|
|
179
|
-
}
|
|
180
|
-
function validateSchema(schema, data) {
|
|
181
|
-
try {
|
|
182
|
-
const compiler = getCompiledValidator(schema);
|
|
183
|
-
if (compiler.Check(data)) {
|
|
184
|
-
return { success: true, data };
|
|
185
|
-
}
|
|
186
|
-
const errors = [];
|
|
187
|
-
for (const error of compiler.Errors(data)) {
|
|
188
|
-
errors.push({
|
|
189
|
-
path: error.path,
|
|
190
|
-
message: error.message,
|
|
191
|
-
code: "VALIDATION_FAILED",
|
|
192
|
-
value: error.value
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
return { success: false, errors };
|
|
196
|
-
} catch (error) {
|
|
197
|
-
return {
|
|
198
|
-
success: false,
|
|
199
|
-
errors: [
|
|
200
|
-
{
|
|
201
|
-
path: "",
|
|
202
|
-
message: error instanceof Error ? error.message : "\u9A8C\u8BC1\u5F02\u5E38",
|
|
203
|
-
code: "VALIDATION_EXCEPTION"
|
|
204
|
-
}
|
|
205
|
-
]
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
function validateSchemaOrThrow(schema, data, context) {
|
|
210
|
-
const compiler = getCompiledValidator(schema);
|
|
211
|
-
if (!compiler.Check(data)) {
|
|
212
|
-
throw new Error(`${context}\u9A8C\u8BC1\u5931\u8D25`);
|
|
213
|
-
}
|
|
214
|
-
return data;
|
|
215
|
-
}
|
|
216
|
-
function validateFast(schema, data) {
|
|
217
|
-
const compiler = getCompiledValidator(schema);
|
|
218
|
-
return compiler.Check(data);
|
|
219
|
-
}
|
|
220
|
-
function validateAllSchemas(config, data) {
|
|
221
|
-
if (config.body) {
|
|
222
|
-
validateSchemaOrThrow(config.body, data.body, "\u8BF7\u6C42\u4F53");
|
|
223
|
-
}
|
|
224
|
-
if (config.query) {
|
|
225
|
-
validateSchemaOrThrow(config.query, data.query, "Query\u53C2\u6570");
|
|
226
|
-
}
|
|
227
|
-
if (config.params) {
|
|
228
|
-
validateSchemaOrThrow(config.params, data.params, "\u8DEF\u5F84\u53C2\u6570");
|
|
229
|
-
}
|
|
230
|
-
if (config.headers) {
|
|
231
|
-
validateSchemaOrThrow(config.headers, data.headers, "\u8BF7\u6C42\u5934");
|
|
232
|
-
}
|
|
233
|
-
if (config.cookies) {
|
|
234
|
-
validateSchemaOrThrow(config.cookies, data.cookies, "Cookie");
|
|
235
|
-
}
|
|
236
|
-
return data;
|
|
237
|
-
}
|
|
238
|
-
function precompileSchemas(config) {
|
|
239
|
-
if (config.body) getCompiledValidator(config.body);
|
|
240
|
-
if (config.query) getCompiledValidator(config.query);
|
|
241
|
-
if (config.params) getCompiledValidator(config.params);
|
|
242
|
-
if (config.headers) getCompiledValidator(config.headers);
|
|
243
|
-
if (config.cookies) getCompiledValidator(config.cookies);
|
|
244
|
-
}
|
|
245
|
-
function createValidator(schema) {
|
|
246
|
-
return (data) => validateSchema(schema, data);
|
|
247
|
-
}
|
|
248
|
-
function getValidatorCacheStats() {
|
|
249
|
-
return {
|
|
250
|
-
cacheType: "WeakMap",
|
|
251
|
-
note: "WeakMap \u7F13\u5B58\u4F1A\u968F Schema \u5BF9\u8C61\u81EA\u52A8\u6E05\u7406\uFF0C\u65E0\u5185\u5B58\u6CC4\u6F0F\u98CE\u9669"
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// src/utils/create-handler.ts
|
|
256
|
-
function autoResponse(result) {
|
|
257
|
-
if (result instanceof Response) {
|
|
258
|
-
return result;
|
|
259
|
-
}
|
|
260
|
-
if (result === null || result === void 0) {
|
|
261
|
-
return new Response(null, { status: 204 });
|
|
262
|
-
}
|
|
263
|
-
if (typeof result === "string") {
|
|
264
|
-
return new Response(result, {
|
|
265
|
-
headers: { "Content-Type": "text/plain; charset=utf-8" }
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
if (typeof result === "number" || typeof result === "boolean") {
|
|
269
|
-
return new Response(String(result), {
|
|
270
|
-
headers: { "Content-Type": "text/plain; charset=utf-8" }
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
if (typeof result === "object") {
|
|
274
|
-
const obj = result;
|
|
275
|
-
if ("data" in obj && ("status" in obj || "headers" in obj)) {
|
|
276
|
-
const { data, status = 200, headers = {} } = obj;
|
|
277
|
-
if (data === null || data === void 0) {
|
|
278
|
-
return new Response(null, {
|
|
279
|
-
status: status === 200 ? 204 : status,
|
|
280
|
-
headers
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
if (typeof data === "string" || typeof data === "number" || typeof data === "boolean") {
|
|
284
|
-
return new Response(String(data), {
|
|
285
|
-
status,
|
|
286
|
-
headers: {
|
|
287
|
-
"Content-Type": "text/plain; charset=utf-8",
|
|
288
|
-
...headers
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
return json(data, status, headers);
|
|
293
|
-
}
|
|
294
|
-
return json(result);
|
|
295
|
-
}
|
|
296
|
-
return new Response(null, { status: 204 });
|
|
297
|
-
}
|
|
298
|
-
function handleValidationError(error) {
|
|
299
|
-
return json(
|
|
300
|
-
{
|
|
301
|
-
success: false,
|
|
302
|
-
error: "Validation Error",
|
|
303
|
-
message: error.message,
|
|
304
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
305
|
-
},
|
|
306
|
-
400
|
|
307
|
-
);
|
|
308
|
-
}
|
|
309
|
-
function handleInternalError(error) {
|
|
310
|
-
return json(
|
|
311
|
-
{
|
|
312
|
-
success: false,
|
|
313
|
-
error: "Internal Error",
|
|
314
|
-
message: error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"
|
|
315
|
-
},
|
|
316
|
-
500
|
|
317
|
-
);
|
|
318
|
-
}
|
|
319
|
-
function isHandler(value) {
|
|
320
|
-
return typeof value === "function";
|
|
321
|
-
}
|
|
322
|
-
function createHandler(schemaOrHandler, maybeHandler) {
|
|
323
|
-
const hasSchema = !isHandler(schemaOrHandler);
|
|
324
|
-
const schema = hasSchema ? schemaOrHandler : {};
|
|
325
|
-
const handler = hasSchema ? maybeHandler : schemaOrHandler;
|
|
326
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
327
|
-
precompileSchemas(schema);
|
|
328
|
-
}
|
|
329
|
-
const handlerFn = async (req) => {
|
|
330
|
-
try {
|
|
331
|
-
const query = parseQuery(req);
|
|
332
|
-
const headers = parseHeaders(req);
|
|
333
|
-
const cookies = parseCookies(req);
|
|
334
|
-
const params = req.params || {};
|
|
335
|
-
let body = void 0;
|
|
336
|
-
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
337
|
-
const [, parsedBody] = await goAwait(parseBody(req));
|
|
338
|
-
body = parsedBody;
|
|
339
|
-
}
|
|
340
|
-
const data = { body, query, params, headers, cookies };
|
|
341
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
342
|
-
validateAllSchemas(schema, data);
|
|
343
|
-
}
|
|
344
|
-
const result = await handler({
|
|
345
|
-
req,
|
|
346
|
-
body,
|
|
347
|
-
query,
|
|
348
|
-
params,
|
|
349
|
-
headers,
|
|
350
|
-
cookies
|
|
351
|
-
});
|
|
352
|
-
return autoResponse(result);
|
|
353
|
-
} catch (error) {
|
|
354
|
-
if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
|
|
355
|
-
return handleValidationError(error);
|
|
356
|
-
}
|
|
357
|
-
return handleInternalError(error);
|
|
358
|
-
}
|
|
359
|
-
};
|
|
360
|
-
return handlerFn;
|
|
361
|
-
}
|
|
362
|
-
function createHandlerWithExtra(schemaOrHandler, maybeHandler) {
|
|
363
|
-
const hasSchema = !isHandler(schemaOrHandler);
|
|
364
|
-
const schema = hasSchema ? schemaOrHandler : {};
|
|
365
|
-
const handler = hasSchema ? maybeHandler : schemaOrHandler;
|
|
366
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
367
|
-
precompileSchemas(schema);
|
|
368
|
-
}
|
|
369
|
-
return async (req) => {
|
|
370
|
-
try {
|
|
371
|
-
const query = parseQuery(req);
|
|
372
|
-
const headers = parseHeaders(req);
|
|
373
|
-
const cookies = parseCookies(req);
|
|
374
|
-
const params = req.params || {};
|
|
375
|
-
let body = void 0;
|
|
376
|
-
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
377
|
-
const [, parsedBody] = await goAwait(parseBody(req));
|
|
378
|
-
body = parsedBody;
|
|
379
|
-
}
|
|
380
|
-
const data = { body, query, params, headers, cookies };
|
|
381
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
382
|
-
validateAllSchemas(schema, data);
|
|
383
|
-
}
|
|
384
|
-
const extras = req.__locals ?? {};
|
|
385
|
-
const result = await handler({
|
|
386
|
-
req,
|
|
387
|
-
body,
|
|
388
|
-
query,
|
|
389
|
-
params,
|
|
390
|
-
headers,
|
|
391
|
-
cookies,
|
|
392
|
-
...extras
|
|
393
|
-
});
|
|
394
|
-
return autoResponse(result);
|
|
395
|
-
} catch (error) {
|
|
396
|
-
if (error instanceof Error && error.message.includes("\u9A8C\u8BC1\u5931\u8D25")) {
|
|
397
|
-
return handleValidationError(error);
|
|
398
|
-
}
|
|
399
|
-
return handleInternalError(error);
|
|
400
|
-
}
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
function simpleHandler(handler) {
|
|
404
|
-
return async (req) => {
|
|
405
|
-
try {
|
|
406
|
-
const result = await handler({ req });
|
|
407
|
-
return autoResponse(result);
|
|
408
|
-
} catch (error) {
|
|
409
|
-
return handleInternalError(error);
|
|
410
|
-
}
|
|
411
|
-
};
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
// src/utils/base64url.ts
|
|
415
|
-
function base64urlEncode(str) {
|
|
416
|
-
return btoa(str).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_");
|
|
417
|
-
}
|
|
418
|
-
function base64urlDecode(str) {
|
|
419
|
-
const pad = str.length % 4 === 0 ? "" : "=".repeat(4 - str.length % 4);
|
|
420
|
-
const base64 = str.replace(/-/g, "+").replace(/_/g, "/") + pad;
|
|
421
|
-
return atob(base64);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
// src/utils/handle.ts
|
|
425
|
-
function setLocals(req, extras) {
|
|
426
|
-
const target = req;
|
|
427
|
-
target.__locals = { ...target.__locals ?? {}, ...extras };
|
|
428
|
-
}
|
|
429
|
-
function getLocals(req) {
|
|
430
|
-
const target = req;
|
|
431
|
-
return target.__locals ?? {};
|
|
432
|
-
}
|
|
433
|
-
|
|
434
|
-
// src/utils/request-validator.ts
|
|
435
|
-
async function parseRequest(request, params) {
|
|
436
|
-
const requestData = {
|
|
437
|
-
body: void 0,
|
|
438
|
-
query: parseQuery(request),
|
|
439
|
-
params: params || {},
|
|
440
|
-
headers: parseHeaders(request),
|
|
441
|
-
cookies: parseCookies(request)
|
|
442
|
-
};
|
|
443
|
-
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
444
|
-
requestData.body = await parseBody(request);
|
|
445
|
-
}
|
|
446
|
-
return requestData;
|
|
447
|
-
}
|
|
448
|
-
function validateRequest(config, requestData) {
|
|
449
|
-
try {
|
|
450
|
-
const validatedData = validateAllSchemas(config, requestData);
|
|
451
|
-
return {
|
|
452
|
-
success: true,
|
|
453
|
-
data: validatedData
|
|
454
|
-
};
|
|
455
|
-
} catch (error) {
|
|
456
|
-
return {
|
|
457
|
-
success: false,
|
|
458
|
-
errors: [
|
|
459
|
-
{
|
|
460
|
-
field: "unknown",
|
|
461
|
-
message: error instanceof Error ? error.message : "\u9A8C\u8BC1\u5931\u8D25"
|
|
462
|
-
}
|
|
463
|
-
]
|
|
464
|
-
};
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
async function parseAndValidateRequest(request, config, params) {
|
|
468
|
-
try {
|
|
469
|
-
const requestData = await parseRequest(request, params);
|
|
470
|
-
return validateRequest(config, requestData);
|
|
471
|
-
} catch (error) {
|
|
472
|
-
return {
|
|
473
|
-
success: false,
|
|
474
|
-
errors: [
|
|
475
|
-
{
|
|
476
|
-
field: "unknown",
|
|
477
|
-
message: error instanceof Error ? error.message : "\u8BF7\u6C42\u89E3\u6790\u5931\u8D25"
|
|
478
|
-
}
|
|
479
|
-
]
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
}
|
|
483
|
-
function createRequestValidator(config) {
|
|
484
|
-
return async (request, params) => {
|
|
485
|
-
return parseAndValidateRequest(request, config, params);
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
// src/utils/html-renderer.ts
|
|
490
|
-
var HtmlRenderer = class {
|
|
491
|
-
/**
|
|
492
|
-
* 生成基础HTML模板
|
|
493
|
-
*/
|
|
494
|
-
static generateBaseHtml(content, context, clientScriptPath = "/client.js") {
|
|
495
|
-
return `
|
|
496
|
-
<!doctype html>
|
|
497
|
-
<html>
|
|
498
|
-
<head>
|
|
499
|
-
<meta charset="utf-8">
|
|
500
|
-
<title>Vafast SSR App</title>
|
|
501
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
502
|
-
</head>
|
|
503
|
-
<body>
|
|
504
|
-
<div id="app">${content}</div>
|
|
505
|
-
<script>
|
|
506
|
-
window.__ROUTE_INFO__ = {
|
|
507
|
-
params: ${JSON.stringify(context.params || {})},
|
|
508
|
-
query: ${JSON.stringify(context.query || {})},
|
|
509
|
-
pathname: '${context.pathname}'
|
|
510
|
-
};
|
|
511
|
-
</script>
|
|
512
|
-
<script type="module" src="${clientScriptPath}"></script>
|
|
513
|
-
</body>
|
|
514
|
-
</html>
|
|
515
|
-
`;
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* 生成Vue组件HTML
|
|
519
|
-
*/
|
|
520
|
-
static generateVueHtml(content, context, clientScriptPath = "/client.js") {
|
|
521
|
-
return this.generateBaseHtml(content, context, clientScriptPath);
|
|
522
|
-
}
|
|
523
|
-
/**
|
|
524
|
-
* 生成React组件HTML
|
|
525
|
-
*/
|
|
526
|
-
static generateReactHtml(content, context, clientScriptPath = "/client.js") {
|
|
527
|
-
return `
|
|
528
|
-
<!doctype html>
|
|
529
|
-
<html>
|
|
530
|
-
<head>
|
|
531
|
-
<meta charset="utf-8">
|
|
532
|
-
<title>Vafast SSR App</title>
|
|
533
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
534
|
-
</head>
|
|
535
|
-
<body>
|
|
536
|
-
<div id="root">${content}</div>
|
|
537
|
-
<script>
|
|
538
|
-
window.__ROUTE_INFO__ = {
|
|
539
|
-
params: ${JSON.stringify(context.params || {})},
|
|
540
|
-
query: ${JSON.stringify(context.query || {})},
|
|
541
|
-
pathname: '${context.pathname}'
|
|
542
|
-
};
|
|
543
|
-
</script>
|
|
544
|
-
<script type="module" src="${clientScriptPath}"></script>
|
|
545
|
-
</body>
|
|
546
|
-
</html>
|
|
547
|
-
`;
|
|
548
|
-
}
|
|
549
|
-
};
|
|
550
|
-
|
|
551
|
-
// src/utils/dependency-manager.ts
|
|
552
|
-
var DependencyManager = class {
|
|
553
|
-
dependencyCache = /* @__PURE__ */ new Map();
|
|
554
|
-
/**
|
|
555
|
-
* 按需获取框架依赖
|
|
556
|
-
*/
|
|
557
|
-
async getFrameworkDeps(framework) {
|
|
558
|
-
if (this.dependencyCache.has(framework)) {
|
|
559
|
-
return this.dependencyCache.get(framework);
|
|
560
|
-
}
|
|
561
|
-
console.log(`\u{1F4E6} \u6309\u9700\u52A0\u8F7D ${framework} \u4F9D\u8D56...`);
|
|
562
|
-
try {
|
|
563
|
-
let deps;
|
|
564
|
-
switch (framework) {
|
|
565
|
-
case "vue":
|
|
566
|
-
deps = await Promise.all([
|
|
567
|
-
import("vue"),
|
|
568
|
-
import("@vue/server-renderer")
|
|
569
|
-
]);
|
|
570
|
-
break;
|
|
571
|
-
case "react":
|
|
572
|
-
deps = await Promise.all([
|
|
573
|
-
import("react"),
|
|
574
|
-
import("react-dom/server")
|
|
575
|
-
]);
|
|
576
|
-
break;
|
|
577
|
-
default:
|
|
578
|
-
throw new Error(`\u4E0D\u652F\u6301\u7684\u6846\u67B6: ${framework}`);
|
|
579
|
-
}
|
|
580
|
-
this.dependencyCache.set(framework, deps);
|
|
581
|
-
console.log(`\u2705 ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5B8C\u6210`);
|
|
582
|
-
return deps;
|
|
583
|
-
} catch (error) {
|
|
584
|
-
console.error(`\u274C ${framework} \u4F9D\u8D56\u52A0\u8F7D\u5931\u8D25:`, error);
|
|
585
|
-
throw error;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
/**
|
|
589
|
-
* 检测组件类型
|
|
590
|
-
*/
|
|
591
|
-
detectComponentType(component) {
|
|
592
|
-
if (component.render && typeof component.render === "function") {
|
|
593
|
-
return "vue";
|
|
594
|
-
}
|
|
595
|
-
if (component.$$typeof) {
|
|
596
|
-
return "react";
|
|
597
|
-
}
|
|
598
|
-
return "vue";
|
|
599
|
-
}
|
|
600
|
-
/**
|
|
601
|
-
* 清除缓存
|
|
602
|
-
*/
|
|
603
|
-
clearCache() {
|
|
604
|
-
this.dependencyCache.clear();
|
|
605
|
-
console.log("\u{1F9F9} \u4F9D\u8D56\u7F13\u5B58\u5DF2\u6E05\u9664");
|
|
606
|
-
}
|
|
607
|
-
/**
|
|
608
|
-
* 获取缓存状态
|
|
609
|
-
*/
|
|
610
|
-
getCacheStatus() {
|
|
611
|
-
const status = {};
|
|
612
|
-
for (const [framework] of this.dependencyCache) {
|
|
613
|
-
status[framework] = true;
|
|
614
|
-
}
|
|
615
|
-
return status;
|
|
616
|
-
}
|
|
617
|
-
};
|
|
618
|
-
|
|
619
|
-
// src/utils/formats.ts
|
|
620
|
-
import { FormatRegistry } from "@sinclair/typebox";
|
|
621
|
-
var EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
|
|
622
|
-
var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
623
|
-
var UUID_ANY_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
624
|
-
var CUID_REGEX = /^c[^\s-]{8,}$/i;
|
|
625
|
-
var CUID2_REGEX = /^[0-9a-z]+$/;
|
|
626
|
-
var ULID_REGEX = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
|
|
627
|
-
var NANOID_REGEX = /^[A-Za-z0-9_-]{21}$/;
|
|
628
|
-
var URL_REGEX = /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b[-a-zA-Z0-9()@:%_+.~#?&/=]*$/;
|
|
629
|
-
var IPV4_REGEX = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
|
|
630
|
-
var IPV6_REGEX = /^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::(?:[0-9a-fA-F]{1,4}:){0,6}[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,7}:$|^(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}$|^(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}$|^(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}$|^(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}$|^[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}$/;
|
|
631
|
-
var CIDR_REGEX = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\/(?:3[0-2]|[12]?[0-9])$/;
|
|
632
|
-
var DATE_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$/;
|
|
633
|
-
var TIME_REGEX = /^(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\.\d{1,3})?$/;
|
|
634
|
-
var DATE_TIME_REGEX = /^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])T(?:[01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](?:\.\d{1,3})?(?:Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])?$/;
|
|
635
|
-
var DURATION_REGEX = /^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+(?:\.\d+)?S)?)?$/;
|
|
636
|
-
var HOSTNAME_REGEX = /^(?=.{1,253}$)(?:(?!-)[a-zA-Z0-9-]{1,63}(?<!-)\.)*(?!-)[a-zA-Z0-9-]{1,63}(?<!-)$/;
|
|
637
|
-
var PHONE_CN_REGEX = /^1[3-9]\d{9}$/;
|
|
638
|
-
var PHONE_E164_REGEX = /^\+[1-9]\d{6,14}$/;
|
|
639
|
-
var OBJECTID_REGEX = /^[0-9a-fA-F]{24}$/;
|
|
640
|
-
var HEX_COLOR_REGEX = /^#(?:[0-9a-fA-F]{3}){1,2}$/;
|
|
641
|
-
var RGB_COLOR_REGEX = /^rgba?\(\s*(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\s*,\s*(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\s*,\s*(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/;
|
|
642
|
-
var BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
643
|
-
var BASE64URL_REGEX = /^[A-Za-z0-9_-]+$/;
|
|
644
|
-
var JWT_REGEX = /^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/;
|
|
645
|
-
var EMOJI_REGEX = /^[\p{Emoji}]+$/u;
|
|
646
|
-
var SLUG_REGEX = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
|
|
647
|
-
var SEMVER_REGEX = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
|
|
648
|
-
function isValidCreditCard(value) {
|
|
649
|
-
const digits = value.replace(/\D/g, "");
|
|
650
|
-
if (digits.length < 13 || digits.length > 19) return false;
|
|
651
|
-
let sum = 0;
|
|
652
|
-
let isEven = false;
|
|
653
|
-
for (let i = digits.length - 1; i >= 0; i--) {
|
|
654
|
-
let digit = parseInt(digits[i], 10);
|
|
655
|
-
if (isEven) {
|
|
656
|
-
digit *= 2;
|
|
657
|
-
if (digit > 9) digit -= 9;
|
|
658
|
-
}
|
|
659
|
-
sum += digit;
|
|
660
|
-
isEven = !isEven;
|
|
661
|
-
}
|
|
662
|
-
return sum % 10 === 0;
|
|
663
|
-
}
|
|
664
|
-
var isRegistered = false;
|
|
665
|
-
function registerFormats() {
|
|
666
|
-
if (isRegistered) return;
|
|
667
|
-
isRegistered = true;
|
|
668
|
-
FormatRegistry.Set("email", (v) => EMAIL_REGEX.test(v));
|
|
669
|
-
FormatRegistry.Set("uuid", (v) => UUID_REGEX.test(v));
|
|
670
|
-
FormatRegistry.Set("uuid-any", (v) => UUID_ANY_REGEX.test(v));
|
|
671
|
-
FormatRegistry.Set("cuid", (v) => CUID_REGEX.test(v));
|
|
672
|
-
FormatRegistry.Set("cuid2", (v) => CUID2_REGEX.test(v) && v.length >= 1);
|
|
673
|
-
FormatRegistry.Set("ulid", (v) => ULID_REGEX.test(v));
|
|
674
|
-
FormatRegistry.Set("nanoid", (v) => NANOID_REGEX.test(v));
|
|
675
|
-
FormatRegistry.Set("objectid", (v) => OBJECTID_REGEX.test(v));
|
|
676
|
-
FormatRegistry.Set("slug", (v) => SLUG_REGEX.test(v));
|
|
677
|
-
FormatRegistry.Set("url", (v) => URL_REGEX.test(v));
|
|
678
|
-
FormatRegistry.Set("uri", (v) => URL_REGEX.test(v));
|
|
679
|
-
FormatRegistry.Set("ipv4", (v) => IPV4_REGEX.test(v));
|
|
680
|
-
FormatRegistry.Set("ipv6", (v) => IPV6_REGEX.test(v));
|
|
681
|
-
FormatRegistry.Set("ip", (v) => IPV4_REGEX.test(v) || IPV6_REGEX.test(v));
|
|
682
|
-
FormatRegistry.Set("cidr", (v) => CIDR_REGEX.test(v));
|
|
683
|
-
FormatRegistry.Set("hostname", (v) => HOSTNAME_REGEX.test(v));
|
|
684
|
-
FormatRegistry.Set("date", (v) => DATE_REGEX.test(v));
|
|
685
|
-
FormatRegistry.Set("time", (v) => TIME_REGEX.test(v));
|
|
686
|
-
FormatRegistry.Set("date-time", (v) => DATE_TIME_REGEX.test(v));
|
|
687
|
-
FormatRegistry.Set("datetime", (v) => DATE_TIME_REGEX.test(v));
|
|
688
|
-
FormatRegistry.Set("duration", (v) => DURATION_REGEX.test(v));
|
|
689
|
-
FormatRegistry.Set("phone", (v) => PHONE_CN_REGEX.test(v));
|
|
690
|
-
FormatRegistry.Set("phone-cn", (v) => PHONE_CN_REGEX.test(v));
|
|
691
|
-
FormatRegistry.Set("phone-e164", (v) => PHONE_E164_REGEX.test(v));
|
|
692
|
-
FormatRegistry.Set("base64", (v) => BASE64_REGEX.test(v));
|
|
693
|
-
FormatRegistry.Set("base64url", (v) => BASE64URL_REGEX.test(v));
|
|
694
|
-
FormatRegistry.Set("jwt", (v) => JWT_REGEX.test(v));
|
|
695
|
-
FormatRegistry.Set("hex-color", (v) => HEX_COLOR_REGEX.test(v));
|
|
696
|
-
FormatRegistry.Set("rgb-color", (v) => RGB_COLOR_REGEX.test(v));
|
|
697
|
-
FormatRegistry.Set(
|
|
698
|
-
"color",
|
|
699
|
-
(v) => HEX_COLOR_REGEX.test(v) || RGB_COLOR_REGEX.test(v)
|
|
700
|
-
);
|
|
701
|
-
FormatRegistry.Set("emoji", (v) => EMOJI_REGEX.test(v));
|
|
702
|
-
FormatRegistry.Set("semver", (v) => SEMVER_REGEX.test(v));
|
|
703
|
-
FormatRegistry.Set("credit-card", isValidCreditCard);
|
|
704
|
-
}
|
|
705
|
-
function registerFormat(name, validator) {
|
|
706
|
-
FormatRegistry.Set(name, validator);
|
|
707
|
-
}
|
|
708
|
-
function hasFormat(name) {
|
|
709
|
-
return FormatRegistry.Has(name);
|
|
710
|
-
}
|
|
711
|
-
var Patterns = {
|
|
712
|
-
EMAIL: EMAIL_REGEX,
|
|
713
|
-
UUID: UUID_REGEX,
|
|
714
|
-
URL: URL_REGEX,
|
|
715
|
-
IPV4: IPV4_REGEX,
|
|
716
|
-
IPV6: IPV6_REGEX,
|
|
717
|
-
DATE: DATE_REGEX,
|
|
718
|
-
TIME: TIME_REGEX,
|
|
719
|
-
DATE_TIME: DATE_TIME_REGEX,
|
|
720
|
-
PHONE_CN: PHONE_CN_REGEX,
|
|
721
|
-
PHONE_E164: PHONE_E164_REGEX,
|
|
722
|
-
OBJECTID: OBJECTID_REGEX,
|
|
723
|
-
HEX_COLOR: HEX_COLOR_REGEX,
|
|
724
|
-
SLUG: SLUG_REGEX,
|
|
725
|
-
SEMVER: SEMVER_REGEX,
|
|
726
|
-
JWT: JWT_REGEX
|
|
727
|
-
};
|
|
728
|
-
|
|
729
|
-
// src/utils/sse.ts
|
|
730
|
-
function formatSSEEvent(event) {
|
|
731
|
-
const lines = [];
|
|
732
|
-
if (event.id !== void 0) {
|
|
733
|
-
lines.push(`id: ${event.id}`);
|
|
734
|
-
}
|
|
735
|
-
if (event.event !== void 0) {
|
|
736
|
-
lines.push(`event: ${event.event}`);
|
|
737
|
-
}
|
|
738
|
-
if (event.retry !== void 0) {
|
|
739
|
-
lines.push(`retry: ${event.retry}`);
|
|
740
|
-
}
|
|
741
|
-
const dataStr = typeof event.data === "string" ? event.data : JSON.stringify(event.data);
|
|
742
|
-
const dataLines = dataStr.split("\n");
|
|
743
|
-
for (const line of dataLines) {
|
|
744
|
-
lines.push(`data: ${line}`);
|
|
745
|
-
}
|
|
746
|
-
return lines.join("\n") + "\n\n";
|
|
747
|
-
}
|
|
748
|
-
function createSSEHandler(schemaOrGenerator, maybeGenerator) {
|
|
749
|
-
const hasSchema = typeof schemaOrGenerator !== "function";
|
|
750
|
-
const schema = hasSchema ? schemaOrGenerator : {};
|
|
751
|
-
const generator = hasSchema ? maybeGenerator : schemaOrGenerator;
|
|
752
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
753
|
-
precompileSchemas(schema);
|
|
754
|
-
}
|
|
755
|
-
const handlerFn = async (req) => {
|
|
756
|
-
try {
|
|
757
|
-
const query = parseQuery(req);
|
|
758
|
-
const headers = parseHeaders(req);
|
|
759
|
-
const cookies = parseCookies(req);
|
|
760
|
-
const params = req.params || {};
|
|
761
|
-
const data = { body: void 0, query, params, headers, cookies };
|
|
762
|
-
if (schema.body || schema.query || schema.params || schema.headers || schema.cookies) {
|
|
763
|
-
validateAllSchemas(schema, data);
|
|
764
|
-
}
|
|
765
|
-
const stream2 = new ReadableStream({
|
|
766
|
-
async start(controller) {
|
|
767
|
-
const encoder = new TextEncoder();
|
|
768
|
-
try {
|
|
769
|
-
const gen = generator({
|
|
770
|
-
req,
|
|
771
|
-
body: void 0,
|
|
772
|
-
query,
|
|
773
|
-
params,
|
|
774
|
-
headers,
|
|
775
|
-
cookies
|
|
776
|
-
});
|
|
777
|
-
for await (const event of gen) {
|
|
778
|
-
const formatted = formatSSEEvent(event);
|
|
779
|
-
controller.enqueue(encoder.encode(formatted));
|
|
780
|
-
}
|
|
781
|
-
} catch (error) {
|
|
782
|
-
const errorEvent = formatSSEEvent({
|
|
783
|
-
event: "error",
|
|
784
|
-
data: {
|
|
785
|
-
message: error instanceof Error ? error.message : "Unknown error"
|
|
786
|
-
}
|
|
787
|
-
});
|
|
788
|
-
controller.enqueue(encoder.encode(errorEvent));
|
|
789
|
-
} finally {
|
|
790
|
-
controller.close();
|
|
791
|
-
}
|
|
792
|
-
}
|
|
793
|
-
});
|
|
794
|
-
return new Response(stream2, {
|
|
795
|
-
headers: {
|
|
796
|
-
"Content-Type": "text/event-stream",
|
|
797
|
-
"Cache-Control": "no-cache",
|
|
798
|
-
"Connection": "keep-alive",
|
|
799
|
-
"X-Accel-Buffering": "no"
|
|
800
|
-
// Nginx 禁用缓冲
|
|
801
|
-
}
|
|
802
|
-
});
|
|
803
|
-
} catch (error) {
|
|
804
|
-
return new Response(
|
|
805
|
-
JSON.stringify({
|
|
806
|
-
success: false,
|
|
807
|
-
error: "Validation Error",
|
|
808
|
-
message: error instanceof Error ? error.message : "Unknown error"
|
|
809
|
-
}),
|
|
810
|
-
{
|
|
811
|
-
status: 400,
|
|
812
|
-
headers: { "Content-Type": "application/json" }
|
|
813
|
-
}
|
|
814
|
-
);
|
|
815
|
-
}
|
|
816
|
-
};
|
|
817
|
-
const handler = handlerFn;
|
|
818
|
-
handler.__sse = { __brand: "SSE" };
|
|
819
|
-
handler.__schema = schema;
|
|
820
|
-
handler.__returnType = void 0;
|
|
821
|
-
return handler;
|
|
822
|
-
}
|
|
823
|
-
|
|
824
|
-
// src/utils/route-registry.ts
|
|
825
|
-
var RouteRegistry = class {
|
|
826
|
-
/** 所有路由元信息 */
|
|
827
|
-
routes = [];
|
|
828
|
-
/** 路由映射表:METHOD:fullPath -> RouteMeta */
|
|
829
|
-
routeMap = /* @__PURE__ */ new Map();
|
|
830
|
-
/** 分类映射表:category -> RouteMeta[] */
|
|
831
|
-
categoryMap = /* @__PURE__ */ new Map();
|
|
832
|
-
constructor(routes) {
|
|
833
|
-
this.buildRegistry(routes);
|
|
834
|
-
}
|
|
835
|
-
/**
|
|
836
|
-
* 构建注册表
|
|
837
|
-
*/
|
|
838
|
-
buildRegistry(routes) {
|
|
839
|
-
for (const route of routes) {
|
|
840
|
-
const meta = {
|
|
841
|
-
method: route.method,
|
|
842
|
-
path: route.path,
|
|
843
|
-
fullPath: route.fullPath,
|
|
844
|
-
name: route.name,
|
|
845
|
-
description: route.description
|
|
846
|
-
};
|
|
847
|
-
for (const key of Object.keys(route)) {
|
|
848
|
-
if (!["method", "path", "fullPath", "name", "description", "handler", "middleware", "middlewareChain"].includes(key)) {
|
|
849
|
-
meta[key] = route[key];
|
|
850
|
-
}
|
|
851
|
-
}
|
|
852
|
-
this.routes.push(meta);
|
|
853
|
-
this.routeMap.set(`${route.method}:${route.fullPath}`, meta);
|
|
854
|
-
const category = this.extractCategory(route.fullPath);
|
|
855
|
-
if (!this.categoryMap.has(category)) {
|
|
856
|
-
this.categoryMap.set(category, []);
|
|
857
|
-
}
|
|
858
|
-
this.categoryMap.get(category).push(meta);
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
/**
|
|
862
|
-
* 提取分类(第一段路径)
|
|
863
|
-
*/
|
|
864
|
-
extractCategory(path) {
|
|
865
|
-
const segments = path.split("/").filter(Boolean);
|
|
866
|
-
return segments[0] || "root";
|
|
867
|
-
}
|
|
868
|
-
// ============================================
|
|
869
|
-
// 查询接口
|
|
870
|
-
// ============================================
|
|
871
|
-
/**
|
|
872
|
-
* 获取所有路由元信息
|
|
873
|
-
*/
|
|
874
|
-
getAll() {
|
|
875
|
-
return [...this.routes];
|
|
876
|
-
}
|
|
877
|
-
/**
|
|
878
|
-
* 按 method + path 查询路由
|
|
879
|
-
*/
|
|
880
|
-
get(method, path) {
|
|
881
|
-
return this.routeMap.get(`${method}:${path}`);
|
|
882
|
-
}
|
|
883
|
-
/**
|
|
884
|
-
* 检查路由是否存在
|
|
885
|
-
*/
|
|
886
|
-
has(method, path) {
|
|
887
|
-
return this.routeMap.has(`${method}:${path}`);
|
|
888
|
-
}
|
|
889
|
-
/**
|
|
890
|
-
* 按分类获取路由
|
|
891
|
-
*/
|
|
892
|
-
getByCategory(category) {
|
|
893
|
-
return this.categoryMap.get(category) || [];
|
|
894
|
-
}
|
|
895
|
-
/**
|
|
896
|
-
* 获取所有分类
|
|
897
|
-
*/
|
|
898
|
-
getCategories() {
|
|
899
|
-
return Array.from(this.categoryMap.keys()).sort();
|
|
900
|
-
}
|
|
901
|
-
/**
|
|
902
|
-
* 筛选有特定字段的路由
|
|
903
|
-
*
|
|
904
|
-
* @example
|
|
905
|
-
* ```typescript
|
|
906
|
-
* // 获取所有配置了 webhook 的路由
|
|
907
|
-
* const webhookRoutes = registry.filter('webhook')
|
|
908
|
-
* ```
|
|
909
|
-
*/
|
|
910
|
-
filter(field) {
|
|
911
|
-
return this.routes.filter((r) => field in r && r[field] !== void 0);
|
|
912
|
-
}
|
|
913
|
-
/**
|
|
914
|
-
* 按条件筛选路由
|
|
915
|
-
*
|
|
916
|
-
* @example
|
|
917
|
-
* ```typescript
|
|
918
|
-
* // 获取所有 POST 请求
|
|
919
|
-
* const postRoutes = registry.filterBy(r => r.method === 'POST')
|
|
920
|
-
* ```
|
|
921
|
-
*/
|
|
922
|
-
filterBy(predicate) {
|
|
923
|
-
return this.routes.filter(predicate);
|
|
924
|
-
}
|
|
925
|
-
/**
|
|
926
|
-
* 获取路由数量
|
|
927
|
-
*/
|
|
928
|
-
get size() {
|
|
929
|
-
return this.routes.length;
|
|
930
|
-
}
|
|
931
|
-
/**
|
|
932
|
-
* 遍历所有路由
|
|
933
|
-
*/
|
|
934
|
-
forEach(callback) {
|
|
935
|
-
this.routes.forEach(callback);
|
|
936
|
-
}
|
|
937
|
-
/**
|
|
938
|
-
* 映射所有路由
|
|
939
|
-
*/
|
|
940
|
-
map(callback) {
|
|
941
|
-
return this.routes.map(callback);
|
|
942
|
-
}
|
|
943
|
-
};
|
|
944
|
-
function createRouteRegistry(routes) {
|
|
945
|
-
return new RouteRegistry(routes);
|
|
946
|
-
}
|
|
947
|
-
var globalRegistry = null;
|
|
948
|
-
function getRouteRegistry() {
|
|
949
|
-
if (!globalRegistry) {
|
|
950
|
-
throw new Error("RouteRegistry not initialized. Make sure Server is created first.");
|
|
951
|
-
}
|
|
952
|
-
return globalRegistry;
|
|
953
|
-
}
|
|
954
|
-
function getRoute(method, path) {
|
|
955
|
-
return getRouteRegistry().get(method, path);
|
|
956
|
-
}
|
|
957
|
-
function getAllRoutes() {
|
|
958
|
-
return getRouteRegistry().getAll();
|
|
959
|
-
}
|
|
960
|
-
function filterRoutes(field) {
|
|
961
|
-
return getRouteRegistry().filter(field);
|
|
962
|
-
}
|
|
963
|
-
export {
|
|
964
|
-
DependencyManager,
|
|
965
|
-
HtmlRenderer,
|
|
966
|
-
Patterns,
|
|
967
|
-
RouteRegistry,
|
|
968
|
-
base64urlDecode,
|
|
969
|
-
base64urlEncode,
|
|
970
|
-
createHandler,
|
|
971
|
-
createHandlerWithExtra,
|
|
972
|
-
createRequestValidator,
|
|
973
|
-
createRouteRegistry,
|
|
974
|
-
createSSEHandler,
|
|
975
|
-
createValidator,
|
|
976
|
-
empty,
|
|
977
|
-
filterRoutes,
|
|
978
|
-
getAllRoutes,
|
|
979
|
-
getCookie,
|
|
980
|
-
getHeader,
|
|
981
|
-
getLocals,
|
|
982
|
-
getRoute,
|
|
983
|
-
getRouteRegistry,
|
|
984
|
-
getValidatorCacheStats,
|
|
985
|
-
goAwait,
|
|
986
|
-
hasFormat,
|
|
987
|
-
html,
|
|
988
|
-
json,
|
|
989
|
-
parseAndValidateRequest,
|
|
990
|
-
parseBody,
|
|
991
|
-
parseCookies,
|
|
992
|
-
parseCookiesFast,
|
|
993
|
-
parseHeaders,
|
|
994
|
-
parseQuery,
|
|
995
|
-
parseQueryFast,
|
|
996
|
-
parseRequest,
|
|
997
|
-
precompileSchemas,
|
|
998
|
-
redirect,
|
|
999
|
-
registerFormat,
|
|
1000
|
-
registerFormats,
|
|
1001
|
-
setLocals,
|
|
1002
|
-
simpleHandler,
|
|
1003
|
-
stream,
|
|
1004
|
-
text,
|
|
1005
|
-
validateAllSchemas,
|
|
1006
|
-
validateFast,
|
|
1007
|
-
validateRequest,
|
|
1008
|
-
validateSchema,
|
|
1009
|
-
validateSchemaOrThrow
|
|
1010
|
-
};
|
|
1011
|
-
/**
|
|
1012
|
-
* Go 风格的错误处理工具
|
|
1013
|
-
* 将 Promise 转换为 [Error | null, T | undefined] 格式
|
|
1014
|
-
*
|
|
1015
|
-
* @author Framework Team
|
|
1016
|
-
* @version 1.0.0
|
|
1017
|
-
* @license MIT
|
|
1018
|
-
*/
|
|
1019
|
-
/**
|
|
1020
|
-
* 类型安全的路由处理器工厂
|
|
1021
|
-
*
|
|
1022
|
-
* 非柯里化设计,API 更简洁
|
|
1023
|
-
*
|
|
1024
|
-
* @author Framework Team
|
|
1025
|
-
* @version 3.0.0
|
|
1026
|
-
* @license MIT
|
|
1027
|
-
*/
|
|
1028
|
-
/**
|
|
1029
|
-
* 请求解析和验证器
|
|
1030
|
-
*
|
|
1031
|
-
* 解析handler的req参数,使用Ultra验证器进行验证,
|
|
1032
|
-
* 并类型安全地返回解析出来的值
|
|
1033
|
-
*
|
|
1034
|
-
* @author Framework Team
|
|
1035
|
-
* @version 1.0.0
|
|
1036
|
-
* @license MIT
|
|
1037
|
-
*/
|
|
1038
|
-
//# sourceMappingURL=index.js.map
|