UNPKG

autotel

Version:
71 lines (69 loc) 2.49 kB
import './chunk-HPUGKUMZ.js'; import './chunk-B3ZHLLMP.js'; import './chunk-WD4RP6IV.js'; import './chunk-S4OFEXLA.js'; import { createTraceContext } from './chunk-BBBWDIYQ.js'; import './chunk-W35FVJBC.js'; import './chunk-3SDILILG.js'; import './chunk-A4E5AQFK.js'; import './chunk-WGWSHJ2N.js'; import './chunk-GYR5K654.js'; import './chunk-TDNKIHKT.js'; import './chunk-6UQRVUN3.js'; import './chunk-3QXBFGKP.js'; import './chunk-33WTKH7X.js'; import './chunk-DPSA4QLA.js'; import './chunk-55ER2KD5.js'; import { getConfig } from './chunk-J5QENANM.js'; import './chunk-HA2WBOGQ.js'; import './chunk-DGUM43GV.js'; import { SpanStatusCode } from '@opentelemetry/api'; 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() || ""; const isAsync = originalMethod && (originalMethod.constructor?.name === "AsyncFunction" || methodStr.trim().startsWith("async ") || methodStr.includes("[native code]") && methodStr.includes("async") || // Fallback: if function has async in its string representation /async\s+/.test(methodStr)); if (!isAsync) { return originalMethod; } const spanName = name || methodName; return async function(...args) { const config = getConfig(); const tracer = config.tracer; return 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(); } }); }; }; } export { Trace }; //# sourceMappingURL=decorators.js.map //# sourceMappingURL=decorators.js.map