UNPKG

autotel

Version:
45 lines (43 loc) 1.67 kB
import { y as splitNameOrOptions } from "./values-xBtdXtjA.js"; import { getConfig } from "./config.js"; import { U as createTraceContext } from "./init-Dyq6WtsO.js"; import { SpanStatusCode } from "@opentelemetry/api"; //#region src/decorators.ts function Trace(nameOrOptions, maybeOptions) { const { name: nameArgument, options } = splitNameOrOptions(nameOrOptions); const name = nameArgument ?? options?.name; return function(originalMethod, context) { const methodName = String(context.name); const methodStr = originalMethod?.toString() || ""; if (!(originalMethod && (originalMethod.constructor?.name === "AsyncFunction" || methodStr.trim().startsWith("async ") || methodStr.includes("[native code]") && methodStr.includes("async") || /async\s+/.test(methodStr)))) return originalMethod; const spanName = name || methodName; return async function(...args) { return getConfig().tracer.startActiveSpan(spanName, async (span) => { try { const ctx = createTraceContext(span); const originalCtx = this.ctx; try { this.ctx = ctx; const result = await originalMethod.apply(this, args); span.setStatus({ code: SpanStatusCode.OK }); return result; } finally { if (originalCtx === void 0) delete this.ctx; else this.ctx = originalCtx; } } catch (error) { span.setStatus({ code: SpanStatusCode.ERROR, message: error instanceof Error ? error.message : "Unknown error" }); span.recordException(error instanceof Error ? error : new Error(String(error))); throw error; } finally { span.end(); } }); }; }; } //#endregion export { Trace };