2025-09-05 14:59:21 +08:00

30 lines
914 B
JavaScript

import { eventHandler } from "h3";
import { defineNitroPlugin } from "./plugin.mjs";
const globalTiming = globalThis.__timing__ || {
start: () => 0,
end: () => 0,
metrics: []
};
const timingMiddleware = eventHandler((event) => {
const start = globalTiming.start();
const _end = event.node.res.end;
event.node.res.end = function(chunk, encoding, cb) {
const metrics = [
["Generate", globalTiming.end(start)],
...globalTiming.metrics
];
const serverTiming = metrics.map((m) => `-;dur=${m[1]};desc="${encodeURIComponent(m[0])}"`).join(", ");
if (!event.node.res.headersSent) {
event.node.res.setHeader("Server-Timing", serverTiming);
}
_end.call(event.node.res, chunk, encoding, cb);
return this;
}.bind(event.node.res);
});
export default defineNitroPlugin((nitro) => {
nitro.h3App.stack.unshift({
route: "/",
handler: timingMiddleware
});
});