UNPKG

autotel

Version:
44 lines (42 loc) 1.61 kB
import { getConfig } from "./config.js"; import { p as createTraceContext } from "./track-COUuU48p.js"; import { SpanStatusCode } from "@opentelemetry/api"; //#region src/decorators.ts function Trace(nameOrOptions, maybeOptions) { const name = typeof nameOrOptions === "string" ? nameOrOptions : nameOrOptions?.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 }; //# sourceMappingURL=decorators.js.map