"use strict";exports.__esModule=true;exports.stackPush=stackPush;exports.stackPop=stackPop;exports.traceFn=traceFn;exports.traceAsyncFn=traceAsyncFn;exports.tracer=void 0;var _api=_interopRequireDefault(require("@opentelemetry/api"));function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}const tracer=_api.default.trace.getTracer('next',"10.0.8-canary.12");exports.tracer=tracer;const compilerStacks=new WeakMap();const compilerStoppedSpans=new WeakMap();function stackPush(compiler,spanName,attrs){let stack=compilerStacks.get(compiler);let span;if(!stack){compilerStacks.set(compiler,stack=[]);span=tracer.startSpan(spanName,attrs?attrs():undefined);}else{const parent=stack[stack.length-1];if(parent){tracer.withSpan(parent,()=>{span=tracer.startSpan(spanName,attrs?attrs():undefined);});}else{span=tracer.startSpan(spanName,attrs?attrs():undefined);}}stack.push(span);return span;}function stackPop(compiler,span,associatedName){let stack=compilerStacks.get(compiler);if(!stack){console.warn('Attempted to pop from non-existent stack. Compiler reference must be bad.');return;}let stoppedSpans=compilerStoppedSpans.get(compiler);if(!stoppedSpans){stoppedSpans=new Set();compilerStoppedSpans.set(compiler,stoppedSpans);}if(stoppedSpans.has(span)){console.warn(`Attempted to terminate tracing span that was already stopped for ${associatedName}`);return;}while(true){let poppedSpan=stack.pop();if(poppedSpan===span){stoppedSpans.add(poppedSpan);span.end();stoppedSpans.add(span);break;}else if(poppedSpan===undefined||stack.indexOf(span)===-1){// We've either reached the top of the stack or the stack doesn't contain
// the span for another reason.
console.warn(`Tracing span was not found in stack for: ${associatedName}`);stoppedSpans.add(span);span.end();break;}else if(stack.indexOf(span)!==-1){console.warn(`Attempted to pop span that was not at top of stack for: ${associatedName}`);stoppedSpans.add(poppedSpan);poppedSpan.end();}}}function traceFn(span,fn){return tracer.withSpan(span,()=>{try{return fn();}finally{span.end();}});}function traceAsyncFn(span,fn){return tracer.withSpan(span,async()=>{try{return await fn();}finally{span.end();}});}
//# sourceMappingURL=tracer.js.map