h3 2.0.1-rc.2 → 2.0.1-rc.21
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/bin/h3.mjs +35 -0
- package/dist/THIRD-PARTY-LICENSES.md +70 -0
- package/dist/_entries/bun.d.mts +3 -8
- package/dist/_entries/bun.mjs +3 -9
- package/dist/_entries/cloudflare.d.mts +4 -9
- package/dist/_entries/cloudflare.mjs +3 -9
- package/dist/_entries/deno.d.mts +3 -8
- package/dist/_entries/deno.mjs +3 -9
- package/dist/_entries/generic.d.mts +3 -8
- package/dist/_entries/generic.mjs +3 -9
- package/dist/_entries/node.d.mts +3 -8
- package/dist/_entries/node.mjs +3 -12
- package/dist/_entries/service-worker.d.mts +3 -8
- package/dist/_entries/service-worker.mjs +3 -9
- package/dist/docs/0.guide/0.index/index.md +117 -0
- package/dist/docs/0.guide/1.basics/0.lifecycle.md +68 -0
- package/dist/docs/0.guide/1.basics/1.routing.md +92 -0
- package/dist/docs/0.guide/1.basics/2.middleware.md +97 -0
- package/dist/docs/0.guide/1.basics/3.handler.md +165 -0
- package/dist/docs/0.guide/1.basics/4.response.md +162 -0
- package/dist/docs/0.guide/1.basics/5.error.md +117 -0
- package/dist/docs/0.guide/1.basics/6.nested-apps.md +57 -0
- package/dist/docs/0.guide/2.api/0.h3.md +145 -0
- package/dist/docs/0.guide/2.api/1.h3event.md +113 -0
- package/dist/docs/0.guide/3.advanced/0.plugins.md +50 -0
- package/dist/docs/0.guide/3.advanced/1.websocket.md +124 -0
- package/dist/docs/0.guide/3.advanced/2.nightly.md +13 -0
- package/dist/docs/1.utils/0.index/index.md +46 -0
- package/dist/docs/1.utils/1.request.md +355 -0
- package/dist/docs/1.utils/2.response.md +144 -0
- package/dist/docs/1.utils/3.cookie.md +33 -0
- package/dist/docs/1.utils/4.security.md +109 -0
- package/dist/docs/1.utils/5.proxy.md +31 -0
- package/dist/docs/1.utils/6.mcp.md +71 -0
- package/dist/docs/1.utils/7.more.md +78 -0
- package/dist/docs/1.utils/8.community.md +42 -0
- package/dist/docs/2.examples/0.index/index.md +16 -0
- package/dist/docs/2.examples/1.handle-cookie.md +67 -0
- package/dist/docs/2.examples/2.handle-session.md +130 -0
- package/dist/docs/2.examples/3.serve-static-assets.md +66 -0
- package/dist/docs/2.examples/4.stream-response.md +76 -0
- package/dist/docs/2.examples/5.validate-data.md +193 -0
- package/dist/docs/3.migration/0.index/index.md +200 -0
- package/dist/docs/README.md +35 -0
- package/dist/{h3.mjs → h3-CRCltuUf.mjs} +915 -1218
- package/dist/h3-D76FUMrE.d.mts +833 -0
- package/dist/h3-DagAgogP.mjs +4 -0
- package/dist/{h3.d.mts → h3-DiSMXP1G.d.mts} +320 -656
- package/dist/tracing.d.mts +24 -0
- package/dist/tracing.mjs +76 -0
- package/package.json +56 -44
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { l as H3Plugin, r as H3Event } from "./h3-D76FUMrE.mjs";
|
|
2
|
+
|
|
3
|
+
interface TracingRequestEvent {
|
|
4
|
+
type: "middleware" | "route";
|
|
5
|
+
event: H3Event;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Options for the tracing plugin.
|
|
9
|
+
*/
|
|
10
|
+
interface TracingPluginOptions {
|
|
11
|
+
/**
|
|
12
|
+
* Whether to trace middleware executions.
|
|
13
|
+
*/
|
|
14
|
+
traceMiddleware?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Whether to trace route executions.
|
|
17
|
+
*/
|
|
18
|
+
traceRoutes?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Enables tracing for H3 apps.
|
|
22
|
+
*/
|
|
23
|
+
declare function tracingPlugin(traceOpts?: TracingPluginOptions): H3Plugin;
|
|
24
|
+
export { TracingPluginOptions, TracingRequestEvent, tracingPlugin };
|
package/dist/tracing.mjs
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import "./h3-DagAgogP.mjs";
|
|
2
|
+
function tracingPlugin(traceOpts) {
|
|
3
|
+
return (h3) => {
|
|
4
|
+
const { tracingChannel } = globalThis.process?.getBuiltinModule?.("diagnostics_channel") ?? {};
|
|
5
|
+
if (!tracingChannel) return;
|
|
6
|
+
const requestHandlerChannel = tracingChannel("h3.request");
|
|
7
|
+
function wrapMiddleware(middleware) {
|
|
8
|
+
if (middleware.__traced__ || traceOpts?.traceMiddleware === false) return middleware;
|
|
9
|
+
const wrappedMiddleware = (...args) => {
|
|
10
|
+
return requestHandlerChannel.tracePromise(async () => middleware(...args), {
|
|
11
|
+
event: args[0],
|
|
12
|
+
type: "middleware"
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
wrappedMiddleware.__traced__ = true;
|
|
16
|
+
return wrappedMiddleware;
|
|
17
|
+
}
|
|
18
|
+
function wrapEventHandler(handler) {
|
|
19
|
+
if (handler.__traced__ || traceOpts?.traceRoutes === false) return handler;
|
|
20
|
+
const wrappedHandler = (...args) => {
|
|
21
|
+
return requestHandlerChannel.tracePromise(async () => handler(...args), {
|
|
22
|
+
event: args[0],
|
|
23
|
+
type: "route"
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
wrappedHandler.__traced__ = true;
|
|
27
|
+
return wrappedHandler;
|
|
28
|
+
}
|
|
29
|
+
h3["~middleware"] = h3["~middleware"].map((m) => wrapMiddleware(m));
|
|
30
|
+
h3["~routes"] = h3["~routes"].map((route) => {
|
|
31
|
+
return {
|
|
32
|
+
...route,
|
|
33
|
+
handler: wrapEventHandler(route.handler),
|
|
34
|
+
middleware: route.middleware ? route.middleware.map((m) => wrapMiddleware(m)) : void 0
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
if ("on" in h3 && typeof h3.on === "function") {
|
|
38
|
+
const originalOn = h3.on;
|
|
39
|
+
h3.on = (...args) => {
|
|
40
|
+
const instance = originalOn.apply(h3, args);
|
|
41
|
+
const lastRoute = instance["~routes"][instance["~routes"].length - 1];
|
|
42
|
+
if (lastRoute) {
|
|
43
|
+
lastRoute.handler = wrapEventHandler(lastRoute.handler);
|
|
44
|
+
lastRoute.middleware = lastRoute.middleware?.map((m) => wrapMiddleware(m));
|
|
45
|
+
}
|
|
46
|
+
return instance;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if ("use" in h3 && typeof h3.use === "function") {
|
|
50
|
+
const originalUse = h3.use;
|
|
51
|
+
h3.use = (arg1, arg2, arg3) => {
|
|
52
|
+
let route;
|
|
53
|
+
let fn;
|
|
54
|
+
let opts;
|
|
55
|
+
if (typeof arg1 === "string") {
|
|
56
|
+
route = arg1;
|
|
57
|
+
fn = arg2;
|
|
58
|
+
opts = arg3;
|
|
59
|
+
return originalUse.call(h3, route, wrapMiddleware(fn), opts);
|
|
60
|
+
}
|
|
61
|
+
fn = arg1;
|
|
62
|
+
opts = arg2;
|
|
63
|
+
return originalUse.call(h3, wrapMiddleware(fn), opts);
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
if ("mount" in h3 && typeof h3.mount === "function") {
|
|
67
|
+
const originalMount = h3.mount;
|
|
68
|
+
h3.mount = (base, input) => {
|
|
69
|
+
if ("register" in input) input.register(tracingPlugin(traceOpts));
|
|
70
|
+
return originalMount.call(h3, base, input);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return h3;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export { tracingPlugin };
|
package/package.json
CHANGED
|
@@ -1,12 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "h3",
|
|
3
|
-
"version": "2.0.1-rc.
|
|
3
|
+
"version": "2.0.1-rc.21",
|
|
4
4
|
"description": "Minimal H(TTP) framework built for high performance and portability.",
|
|
5
5
|
"homepage": "https://h3.dev",
|
|
6
|
-
"repository": "h3js/h3",
|
|
7
6
|
"license": "MIT",
|
|
8
|
-
"
|
|
7
|
+
"repository": "h3js/h3",
|
|
8
|
+
"bin": {
|
|
9
|
+
"h3": "./bin/h3.mjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"bin",
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
9
15
|
"type": "module",
|
|
16
|
+
"sideEffects": false,
|
|
17
|
+
"types": "./dist/_entries/generic.d.mts",
|
|
10
18
|
"exports": {
|
|
11
19
|
"./package.json": "./package.json",
|
|
12
20
|
".": {
|
|
@@ -22,67 +30,67 @@
|
|
|
22
30
|
"./cloudflare": "./dist/_entries/cloudflare.mjs",
|
|
23
31
|
"./service-worker": "./dist/_entries/service-worker.mjs",
|
|
24
32
|
"./node": "./dist/_entries/node.mjs",
|
|
25
|
-
"./generic": "./dist/_entries/generic.mjs"
|
|
33
|
+
"./generic": "./dist/_entries/generic.mjs",
|
|
34
|
+
"./tracing": "./dist/tracing.mjs"
|
|
26
35
|
},
|
|
27
|
-
"types": "./dist/_entries/generic.d.mts",
|
|
28
|
-
"files": [
|
|
29
|
-
"dist"
|
|
30
|
-
],
|
|
31
36
|
"scripts": {
|
|
32
37
|
"bench:bun": "bun run ./test/bench/bench.ts",
|
|
33
38
|
"bench:node": "node --expose-gc --allow-natives-syntax ./test/bench/bench.ts",
|
|
34
39
|
"build": "obuild",
|
|
35
40
|
"dev": "vitest",
|
|
36
|
-
"lint": "
|
|
37
|
-
"
|
|
41
|
+
"lint": "oxlint . && oxfmt --check .",
|
|
42
|
+
"fmt": "automd && oxlint --fix . && oxfmt .",
|
|
38
43
|
"prepack": "pnpm build",
|
|
39
44
|
"play:bun": "bun ./test/fixture/bun.ts",
|
|
40
45
|
"play:node": "pnpm test/fixture/node.ts",
|
|
41
46
|
"play:plain": "pnpm test/fixture/plain.ts",
|
|
42
47
|
"play:web": "pnpm test/fixture/web.ts",
|
|
43
48
|
"release": "pnpm test && pnpm build && changelogen --release --prerelease --publish && git push --follow-tags",
|
|
44
|
-
"test": "pnpm lint &&
|
|
45
|
-
"test:types": "tsc --noEmit --skipLibCheck"
|
|
46
|
-
},
|
|
47
|
-
"resolutions": {
|
|
48
|
-
"h3": "link:."
|
|
49
|
+
"test": "pnpm lint && vitest --run --coverage"
|
|
49
50
|
},
|
|
50
51
|
"dependencies": {
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"rou3": "^0.7.7",
|
|
54
|
-
"srvx": "^0.8.15"
|
|
52
|
+
"rou3": "^0.8.1",
|
|
53
|
+
"srvx": "^0.11.15"
|
|
55
54
|
},
|
|
56
55
|
"devDependencies": {
|
|
56
|
+
"@happy-dom/global-registrator": "^20.9.0",
|
|
57
57
|
"@mitata/counters": "^0.0.8",
|
|
58
58
|
"@types/connect": "^3.4.38",
|
|
59
|
-
"@types/express": "^5.0.
|
|
60
|
-
"@types/node": "^
|
|
61
|
-
"@types/react": "^19.2.
|
|
62
|
-
"@types/react-dom": "^19.2.
|
|
63
|
-
"@
|
|
64
|
-
"
|
|
59
|
+
"@types/express": "^5.0.6",
|
|
60
|
+
"@types/node": "^25.6.0",
|
|
61
|
+
"@types/react": "^19.2.14",
|
|
62
|
+
"@types/react-dom": "^19.2.3",
|
|
63
|
+
"@typescript/native-preview": "^7.0.0-dev.20260429.1",
|
|
64
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
65
|
+
"automd": "^0.4.3",
|
|
65
66
|
"changelogen": "^0.6.2",
|
|
66
67
|
"connect": "^3.7.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"
|
|
68
|
+
"cookie-es": "^3.1.1",
|
|
69
|
+
"crossws": "^0.4.5",
|
|
70
|
+
"elysia": "^1.4.28",
|
|
71
|
+
"esbuild": "^0.28.0",
|
|
72
|
+
"express": "^5.2.1",
|
|
73
|
+
"fetchdts": "^0.1.7",
|
|
73
74
|
"get-port-please": "^3.2.0",
|
|
74
|
-
"h3
|
|
75
|
-
"h3-
|
|
76
|
-
"
|
|
75
|
+
"h3": "^2.0.1-rc.20",
|
|
76
|
+
"h3-nightly": "^2.0.0-20260429-110804-351b2aa",
|
|
77
|
+
"happy-dom": "^20.9.0",
|
|
78
|
+
"hono": "^4.12.15",
|
|
79
|
+
"magic-string": "^0.30.21",
|
|
80
|
+
"mdzilla": "^0.2.1",
|
|
81
|
+
"memoirist": "^0.4.0",
|
|
77
82
|
"mitata": "^1.0.34",
|
|
78
|
-
"obuild": "^0.
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
85
|
-
"
|
|
83
|
+
"obuild": "^0.4.33",
|
|
84
|
+
"oxc-parser": "^0.128.0",
|
|
85
|
+
"oxfmt": "^0.47.0",
|
|
86
|
+
"oxlint": "^1.62.0",
|
|
87
|
+
"oxlint-tsgolint": "^0.22.1",
|
|
88
|
+
"react": "^19.2.5",
|
|
89
|
+
"react-dom": "^19.2.5",
|
|
90
|
+
"typescript": "^6.0.3",
|
|
91
|
+
"vite": "^8.0.10",
|
|
92
|
+
"vitest": "^4.1.5",
|
|
93
|
+
"zod": "^4.3.6"
|
|
86
94
|
},
|
|
87
95
|
"peerDependencies": {
|
|
88
96
|
"crossws": "^0.4.1"
|
|
@@ -92,8 +100,12 @@
|
|
|
92
100
|
"optional": true
|
|
93
101
|
}
|
|
94
102
|
},
|
|
95
|
-
"
|
|
103
|
+
"resolutions": {
|
|
104
|
+
"h3": "link:.",
|
|
105
|
+
"h3-nightly": "latest"
|
|
106
|
+
},
|
|
96
107
|
"engines": {
|
|
97
108
|
"node": ">=20.11.1"
|
|
98
|
-
}
|
|
109
|
+
},
|
|
110
|
+
"packageManager": "pnpm@10.33.2"
|
|
99
111
|
}
|