vafast 0.4.2 → 0.4.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/README.md +6 -10
- package/dist/base-server-CSkyjEaY.mjs +113 -0
- package/dist/base-server-CSkyjEaY.mjs.map +1 -0
- package/dist/base-server-DvGS6ATg.d.mts +40 -0
- package/dist/base64url-0N9uQPjZ.d.mts +6 -0
- package/dist/base64url-CwQnvZyp.mjs +13 -0
- package/dist/base64url-CwQnvZyp.mjs.map +1 -0
- package/dist/chunk-DW4-Jl94.mjs +37 -0
- package/dist/component-route-CYxLOnci.mjs +1 -0
- package/dist/component-route-CZawYn61.d.mts +31 -0
- package/dist/component-router-CErbGh2A.mjs +33 -0
- package/dist/component-router-CErbGh2A.mjs.map +1 -0
- package/dist/component-server-CGzU4bss.d.mts +38 -0
- package/dist/component-server-DAbIyIPI.mjs +124 -0
- package/dist/component-server-DAbIyIPI.mjs.map +1 -0
- package/dist/create-handler-B_pfxh3m.mjs +166 -0
- package/dist/create-handler-B_pfxh3m.mjs.map +1 -0
- package/dist/{utils/create-handler.d.ts → create-handler-Bo-hvWp-.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-C6vFWP2L.d.mts +27 -0
- package/dist/dependency-manager-Czg7Po2j.mjs +61 -0
- package/dist/dependency-manager-Czg7Po2j.mjs.map +1 -0
- package/dist/formats-CYLwo9GJ.d.mts +42 -0
- package/dist/go-await-BGAGJfrB.mjs +33 -0
- package/dist/go-await-BGAGJfrB.mjs.map +1 -0
- package/dist/{utils/go-await.d.ts → go-await-DRItVwwh.d.mts} +4 -2
- package/dist/handle-Csjtywdc.mjs +30 -0
- package/dist/handle-Csjtywdc.mjs.map +1 -0
- package/dist/{utils/handle.d.ts → handle-D0TFoOiX.d.mts} +8 -6
- package/dist/html-renderer-CMGKJoIy.d.mts +22 -0
- package/dist/{utils/html-renderer.js → html-renderer-CczE8mwC.mjs} +34 -29
- package/dist/html-renderer-CczE8mwC.mjs.map +1 -0
- package/dist/index-Ci52vt55.d.mts +48 -0
- package/dist/index-CzItj62a.d.mts +1 -0
- package/dist/index.d.mts +30 -0
- package/dist/index.mjs +37 -0
- package/dist/index.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-Byp3Hjae.mjs +59 -0
- package/dist/middleware-Byp3Hjae.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-7lvt3Oss.d.mts} +10 -8
- package/dist/parsers-CI_TZ7pO.mjs +168 -0
- package/dist/parsers-CI_TZ7pO.mjs.map +1 -0
- package/dist/path-matcher-73cJd5Y7.mjs +62 -0
- package/dist/path-matcher-73cJd5Y7.mjs.map +1 -0
- package/dist/radix-tree-D0XYaJKb.mjs +157 -0
- package/dist/radix-tree-D0XYaJKb.mjs.map +1 -0
- package/dist/request-CKC3Ox6M.mjs +133 -0
- package/dist/request-CKC3Ox6M.mjs.map +1 -0
- package/dist/request-validator-42lY21gn.d.mts +67 -0
- package/dist/request-validator-_J5HloRq.mjs +77 -0
- package/dist/request-validator-_J5HloRq.mjs.map +1 -0
- package/dist/{utils/response.d.ts → response-A-sZZiJ7.d.mts} +4 -2
- package/dist/response-Cf5FgtmE.mjs +72 -0
- package/dist/response-Cf5FgtmE.mjs.map +1 -0
- package/dist/response-DXg4i_yh.mjs +97 -0
- package/dist/response-DXg4i_yh.mjs.map +1 -0
- package/dist/route-9pAVP1GC.mjs +11 -0
- package/dist/route-9pAVP1GC.mjs.map +1 -0
- package/dist/route-BJ-40LNI.d.mts +44 -0
- package/dist/route-registry--tx1PNui.d.mts +176 -0
- package/dist/route-registry-mcTG0M-t.mjs +225 -0
- package/dist/route-registry-mcTG0M-t.mjs.map +1 -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-B9HUUCkR.mjs +71 -0
- package/dist/router-B9HUUCkR.mjs.map +1 -0
- package/dist/{router.d.ts → router.d.mts} +6 -7
- package/dist/router.mjs +4 -0
- package/dist/schema-CPQudJpE.d.mts +81 -0
- package/dist/schema-CtVBNfnQ.mjs +1 -0
- package/dist/serve-B5WmhK6m.d.mts +69 -0
- package/dist/serve-Be6NvuQk.mjs +107 -0
- package/dist/serve-Be6NvuQk.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-BmPKs8oM.mjs +137 -0
- package/dist/server-BmPKs8oM.mjs.map +1 -0
- package/dist/server-Cbd3Ia51.mjs +88 -0
- package/dist/server-Cbd3Ia51.mjs.map +1 -0
- package/dist/server-D9gjszHe.d.mts +60 -0
- package/dist/sse-BMM6KTfy.d.mts +65 -0
- package/dist/sse-BT5yyLgX.mjs +87 -0
- package/dist/sse-BT5yyLgX.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-DuTa8AVN.d.mts} +27 -25
- 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-BBrGePBr.mjs +112 -0
- package/dist/validators-BBrGePBr.mjs.map +1 -0
- package/dist/validators-CPmnj_y9.d.mts +67 -0
- package/package.json +16 -18
- package/dist/auth/token.d.ts +0 -42
- 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 -2578
- package/dist/index.js.map +0 -1
- package/dist/middleware/auth.d.ts +0 -16
- 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 -1487
- package/dist/monitoring/index.js.map +0 -1
- package/dist/monitoring/native-monitor.d.ts +0 -44
- package/dist/monitoring/native-monitor.js +0 -1454
- 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 -232
- 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 -44
- 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 -1159
- package/dist/server/index.js.map +0 -1
- package/dist/server/server-factory.d.ts +0 -48
- package/dist/server/server-factory.js +0 -1156
- package/dist/server/server-factory.js.map +0 -1
- package/dist/server/server.d.ts +0 -64
- package/dist/server/server.js +0 -737
- 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
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// src/middleware.ts
|
|
2
|
-
var VafastError = class extends Error {
|
|
3
|
-
status;
|
|
4
|
-
type;
|
|
5
|
-
expose;
|
|
6
|
-
constructor(message, options = {}) {
|
|
7
|
-
super(message);
|
|
8
|
-
this.name = "VafastError";
|
|
9
|
-
this.status = options.status ?? 500;
|
|
10
|
-
this.type = options.type ?? "internal_error";
|
|
11
|
-
this.expose = options.expose ?? false;
|
|
12
|
-
if (options.cause) this.cause = options.cause;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
// src/middleware/rateLimit.ts
|
|
17
|
-
var store = /* @__PURE__ */ new Map();
|
|
18
|
-
function rateLimit(options = {}) {
|
|
19
|
-
const windowMs = options.windowMs ?? 6e4;
|
|
20
|
-
const max = options.max ?? 30;
|
|
21
|
-
const keyFn = options.keyFn ?? getIP;
|
|
22
|
-
return async (req, next) => {
|
|
23
|
-
const key = keyFn(req);
|
|
24
|
-
const now = Date.now();
|
|
25
|
-
const entry = store.get(key);
|
|
26
|
-
if (entry && entry.expires > now) {
|
|
27
|
-
if (entry.count >= max) {
|
|
28
|
-
throw new VafastError("Too many requests", {
|
|
29
|
-
status: 429,
|
|
30
|
-
type: "rate_limit",
|
|
31
|
-
expose: true
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
entry.count += 1;
|
|
35
|
-
} else {
|
|
36
|
-
store.set(key, { count: 1, expires: now + windowMs });
|
|
37
|
-
}
|
|
38
|
-
return next();
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function getIP(req) {
|
|
42
|
-
return req.headers.get("cf-connecting-ip") || // Cloudflare
|
|
43
|
-
req.headers.get("x-forwarded-for")?.split(",")[0]?.trim() || // Vercel
|
|
44
|
-
"unknown";
|
|
45
|
-
}
|
|
46
|
-
export {
|
|
47
|
-
rateLimit
|
|
48
|
-
};
|
|
49
|
-
//# sourceMappingURL=rateLimit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/middleware.ts","../../src/middleware/rateLimit.ts"],"sourcesContent":["// src/middleware.ts\n\nimport { json, mapResponse } from \"./utils/response\";\n\nimport type { Handler, Middleware } from \"./types\";\n/** 中间件类型:使用 next() 传递给下一个处理 */\n\n/** Vafast 自定义错误类型 */\nexport class VafastError extends Error {\n status: number;\n type: string;\n expose: boolean;\n\n constructor(\n message: string,\n options: {\n status?: number;\n type?: string;\n expose?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message);\n this.name = \"VafastError\";\n this.status = options.status ?? 500;\n this.type = options.type ?? \"internal_error\";\n this.expose = options.expose ?? false;\n if (options.cause) (this as any).cause = options.cause;\n }\n}\n\n/**\n * 组合类型: 自动注入错误处理器进行中间件组合\n */\nexport function composeMiddleware(\n middleware: Middleware[],\n finalHandler: Handler,\n): (req: Request) => Promise<Response> {\n const all = [errorHandler, ...middleware];\n\n return function composedHandler(req: Request): Promise<Response> {\n let i = -1;\n\n const dispatch = (index: number): Promise<Response> => {\n if (index <= i)\n return Promise.reject(new Error(\"next() called multiple times\"));\n i = index;\n\n // 中间件阶段\n if (index < all.length) {\n const mw = all[index];\n return Promise.resolve(mw(req, () => dispatch(index + 1)));\n }\n\n // 最终 handler - 使用 mapResponse 转换返回值\n return Promise.resolve(finalHandler(req)).then(mapResponse);\n };\n\n return dispatch(0);\n };\n}\n\n/** 默认包含的全局错误处理器 */\nconst errorHandler: Middleware = async (req, next) => {\n try {\n return await next();\n } catch (err) {\n console.error(\"未处理的错误:\", err);\n\n if (err instanceof VafastError) {\n return json(\n {\n error: err.type,\n message: err.expose ? err.message : \"发生了一个错误\",\n },\n err.status,\n );\n }\n\n return json({ error: \"internal_error\", message: \"出现了一些问题\" }, 500);\n }\n};\n","// src/middleware/rateLimit.ts\n\nimport type { Middleware } from \"../types\";\nimport { VafastError } from \"../middleware\";\n\ninterface RateLimitOptions {\n windowMs?: number; // 限制窗口(毫秒)\n max?: number; // 最大请求数\n keyFn?: (req: Request) => string;\n}\n\ntype Entry = {\n count: number;\n expires: number;\n};\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(options: RateLimitOptions = {}): Middleware {\n const windowMs = options.windowMs ?? 60_000; // 默认: 1分钟\n const max = options.max ?? 30;\n const keyFn = options.keyFn ?? getIP;\n\n return async (req, next) => {\n const key = keyFn(req);\n const now = Date.now();\n\n const entry = store.get(key);\n if (entry && entry.expires > now) {\n if (entry.count >= max) {\n throw new VafastError(\"Too many requests\", {\n status: 429,\n type: \"rate_limit\",\n expose: true,\n });\n }\n entry.count += 1;\n } else {\n store.set(key, { count: 1, expires: now + windowMs });\n }\n\n return next();\n };\n}\n\n// Edge 安全的 IP 获取\nfunction getIP(req: Request): string {\n return (\n req.headers.get(\"cf-connecting-ip\") || // Cloudflare\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || // Vercel\n \"unknown\"\n );\n}\n"],"mappings":";AAQO,IAAM,cAAN,cAA0B,MAAM;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YACE,SACA,UAKI,CAAC,GACL;AACA,UAAM,OAAO;AACb,SAAK,OAAO;AACZ,SAAK,SAAS,QAAQ,UAAU;AAChC,SAAK,OAAO,QAAQ,QAAQ;AAC5B,SAAK,SAAS,QAAQ,UAAU;AAChC,QAAI,QAAQ,MAAO,CAAC,KAAa,QAAQ,QAAQ;AAAA,EACnD;AACF;;;ACbA,IAAM,QAAQ,oBAAI,IAAmB;AAE9B,SAAS,UAAU,UAA4B,CAAC,GAAe;AACpE,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,MAAM,QAAQ,OAAO;AAC3B,QAAM,QAAQ,QAAQ,SAAS;AAE/B,SAAO,OAAO,KAAK,SAAS;AAC1B,UAAM,MAAM,MAAM,GAAG;AACrB,UAAM,MAAM,KAAK,IAAI;AAErB,UAAM,QAAQ,MAAM,IAAI,GAAG;AAC3B,QAAI,SAAS,MAAM,UAAU,KAAK;AAChC,UAAI,MAAM,SAAS,KAAK;AACtB,cAAM,IAAI,YAAY,qBAAqB;AAAA,UACzC,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AACA,YAAM,SAAS;AAAA,IACjB,OAAO;AACL,YAAM,IAAI,KAAK,EAAE,OAAO,GAAG,SAAS,MAAM,SAAS,CAAC;AAAA,IACtD;AAEA,WAAO,KAAK;AAAA,EACd;AACF;AAGA,SAAS,MAAM,KAAsB;AACnC,SACE,IAAI,QAAQ,IAAI,kBAAkB;AAAA,EAClC,IAAI,QAAQ,IAAI,iBAAiB,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK;AAAA,EACxD;AAEJ;","names":[]}
|
package/dist/middleware.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Middleware, Handler } from './types/types.js';
|
|
2
|
-
|
|
3
|
-
/** 中间件类型:使用 next() 传递给下一个处理 */
|
|
4
|
-
/** Vafast 自定义错误类型 */
|
|
5
|
-
declare class VafastError extends Error {
|
|
6
|
-
status: number;
|
|
7
|
-
type: string;
|
|
8
|
-
expose: boolean;
|
|
9
|
-
constructor(message: string, options?: {
|
|
10
|
-
status?: number;
|
|
11
|
-
type?: string;
|
|
12
|
-
expose?: boolean;
|
|
13
|
-
cause?: unknown;
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* 组合类型: 自动注入错误处理器进行中间件组合
|
|
18
|
-
*/
|
|
19
|
-
declare function composeMiddleware(middleware: Middleware[], finalHandler: Handler): (req: Request) => Promise<Response>;
|
|
20
|
-
|
|
21
|
-
export { VafastError, composeMiddleware };
|
package/dist/middleware.js
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
// src/utils/response.ts
|
|
2
|
-
function json(data, status = 200, headers = {}) {
|
|
3
|
-
const body = JSON.stringify(data);
|
|
4
|
-
if (Object.keys(headers).length === 0) {
|
|
5
|
-
return new Response(body, {
|
|
6
|
-
status,
|
|
7
|
-
headers: { "Content-Type": "application/json" }
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
const h = new Headers({
|
|
11
|
-
"Content-Type": "application/json",
|
|
12
|
-
...headers
|
|
13
|
-
});
|
|
14
|
-
return new Response(body, {
|
|
15
|
-
status,
|
|
16
|
-
headers: h
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
var JSON_HEADERS = { "Content-Type": "application/json" };
|
|
20
|
-
var TEXT_HEADERS = { "Content-Type": "text/plain" };
|
|
21
|
-
function mapResponse(response) {
|
|
22
|
-
if (response instanceof Response) return response;
|
|
23
|
-
switch (response?.constructor?.name) {
|
|
24
|
-
case "String":
|
|
25
|
-
return new Response(response, { headers: TEXT_HEADERS });
|
|
26
|
-
case "Object":
|
|
27
|
-
case "Array":
|
|
28
|
-
return new Response(JSON.stringify(response), { headers: JSON_HEADERS });
|
|
29
|
-
case "Number":
|
|
30
|
-
case "Boolean":
|
|
31
|
-
return new Response(String(response), { headers: TEXT_HEADERS });
|
|
32
|
-
case void 0:
|
|
33
|
-
return new Response(null, { status: 204 });
|
|
34
|
-
case "ReadableStream":
|
|
35
|
-
return new Response(response);
|
|
36
|
-
case "Blob":
|
|
37
|
-
return new Response(response);
|
|
38
|
-
case "ArrayBuffer":
|
|
39
|
-
return new Response(response);
|
|
40
|
-
case "Uint8Array":
|
|
41
|
-
return new Response(response);
|
|
42
|
-
default:
|
|
43
|
-
if (response instanceof Promise) {
|
|
44
|
-
return response.then(mapResponse);
|
|
45
|
-
}
|
|
46
|
-
return new Response(JSON.stringify(response), { headers: JSON_HEADERS });
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// src/middleware.ts
|
|
51
|
-
var VafastError = class extends Error {
|
|
52
|
-
status;
|
|
53
|
-
type;
|
|
54
|
-
expose;
|
|
55
|
-
constructor(message, options = {}) {
|
|
56
|
-
super(message);
|
|
57
|
-
this.name = "VafastError";
|
|
58
|
-
this.status = options.status ?? 500;
|
|
59
|
-
this.type = options.type ?? "internal_error";
|
|
60
|
-
this.expose = options.expose ?? false;
|
|
61
|
-
if (options.cause) this.cause = options.cause;
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
function composeMiddleware(middleware, finalHandler) {
|
|
65
|
-
const all = [errorHandler, ...middleware];
|
|
66
|
-
return function composedHandler(req) {
|
|
67
|
-
let i = -1;
|
|
68
|
-
const dispatch = (index) => {
|
|
69
|
-
if (index <= i)
|
|
70
|
-
return Promise.reject(new Error("next() called multiple times"));
|
|
71
|
-
i = index;
|
|
72
|
-
if (index < all.length) {
|
|
73
|
-
const mw = all[index];
|
|
74
|
-
return Promise.resolve(mw(req, () => dispatch(index + 1)));
|
|
75
|
-
}
|
|
76
|
-
return Promise.resolve(finalHandler(req)).then(mapResponse);
|
|
77
|
-
};
|
|
78
|
-
return dispatch(0);
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
var errorHandler = async (req, next) => {
|
|
82
|
-
try {
|
|
83
|
-
return await next();
|
|
84
|
-
} catch (err) {
|
|
85
|
-
console.error("\u672A\u5904\u7406\u7684\u9519\u8BEF:", err);
|
|
86
|
-
if (err instanceof VafastError) {
|
|
87
|
-
return json(
|
|
88
|
-
{
|
|
89
|
-
error: err.type,
|
|
90
|
-
message: err.expose ? err.message : "\u53D1\u751F\u4E86\u4E00\u4E2A\u9519\u8BEF"
|
|
91
|
-
},
|
|
92
|
-
err.status
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
return json({ error: "internal_error", message: "\u51FA\u73B0\u4E86\u4E00\u4E9B\u95EE\u9898" }, 500);
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
export {
|
|
99
|
-
VafastError,
|
|
100
|
-
composeMiddleware
|
|
101
|
-
};
|
|
102
|
-
//# sourceMappingURL=middleware.js.map
|
package/dist/middleware.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/response.ts","../src/middleware.ts"],"sourcesContent":["// src/response.ts\n\n/** 生成 JSON 响应 */\nexport function json(\n data: unknown,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const body = JSON.stringify(data);\n\n // 优化:只在有自定义 headers 时才创建 Headers 对象\n if (Object.keys(headers).length === 0) {\n return new Response(body, {\n status,\n headers: { \"Content-Type\": \"application/json\" },\n });\n }\n\n // 有自定义 headers 时才创建 Headers 对象\n const h = new Headers({\n \"Content-Type\": \"application/json\",\n ...headers,\n });\n\n return new Response(body, {\n status,\n headers: h,\n });\n}\n\n// JSON 响应的预创建 headers(避免每次创建)\nconst JSON_HEADERS = { \"Content-Type\": \"application/json\" };\nconst TEXT_HEADERS = { \"Content-Type\": \"text/plain\" };\n\n/**\n * 类型特化的响应映射\n * 根据返回值类型直接生成 Response,避免不必要的检查\n */\nexport function mapResponse(response: unknown): Response {\n // 快速路径:已经是 Response\n if (response instanceof Response) return response;\n\n // 使用 constructor.name 进行类型判断(比 instanceof 更快)\n switch (response?.constructor?.name) {\n case \"String\":\n return new Response(response as string, { headers: TEXT_HEADERS });\n\n case \"Object\":\n case \"Array\":\n return new Response(JSON.stringify(response), { headers: JSON_HEADERS });\n\n case \"Number\":\n case \"Boolean\":\n return new Response(String(response), { headers: TEXT_HEADERS });\n\n case undefined:\n // null 或 undefined\n return new Response(null, { status: 204 });\n\n case \"ReadableStream\":\n return new Response(response as ReadableStream);\n\n case \"Blob\":\n return new Response(response as Blob);\n\n case \"ArrayBuffer\":\n return new Response(response as ArrayBuffer);\n\n case \"Uint8Array\":\n return new Response(response as unknown as BodyInit);\n\n default:\n // Promise 处理\n if (response instanceof Promise) {\n return response.then(mapResponse) as unknown as Response;\n }\n // 其他情况使用 JSON 序列化\n return new Response(JSON.stringify(response), { headers: JSON_HEADERS });\n }\n}\n\n/** 生成重定向响应 */\nexport function redirect(location: string, status: 301 | 302 = 302): Response {\n return new Response(null, {\n status,\n headers: {\n Location: location,\n },\n });\n}\n\n/** 生成纯文本响应 */\nexport function text(\n content: string,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"text/plain; charset=utf-8\",\n ...headers,\n });\n\n return new Response(content, {\n status,\n headers: h,\n });\n}\n\n/** 生成HTML响应 */\nexport function html(\n content: string,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"text/html; charset=utf-8\",\n ...headers,\n });\n\n return new Response(content, {\n status,\n headers: h,\n });\n}\n\n/** 生成空响应(204 No Content) */\nexport function empty(status = 204, headers: HeadersInit = {}): Response {\n return new Response(null, {\n status,\n headers,\n });\n}\n\n/** 生成流式响应 */\nexport function stream(\n stream: ReadableStream,\n status = 200,\n headers: HeadersInit = {},\n): Response {\n const h = new Headers({\n \"Content-Type\": \"application/octet-stream\",\n ...headers,\n });\n\n return new Response(stream, {\n status,\n headers: h,\n });\n}\n","// src/middleware.ts\n\nimport { json, mapResponse } from \"./utils/response\";\n\nimport type { Handler, Middleware } from \"./types\";\n/** 中间件类型:使用 next() 传递给下一个处理 */\n\n/** Vafast 自定义错误类型 */\nexport class VafastError extends Error {\n status: number;\n type: string;\n expose: boolean;\n\n constructor(\n message: string,\n options: {\n status?: number;\n type?: string;\n expose?: boolean;\n cause?: unknown;\n } = {},\n ) {\n super(message);\n this.name = \"VafastError\";\n this.status = options.status ?? 500;\n this.type = options.type ?? \"internal_error\";\n this.expose = options.expose ?? false;\n if (options.cause) (this as any).cause = options.cause;\n }\n}\n\n/**\n * 组合类型: 自动注入错误处理器进行中间件组合\n */\nexport function composeMiddleware(\n middleware: Middleware[],\n finalHandler: Handler,\n): (req: Request) => Promise<Response> {\n const all = [errorHandler, ...middleware];\n\n return function composedHandler(req: Request): Promise<Response> {\n let i = -1;\n\n const dispatch = (index: number): Promise<Response> => {\n if (index <= i)\n return Promise.reject(new Error(\"next() called multiple times\"));\n i = index;\n\n // 中间件阶段\n if (index < all.length) {\n const mw = all[index];\n return Promise.resolve(mw(req, () => dispatch(index + 1)));\n }\n\n // 最终 handler - 使用 mapResponse 转换返回值\n return Promise.resolve(finalHandler(req)).then(mapResponse);\n };\n\n return dispatch(0);\n };\n}\n\n/** 默认包含的全局错误处理器 */\nconst errorHandler: Middleware = async (req, next) => {\n try {\n return await next();\n } catch (err) {\n console.error(\"未处理的错误:\", err);\n\n if (err instanceof VafastError) {\n return json(\n {\n error: err.type,\n message: err.expose ? err.message : \"发生了一个错误\",\n },\n err.status,\n );\n }\n\n return json({ error: \"internal_error\", message: \"出现了一些问题\" }, 500);\n }\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export { AggregatedMetrics, BaseMetrics, MonitoringConfig, MonitoringEvent, PerformanceMetrics, PerformanceReport } from './types.js';
|
|
2
|
-
export { MonitoredServer, NativeMonitoringConfig, NativeMonitoringMetrics, createMonitoredServer, withMonitoring } from './native-monitor.js';
|
|
3
|
-
import '../server/server.js';
|
|
4
|
-
import '../types/types.js';
|
|
5
|
-
import '../server/base-server.js';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* 原生监控系统入口
|
|
9
|
-
*
|
|
10
|
-
* @author Framework Team
|
|
11
|
-
* @version 2.0.0
|
|
12
|
-
* @license MIT
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
declare const defaultMonitoringConfig: {
|
|
16
|
-
enabled: boolean;
|
|
17
|
-
console: boolean;
|
|
18
|
-
slowThreshold: number;
|
|
19
|
-
errorThreshold: number;
|
|
20
|
-
tags: {
|
|
21
|
-
framework: string;
|
|
22
|
-
version: string;
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
declare function createMonitoringConfig(config?: Partial<typeof defaultMonitoringConfig>): {
|
|
26
|
-
enabled: boolean;
|
|
27
|
-
console: boolean;
|
|
28
|
-
slowThreshold: number;
|
|
29
|
-
errorThreshold: number;
|
|
30
|
-
tags: {
|
|
31
|
-
framework: string;
|
|
32
|
-
version: string;
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export { createMonitoringConfig, defaultMonitoringConfig };
|