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 }); });