UNPKG

@edgeone/nuxt-pages

Version:

A professional deployment package that seamlessly deploys your Nuxt 3/4 applications to Tencent Cloud EdgeOne platform with optimized performance and intelligent caching.

70 lines (65 loc) 2.21 kB
var require = await (async () => { var { createRequire } = await import("node:module"); return createRequire(import.meta.url); })(); import { trace, wrapTracer } from "./chunk-V2LFVP3C.js"; import { getRequestContext } from "./chunk-KGYBHZC3.js"; // src/run/handlers/tracer.cts var spanMeta = /* @__PURE__ */ new WeakMap(); var spanCounter = /* @__PURE__ */ new WeakMap(); function spanHook(span) { const originalEnd = span.end.bind(span); span.end = (endTime) => { originalEnd(endTime); const meta = spanMeta.get(span); if (meta) { const requestContext = getRequestContext(); if (requestContext?.captureServerTiming) { const duration = (typeof endTime === "number" ? endTime : performance.now()) - meta.start; const serverTiming = requestContext.serverTiming ?? ""; const currentRequestSpanCounter = spanCounter.get(requestContext) ?? 1; requestContext.serverTiming = `${serverTiming}${serverTiming.length === 0 ? "" : ", "}s${currentRequestSpanCounter};dur=${duration};desc="${meta.name}"`; spanCounter.set(requestContext, currentRequestSpanCounter + 1); } } spanMeta.delete(span); }; return span; } var tracer; function getTracer() { if (!tracer) { const baseTracer = trace.getTracer("Nuxt Runtime"); const startSpan = baseTracer.startSpan.bind(baseTracer); baseTracer.startSpan = (...args) => { const span = startSpan(...args); spanMeta.set(span, { start: performance.now(), name: args[0] }); return spanHook(span); }; const startActiveSpan = baseTracer.startActiveSpan.bind(baseTracer); baseTracer.startActiveSpan = (...args) => { const [name, ...restOfArgs] = args; const augmentedArgs = restOfArgs.map((arg) => { if (typeof arg === "function") { return (span) => { spanMeta.set(span, { start: performance.now(), name: args[0] }); spanHook(span); return arg(span); }; } return arg; }); return startActiveSpan(name, ...augmentedArgs); }; tracer = wrapTracer(baseTracer); } return tracer; } export { getTracer };