autotel
Version:
Write Once, Observe Anywhere
71 lines (69 loc) • 2.49 kB
JavaScript
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