@sailfish-ai/sf-veritas 0.2.5 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,86 @@
1
+ "use strict";var oe=Object.defineProperty;var se=(t,e,n)=>e in t?oe(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var c=(t,e,n)=>se(t,typeof e!="symbol"?e+"":e,n);const P=require("async_hooks"),ae=require("fs"),L=require("worker_threads"),l=[];for(let t=0;t<256;++t)l.push((t+256).toString(16).slice(1));let R;const ie=new Uint8Array(16),J={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function v(t,e,n){if(J.randomUUID&&!t)return J.randomUUID();const a=(t=t||{}).random??t.rng?.()??(function(){if(!R){if(typeof crypto>"u"||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");R=crypto.getRandomValues.bind(crypto)}return R(ie)})();if(a.length<16)throw new Error("Random bytes length must be >= 16");return a[6]=15&a[6]|64,a[8]=63&a[8]|128,(function(s,i=0){return(l[s[i+0]]+l[s[i+1]]+l[s[i+2]]+l[s[i+3]]+"-"+l[s[i+4]]+l[s[i+5]]+"-"+l[s[i+6]]+l[s[i+7]]+"-"+l[s[i+8]]+l[s[i+9]]+"-"+l[s[i+10]]+l[s[i+11]]+l[s[i+12]]+l[s[i+13]]+l[s[i+14]]+l[s[i+15]]).toLowerCase()})(a)}class ce{constructor(e){c(this,"apiKey");c(this,"apiGraphqlEndpoint");c(this,"sfDebug");c(this,"serviceIdentifier");c(this,"serviceVersion");c(this,"serviceUUID");c(this,"serviceAdditionalMetadata");c(this,"profilingModeEnabled");c(this,"profilingMaxDepth");c(this,"profilingMaxVariableSizeKb");c(this,"domainsToNotPropagateHeadersTo");c(this,"nodeModulesToCollectLocalVariablesOn");c(this,"printConfigurationStatuses");c(this,"logLevel");c(this,"stackDepthLocals");c(this,"stackDepthCodeTraceDepth");c(this,"packageLibraryType");c(this,"version");c(this,"gitSha");c(this,"_serviceIdentificationReceived",!1);this.apiKey=e.apiKey,this.apiGraphqlEndpoint=e?.apiGraphqlEndpoint||process.env.SAILFISH_GRAPHQL_ENDPOINT||"https://api-service.sailfishqa.com/graphql/",this.sfDebug=e?.debug===!0||process.env.SF_DEBUG==="true",this.serviceIdentifier=e?.serviceIdentifier||process.env.SERVICE_IDENTIFIER,this.serviceUUID=v(),this.serviceVersion=e?.serviceVersion||process.env.SERVICE_VERSION,this.gitSha=e?.gitSha||process.env.GIT_SHA||process.env.VERCEL_GIT_COMMIT_SHA,this.serviceAdditionalMetadata=e?.serviceAdditionalMetadata||{},this.profilingModeEnabled=e?.profilingModeEnabled??!1,this.profilingMaxDepth=e?.profilingMaxDepth??5,this.profilingMaxVariableSizeKb=e?.profilingMaxVariableSizeKb??25,this.domainsToNotPropagateHeadersTo=e?.domainsToNotPropagateHeadersTo||[],this.nodeModulesToCollectLocalVariablesOn=e?.nodeModulesToCollectLocalVariablesOn||["_all_"],this.printConfigurationStatuses=process.env.PRINT_CONFIGURATION_STATUSES||"true",this.logLevel=process.env.LOG_LEVEL||"INFO",this.stackDepthLocals=process.env.SAILFISH_EXCEPTION_STACK_DEPTH_LOCALS!==void 0?parseInt(process.env.SAILFISH_EXCEPTION_STACK_DEPTH_LOCALS,10):5,isNaN(this.stackDepthLocals)&&(this.stackDepthLocals=-1),this.stackDepthCodeTraceDepth=process.env.SAILFISH_EXCEPTION_STACK_DEPTH_CODE_TRACE_DEPTH!==void 0?parseInt(process.env.SAILFISH_EXCEPTION_STACK_DEPTH_CODE_TRACE_DEPTH,10):-1,isNaN(this.stackDepthCodeTraceDepth)&&(this.stackDepthCodeTraceDepth=-1),this.packageLibraryType="JS/TS BACKEND",this.version=this.getPackageVersion()}getPackageVersion(){return"0.1.15"}get serviceIdentificationReceived(){return this._serviceIdentificationReceived}setServiceIdentificationReceived(e){this._serviceIdentificationReceived=e}}const ee=Symbol.for("sailfish.sf_config");function T(){return globalThis[ee]}function f(){const t=T();if(!t)throw new Error("Configuration has not been initialized. Call getOrCreateConfig(options) first.");return t}const j=Symbol.for("sf.ctx.storeAls"),h=globalThis,w=h[j]??(h[j]=new P.AsyncLocalStorage),re=["identitytoolkit.googleapis.com","t.co","*.twitter.com","*.gravatar.com","*.googleapis.com","*.amazonaws.com","*.smooch.io","*.zendesk.com"],q=Symbol.for("sf.ctx.als"),F=h[q]??(h[q]=new P.AsyncLocalStorage),Q=Symbol.for("sf.ctx.sessionRegistry"),E=h[Q]??(h[Q]=new Map),A={handledExceptions:new Set,reentrancyGuardLoggingActive:!1,reentrancyGuardLoggingPreActive:!1,reentrancyGuardPrintActive:!1,reentrancyGuardPrintPreActive:!1,reentrancyGuardExceptionActive:!1,reentrancyGuardExceptionPreActive:!1,excludedDomains:new Set(re),supportedDomains:new Set},I=class I{constructor(){}current(){return w.getStore()}ensureStore(){const e=this.current();if(e)return e;const n=new Map;return w.enterWith(n),n}runWith(e,n){const a=this.current()??new Map,s=new Map(a);for(const[i,r]of Object.entries(e))s.set(i,r);return w.run(s,n)}static getInstance(){return h[I.GLOBAL_MANAGER_SYMBOL]||(h[I.GLOBAL_MANAGER_SYMBOL]=new I),h[I.GLOBAL_MANAGER_SYMBOL]}getCurrentContext(){return F.getStore()||A}setCurrentContext(e){const n=F.getStore()||A;F.enterWith({...n,...e})}ensureSession(e){let n=E.get(e);return n||(n={...A},E.set(e,n)),n}getContextFor(e){return E.get(e)??A}updateContextFor(e,n){const a=this.ensureSession(e);E.set(e,{...a,...n})}runWithSession(e,n){const a={...this.ensureSession(e)};return F.run(a,n)}deleteSession(e){E.delete(e)}getTraceId(){return this.getCurrentContext().traceId}getPageVisitUUID(){return this.getCurrentContext().pageVisitUUID}setTraceId(e){this.setCurrentContext({traceId:e})}setPageVisitUUID(e){this.setCurrentContext({pageVisitUUID:e})}getCurrentFunctionSpanId(){return this.getCurrentContext().currentFunctionSpanId}setCurrentFunctionSpanId(e){this.setCurrentContext({currentFunctionSpanId:e})}clearCurrentFunctionSpanId(){this.setCurrentContext({currentFunctionSpanId:void 0})}getOrSetSfTraceId(e,n=!1){let a=this.getTraceId();return a||(a=e||(n?v():`nonsession-applogs-v3/${f().apiKey}/${v()}`),this.setTraceId(a),f().sfDebug&&console.log(" Created new trace ID:",a),a)}getOrSetPageVisitUUID(){let e=this.getPageVisitUUID();return e||(e=v(),this.setPageVisitUUID(e),f().sfDebug&&console.log(" Created new page visit UUID:",e),e)}getHandledExceptions(){return this.getCurrentContext().handledExceptions}markExceptionHandled(e){const n=this.getHandledExceptions();n.add(e),this.setCurrentContext({handledExceptions:n})}hasHandledException(e){return this.getHandledExceptions().has(e)}resetHandledExceptions(){this.setCurrentContext({handledExceptions:new Set})}getExcludedDomains(){return this.getCurrentContext().excludedDomains}getSupportedDomains(){return this.getCurrentContext().supportedDomains}addSupportedDomains(e){this.getCurrentContext().supportedDomains.add(e.toLowerCase().trim())}setTraceIdFor(e,n){this.updateContextFor(e,{traceId:n})}setPageVisitUUIDFor(e,n){this.updateContextFor(e,{pageVisitUUID:n})}};c(I,"GLOBAL_MANAGER_SYMBOL",Symbol.for("sf.ctx.manager"));let y=I;class te{constructor(){c(this,"apiKey");c(this,"endpoint");c(this,"queryType","mutation");c(this,"operationName","");c(this,"serviceUUID",f().serviceUUID);c(this,"contextManager");this.apiKey=f().apiKey,this.endpoint=f().apiGraphqlEndpoint,this.contextManager=y.getInstance()}get queryName(){return this.operationName?this.operationName.charAt(0).toLowerCase()+this.operationName.slice(1):""}getDefaultVariables(){const e=Date.now().toString(),n=this.contextManager.getOrSetSfTraceId(),a=this.contextManager.getCurrentFunctionSpanId();return{apiKey:this.apiKey,serviceUuid:this.serviceUUID,sessionId:n,timestampMs:e,parentSpanId:a}}getVariables(e={}){return{...this.getDefaultVariables(),...e}}setOperationName(e){this.operationName=e}setEndpoint(e){this.endpoint=e}setServiceUUID(e){this.serviceUUID=e}}const ue=fetch;let O=!1;async function B(t,e,n,a){try{const s=f();let i;try{i=JSON.stringify({query:n,variables:a,operationName:e})}catch{i=JSON.stringify({query:n,operationName:e})}O=!0,ue(t,{method:"POST",headers:{"Content-Type":"application/json"},body:i}).then(async r=>{if(O=!1,!r.ok)return void(s.sfDebug&&console.error(`GraphQL request failed with status ${r.status} for ${e}`));const o=await r.json();o.errors?.length?(function(u,m,p){const g=u&&typeof u=="object"&&!Array.isArray(u)?Object.keys(u)[0]:void 0;console.error(g==="identifyServiceDetails"?`IdentifyServiceDetails NOT sent successfully for service: UUID=${p.serviceUUID}`:`GraphQL request failed with errors: ${JSON.stringify(m)} for operation key ${g}`)})(o.data,o.errors,s):s.sfDebug&&(function(u,m,p){const g=u&&typeof u=="object"&&!Array.isArray(u)?Object.keys(u)[0]:void 0,d=u[g]||!1;g==="identifyServiceDetails"&&(p.setServiceIdentificationReceived(d),f().sfDebug&&console.log(`IdentifyServiceDetails sent successfully for service: UUID=${p.serviceUUID}; serviceIdentificationReceived=${g==="identifyServiceDetails"?d:"N/A"}`))})(o.data,0,s)}).catch(r=>{O=!1,s.sfDebug&&(console.error(`[RequestUtils] Fetch error for ${e} to ${t}:`,r),r.cause&&console.error("[RequestUtils] Error cause:",r.cause))})}catch(s){O=!1,f().sfDebug&&console.error("Error sending data to GraphQL server:",s)}}function C(t,e){if(!t)return e;const n=t.toLowerCase();return n==="true"||n==="1"||n==="yes"}const D=new P.AsyncLocalStorage;let M=!1;function W(t,e){try{const n=JSON.stringify(t).length/1048576;return n<=e?t:{_truncated:!0,_originalSizeMB:n.toFixed(2),_limitMB:e,_preview:JSON.stringify(t).substring(0,500)+"..."}}catch{return{_error:"Failed to serialize data",_type:typeof t}}}function _(t,e){const n=process.env[t];return n===void 0?e:n==="true"||n==="1"}function X(t,e){const n=process.env[t];if(n===void 0)return e;const a=parseFloat(n);return isNaN(a)?e:a}function x(){return{enabled:_("SF_WORKER_POOL_ENABLED",!0),trackFs:_("SF_WORKER_POOL_TRACK_FS",!1),trackDns:_("SF_WORKER_POOL_TRACK_DNS",!0),trackCrypto:_("SF_WORKER_POOL_TRACK_CRYPTO",!1),trackZlib:_("SF_WORKER_POOL_TRACK_ZLIB",!1),captureArguments:_("SF_WORKER_POOL_CAPTURE_ARGUMENTS",!0),captureReturnValue:_("SF_WORKER_POOL_CAPTURE_RETURN_VALUE",!0),argLimitMb:X("SF_WORKER_POOL_ARG_LIMIT_MB",1),returnLimitMb:X("SF_WORKER_POOL_RETURN_LIMIT_MB",1)}}function Y(t,e,n,a){let s;try{switch(t){case"fs":s=(function(i,r){const o={};switch(i){case"readFile":case"writeFile":case"appendFile":o.path=String(r[0]||""),r[1]&&typeof r[1]=="object"?(o.encoding=r[1].encoding||null,o.flag=r[1].flag||null):typeof r[1]=="string"&&(o.encoding=r[1]),i!=="writeFile"&&i!=="appendFile"||(Buffer.isBuffer(r[1])?(o.dataType="Buffer",o.dataSize=r[1].length):typeof r[1]=="string"&&(o.dataType="string",o.dataSize=r[1].length));break;case"readdir":case"stat":case"lstat":case"access":case"chmod":case"mkdir":case"rmdir":case"unlink":o.path=String(r[0]||""),r[1]&&typeof r[1]=="object"&&(o.options={...r[1]},delete o.options.callback);break;case"rename":o.oldPath=String(r[0]||""),o.newPath=String(r[1]||"");break;case"open":o.path=String(r[0]||""),o.flags=r[1],o.mode=r[2];break;case"close":case"fstat":o.fd=r[0];break;case"read":case"write":o.fd=r[0],Buffer.isBuffer(r[1])&&(o.bufferSize=r[1].length),o.offset=r[2],o.length=r[3],o.position=r[4];break;default:o.argsCount=r.length-1}return o})(e,n);break;case"dns":s=(function(i,r){const o={};switch(i){case"lookup":o.hostname=String(r[0]||""),typeof r[1]=="object"?(o.family=r[1].family,o.all=r[1].all):typeof r[1]=="number"&&(o.family=r[1]);break;case"resolve":case"resolve4":case"resolve6":case"resolveAny":case"resolveMx":case"resolveNs":case"resolveTxt":o.hostname=String(r[0]||"");break;case"reverse":o.ip=String(r[0]||"");break;default:o.argsCount=r.length-1}return o})(e,n);break;case"crypto":s=(function(i,r){const o={};switch(i){case"pbkdf2":o.passwordType=typeof r[0],o.saltType=typeof r[1],o.iterations=r[2],o.keylen=r[3],o.digest=r[4];break;case"scrypt":o.passwordType=typeof r[0],o.saltType=typeof r[1],o.keylen=r[2],typeof r[3]=="object"&&(o.N=r[3].N,o.r=r[3].r,o.p=r[3].p);break;case"randomBytes":o.size=r[0];break;case"generateKeyPair":o.type=r[0],typeof r[1]=="object"&&(o.modulusLength=r[1].modulusLength,o.namedCurve=r[1].namedCurve);break;default:o.argsCount=r.length-1}return o})(e,n);break;case"zlib":s=(function(i,r){const o={};return Buffer.isBuffer(r[0])?(o.inputType="Buffer",o.inputSize=r[0].length):typeof r[0]=="string"?(o.inputType="string",o.inputSize=r[0].length):o.inputType=typeof r[0],r[1]&&typeof r[1]=="object"&&typeof r[1]!="function"&&(o.options={...r[1]}),o})(0,n);break;default:return null}return a>0?W(s,a):s}catch{return{error:"Failed to capture arguments",argsCount:n.length-1}}}function Z(t,e,n,a){let s;try{switch(t){case"fs":s=(function(i,r){if(!r)return null;switch(i){case"readFile":return Buffer.isBuffer(r)?{type:"Buffer",size:r.length}:typeof r=="string"?{type:"string",size:r.length}:{type:typeof r};case"readdir":return{count:Array.isArray(r)?r.length:0,items:r};case"stat":case"lstat":case"fstat":return{size:r.size,mode:r.mode,isFile:r.isFile(),isDirectory:r.isDirectory()};case"open":return{fd:r};case"read":return{bytesRead:r};case"write":return{bytesWritten:r};default:return r}})(e,n);break;case"dns":s=(function(i,r){if(!r)return null;switch(i){case"lookup":return Array.isArray(r)?{count:r.length,addresses:r}:r;case"resolve":case"resolve4":case"resolve6":case"resolveAny":case"resolveMx":case"resolveNs":case"resolveTxt":return{count:Array.isArray(r)?r.length:0,records:r};case"reverse":return{hostnames:r};default:return r}})(e,n);break;case"crypto":s=(function(i,r){if(!r)return null;switch(i){case"pbkdf2":case"scrypt":case"randomBytes":return Buffer.isBuffer(r)?{type:"Buffer",size:r.length}:{type:typeof r};case"generateKeyPair":return{hasPublicKey:!!r?.publicKey,hasPrivateKey:!!r?.privateKey};default:return r}})(e,n);break;case"zlib":s=(function(i,r){return r?Buffer.isBuffer(r)?{type:"Buffer",size:r.length}:typeof r=="string"?{type:"string",size:r.length}:{type:typeof r}:null})(0,n);break;default:return null}return a>0?W(s,a):s}catch{return{error:"Failed to capture result",type:typeof n}}}function le(t){return t.operationType==="worker_pool"}class ne extends te{constructor(){super(),this.operationName="CollectFunctionSpans"}send(e){const n=f().sfDebug;n&&console.log(`[FunctionSpanTransmitter] Preparing to send ${e.length} function span(s)`);for(const a of e)try{if(le(a)){this.sendWorkerPoolSpan(a,n);continue}const s=a;let i;if(s.result!==void 0&&s.result!==null){const o=typeof s.result;i=JSON.stringify({type:o,has_value:!0,value:s.result})}else i=s.result===null?JSON.stringify({type:"null",has_value:!0,value:null}):JSON.stringify({type:"undefined",has_value:!1,value:null});const r=this.getVariables({library:"JS/TS BACKEND",version:f().version,spanId:s.spanId,parentSpanId:s.parentSpanId,filePath:s.filePath,lineNumber:s.metadata.line,columnNumber:s.metadata.column,functionName:s.functionName,arguments:JSON.stringify(s.args||{}),returnValue:i,startTimeNs:(1e6*Date.now()-1e6*s.duration).toString(),durationNs:(1e6*s.duration).toString()});n&&(console.log(`[FunctionSpanTransmitter] Sending GraphQL mutation to ${this.endpoint}`),console.log("[FunctionSpanTransmitter] Variables:",JSON.stringify(r,null,2))),B(this.endpoint,this.operationName,this.getQuery(),r),n&&console.log(`[FunctionSpanTransmitter] Queued function span for ${s.functionName}`)}catch(s){console.error(`[FunctionSpanTransmitter] Error preparing function span for ${a.functionName}:`,s)}}sendWorkerPoolSpan(e,n){try{let a;if(e.result!==void 0&&e.result!==null){const i=typeof e.result;a=JSON.stringify({type:i,has_value:!0,value:e.result})}else a=e.result===null?JSON.stringify({type:"null",has_value:!0,value:null}):JSON.stringify({type:"undefined",has_value:!1,value:null});const s=this.getVariables({library:"JS/TS BACKEND",version:f().version,spanId:e.spanId,operationName:e.operationName,moduleName:e.moduleName,methodName:e.methodName,startTimeNs:e.startTimeNs,durationNs:e.durationNs,arguments:JSON.stringify(e.args||{}),returnValue:a,error:e.error,pid:e.pid,threadId:e.threadId});n&&(console.log(`[FunctionSpanTransmitter] Sending worker pool span: ${e.operationName}`),console.log("[FunctionSpanTransmitter] Variables:",JSON.stringify(s,null,2))),B(this.endpoint,"CollectWorkerPoolSpans",this.getWorkerPoolQuery(),s),n&&console.log(`[FunctionSpanTransmitter] Queued worker pool span for ${e.operationName}`)}catch(a){console.error(`[FunctionSpanTransmitter] Error preparing worker pool span for ${e.operationName}:`,a)}}getWorkerPoolQuery(){return`
2
+ mutation CollectWorkerPoolSpans(
3
+ $apiKey: String!,
4
+ $serviceUuid: String!,
5
+ $sessionId: String!,
6
+ $timestampMs: String!,
7
+ $library: String!,
8
+ $version: String!,
9
+ $spanId: String!,
10
+ $operationName: String!,
11
+ $moduleName: String!,
12
+ $methodName: String!,
13
+ $startTimeNs: String!,
14
+ $durationNs: String!,
15
+ $parentSpanId: String,
16
+ $arguments: String,
17
+ $returnValue: String,
18
+ $error: String,
19
+ $pid: Int,
20
+ $threadId: Int
21
+ ) {
22
+ collectWorkerPoolSpans(
23
+ apiKey: $apiKey,
24
+ serviceUuid: $serviceUuid,
25
+ sessionId: $sessionId,
26
+ timestampMs: $timestampMs,
27
+ library: $library,
28
+ version: $version,
29
+ spanId: $spanId,
30
+ operationName: $operationName,
31
+ moduleName: $moduleName,
32
+ methodName: $methodName,
33
+ startTimeNs: $startTimeNs,
34
+ durationNs: $durationNs,
35
+ parentSpanId: $parentSpanId,
36
+ arguments: $arguments,
37
+ returnValue: $returnValue,
38
+ error: $error,
39
+ pid: $pid,
40
+ threadId: $threadId
41
+ )
42
+ }
43
+ `}getQuery(){return`
44
+ ${this.queryType} ${this.operationName}(
45
+ $apiKey: String!,
46
+ $serviceUuid: String!,
47
+ $sessionId: String!,
48
+ $timestampMs: String!,
49
+ $parentSpanId: String,
50
+ $library: String!,
51
+ $version: String!,
52
+ $spanId: String!,
53
+ $filePath: String!,
54
+ $lineNumber: Int!,
55
+ $columnNumber: Int!,
56
+ $functionName: String!,
57
+ $arguments: String!,
58
+ $returnValue: String,
59
+ $startTimeNs: String!,
60
+ $durationNs: String!
61
+ ) {
62
+ ${this.queryName}(
63
+ apiKey: $apiKey,
64
+ serviceUuid: $serviceUuid,
65
+ sessionId: $sessionId,
66
+ timestampMs: $timestampMs,
67
+ parentSpanId: $parentSpanId,
68
+ library: $library,
69
+ version: $version,
70
+ spanId: $spanId,
71
+ filePath: $filePath,
72
+ lineNumber: $lineNumber,
73
+ columnNumber: $columnNumber,
74
+ functionName: $functionName,
75
+ arguments: $arguments,
76
+ returnValue: $returnValue,
77
+ startTimeNs: $startTimeNs,
78
+ durationNs: $durationNs
79
+ )
80
+ }
81
+ `}}let V=null;function K(t){const e=T(),n=e?.sfDebug||!1;n&&console.log("[WorkerPool] Capturing span:",{operation:t.operationName,duration:`${t.duration}ms`,error:t.error,spanId:t.spanId,parentSpanId:t.parentSpanId}),process.env.SF_FUNCSPAN_CONSOLE_OUTPUT==="true"&&console.log(`
82
+ ⚙️ Worker Pool Operation:`,{operation:t.operationName,duration:`${t.duration.toFixed(2)}ms`,arguments:t.args,result:t.error?`Error: ${t.error}`:t.result,spanId:t.spanId,parentSpanId:t.parentSpanId||"none"});const a=process.env.SF_FUNCSPAN_JSONL_FILE;if(a)try{const s=a==="true"||a==="1"?"funcspans.jsonl":a,i=Date.now(),r=process.hrtime.bigint(),o=BigInt(t.startTimeNs),u=Number(r-o)/1e6,m=new Date(i-u).toISOString(),p=JSON.stringify({timestamp:m,operationType:t.operationType,operationName:t.operationName,moduleName:t.moduleName,methodName:t.methodName,duration:t.duration,durationNs:t.durationNs,startTimeNs:t.startTimeNs,arguments:t.args,returnValue:t.error?{error:String(t.error)}:t.result,spanId:t.spanId,parentSpanId:t.parentSpanId,pid:t.pid,threadId:t.threadId})+`
83
+ `;ae.appendFileSync(s,p,"utf-8")}catch(s){console.error("[WorkerPool] Error writing to JSONL file:",s)}if(n&&console.log("[WorkerPool] Sending span to transmitter"),process.env.SF_FUNCSPAN_SKIP_BACKEND!=="true")try{(V||(V=new ne),V).send([t]),n&&console.log("[WorkerPool] Span sent successfully")}catch(s){n&&console.error("[WorkerPool] Error sending span:",s)}}exports.BaseTransmitter=te,exports.ContextManager=y,exports.DEFAULT_DOMAINS_TO_EXCLUDE=re,exports.FunctionSpanTransmitter=ne,exports.captureWorkerPoolOperation=function(t,e,n,a,s){const i=T(),r=i?.sfDebug||!1;r&&console.log(`[WorkerPool] Capturing ${t}.${e}`);const o=x(),u=y.getInstance().getCurrentFunctionSpanId(),m=v();r&&console.log(`[WorkerPool] Span ID: ${m}, Parent: ${u||"none"}`);const p=new P.AsyncResource("WorkerPoolOperation"),g=process.hrtime.bigint();let d=null;o.captureArguments&&(d=Y(t,e,a,o.argLimitMb));const S=a.findIndex(b=>typeof b=="function");if(S===-1)return r&&console.log(`[WorkerPool] No callback found for ${t}.${e}`),n.apply(s,a);const N=a[S],$=[...a];return $[S]=function(b,...U){const k=process.hrtime.bigint()-g,G=Number(k)/1e6;N(b,...U),p.runInAsyncScope(()=>{r&&console.log(`[WorkerPool] ${t}.${e} completed in ${G.toFixed(3)}ms (${k}ns)`);let H=null,z=null;b?z=b?.message||String(b):o.captureReturnValue&&U.length>0&&(H=Z(t,e,U[0],o.returnLimitMb)),K({operationType:"worker_pool",operationName:`${t}.${e}`,moduleName:t,methodName:e,duration:G,durationNs:k.toString(),startTimeNs:g.toString(),args:d,result:H,error:z,spanId:m,parentSpanId:u,pid:process.pid,threadId:L.threadId})}),p.emitDestroy()},n.apply(s,$)},exports.captureWorkerPoolPromiseOperation=function(t,e,n,a,s){const i=T(),r=i?.sfDebug||!1;r&&console.log(`[WorkerPool] Capturing ${t}.${e} (Promise)`);const o=x(),u=y.getInstance().getCurrentFunctionSpanId(),m=v();r&&console.log(`[WorkerPool] Span ID: ${m}, Parent: ${u||"none"}`);const p=process.hrtime.bigint();let g=null;return o.captureArguments&&(g=Y(t,e,a,o.argLimitMb)),n.apply(s,a).then(d=>{const S=process.hrtime.bigint()-p,N=Number(S)/1e6;r&&console.log(`[WorkerPool] ${t}.${e} completed in ${N.toFixed(3)}ms (${S}ns)`);let $=null;return o.captureReturnValue&&($=Z(t,e,d,o.returnLimitMb)),K({operationType:"worker_pool",operationName:`${t}.${e}`,moduleName:t,methodName:e,duration:N,durationNs:S.toString(),startTimeNs:p.toString(),args:g,result:$,error:null,spanId:m,parentSpanId:u,pid:process.pid,threadId:L.threadId}),d},d=>{const S=process.hrtime.bigint()-p,N=Number(S)/1e6;throw r&&console.log(`[WorkerPool] ${t}.${e} failed in ${N.toFixed(3)}ms: ${d?.message||d}`),K({operationType:"worker_pool",operationName:`${t}.${e}`,moduleName:t,methodName:e,duration:N,durationNs:S.toString(),startTimeNs:p.toString(),args:g,result:null,error:d?.message||String(d),spanId:m,parentSpanId:u,pid:process.pid,threadId:L.threadId}),d})},exports.clearFuncspanOverride=function(){},exports.funcspanOverrideStorage=D,exports.getConfig=f,exports.getCurrentFunctionSpanId=function(){return y.getInstance().getCurrentFunctionSpanId()},exports.getDefaultConfig=function(){return{capture_arguments:!1,capture_return_value:!1,arg_limit_mb:1,return_limit_mb:1,autocapture_all_child_functions:!1,sample_rate:0,enable_sampling:!1,capture_sf_veritas:!1,parse_json_strings:!1}},exports.getEnvConfig=function(){return{capture_arguments:C(process.env.SF_FUNCSPAN_CAPTURE_ARGUMENTS,!0),capture_return_value:C(process.env.SF_FUNCSPAN_CAPTURE_RETURN_VALUE,!0),arg_limit_mb:parseInt(process.env.SF_FUNCSPAN_ARG_LIMIT_MB||"1",10),return_limit_mb:parseInt(process.env.SF_FUNCSPAN_RETURN_LIMIT_MB||"1",10),autocapture_all_child_functions:C(process.env.SF_FUNCSPAN_AUTOCAPTURE_ALL_CHILD_FUNCTIONS,!1),sample_rate:parseFloat(process.env.SF_FUNCSPAN_SAMPLE_RATE||"1.0"),enable_sampling:C(process.env.SF_FUNCSPAN_ENABLE_SAMPLING,!1),capture_sf_veritas:C(process.env.SF_FUNCSPAN_CAPTURE_SF_VERITAS,!1),parse_json_strings:C(process.env.SF_FUNCSPAN_PARSE_JSON_STRINGS,!1)}},exports.getFuncspanOverride=function(){if(M)return D.getStore();try{M=!0;const t=D.getStore(),e=new Error().stack?.split(`
84
+ `).slice(1,4).join(`
85
+ `);return console.log(`[getFuncspanOverride] Called from:
86
+ ${e}`),console.log("[getFuncspanOverride] Returned value:",t),t}catch(t){return void console.error("[getFuncspanOverride] ❌ Error:",t)}finally{M=!1}},exports.getGlobalConfigUnsafe=T,exports.getOrCreateConfig=function(t){const e=T();if(e)return{config:e};const n=new ce(t);return(function(a){globalThis[ee]=a})(n),n.sfDebug&&console.log("[[getOrCreateConfig]] Created global config:",n),{config:n}},exports.isModuleTrackingEnabled=function(t){const e=x();if(!e.enabled)return!1;switch(t){case"fs":return e.trackFs;case"dns":return e.trackDns;case"crypto":return e.trackCrypto;case"zlib":return e.trackZlib;default:return!1}},exports.mergeConfigs=function(...t){const e={};for(const n of t)for(const a in n)n[a]!==void 0&&(e[a]=n[a]);return e},exports.nonBlockingPost=B,exports.parseHeaderOverride=function(t){try{const e=t.split("-");return e.length!==9?(console.error(`[FuncSpan] Invalid header format: expected 9 parts, got ${e.length}`),null):{capture_arguments:e[0]==="1",capture_return_value:e[1]==="1",arg_limit_mb:parseInt(e[2],10),return_limit_mb:parseInt(e[3],10),autocapture_all_child_functions:e[4]==="1",sample_rate:parseFloat(e[5]),enable_sampling:e[6]==="1",capture_sf_veritas:e[7]==="1",parse_json_strings:e[8]==="1"}}catch(e){return console.error(`[FuncSpan] Failed to parse header override "${t}":`,e),null}},exports.runWithContext=function(t){const e={...y.getInstance().getCurrentContext()};F.run(e,()=>{t()})},exports.setFuncspanOverride=function(t){D.enterWith(t)},exports.truncateToLimit=W,exports.v4=v;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sailfish-ai/sf-veritas",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "publishPublicly": true,
5
5
  "description": "A versatile Edge Runtime-compatible package for JavaScript and TypeScript backend systems and scripts.",
6
6
  "main": "./dist/sf-veritas.cjs",
@@ -48,6 +48,11 @@
48
48
  "import": "./dist/runtime/register.mjs",
49
49
  "require": "./dist/runtime/register.cjs",
50
50
  "types": "./dist/types/runtime/register.d.ts"
51
+ },
52
+ "./worker-pool-capture": {
53
+ "import": "./dist/worker-pool-capture.mjs",
54
+ "require": "./dist/worker-pool-capture.cjs",
55
+ "types": "./dist/types/worker-pool-capture.d.ts"
51
56
  }
52
57
  },
53
58
  "scripts": {
@@ -1 +0,0 @@
1
- "use strict";const ce=require("@babel/parser"),z=require("@babel/traverse"),J=require("@babel/generator"),pe=require("@babel/types"),R=require("path"),ge=require("fs");function de(a){const p=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(a){for(const m in a)if(m!=="default"){const _=Object.getOwnPropertyDescriptor(a,m);Object.defineProperty(p,m,_.get?_:{enumerable:!0,get:()=>a[m]})}}return p.default=a,Object.freeze(p)}const l=de(pe);var V,Q,I={},G={},$={},N={};function fe(){if(V)return N;V=1;var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");return N.encode=function(p){if(0<=p&&p<a.length)return a[p];throw new TypeError("Must be between 0 and 63: "+p)},N.decode=function(p){return 65<=p&&p<=90?p-65:97<=p&&p<=122?p-97+26:48<=p&&p<=57?p-48+52:p==43?62:p==47?63:-1},N}function ue(){if(Q)return $;Q=1;var a=fe();return $.encode=function(p){var m,_="",g=(function(t){return t<0?1+(-t<<1):0+(t<<1)})(p);do m=31&g,(g>>>=5)>0&&(m|=32),_+=a.encode(m);while(g>0);return _},$.decode=function(p,m,_){var g,t,o,c,d=p.length,h=0,v=0;do{if(m>=d)throw new Error("Expected more digits in base 64 VLQ value.");if((t=a.decode(p.charCodeAt(m++)))===-1)throw new Error("Invalid base64 digit: "+p.charAt(m-1));g=!!(32&t),h+=(t&=31)<<v,v+=5}while(g);_.value=(c=(o=h)>>1,1&~o?c:-c),_.rest=m},$}var H,K={};function j(){return H||(H=1,(function(a){a.getArg=function(n,e,i){if(e in n)return n[e];if(arguments.length===3)return i;throw new Error('"'+e+'" is a required argument.')};var p=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,m=/^data:.+\,.+$/;function _(n){var e=n.match(p);return e?{scheme:e[1],auth:e[2],host:e[3],port:e[4],path:e[5]}:null}function g(n){var e="";return n.scheme&&(e+=n.scheme+":"),e+="//",n.auth&&(e+=n.auth+"@"),n.host&&(e+=n.host),n.port&&(e+=":"+n.port),n.path&&(e+=n.path),e}a.urlParse=_,a.urlGenerate=g;var t,o,c=(t=function(n){var e=n,i=_(n);if(i){if(!i.path)return n;e=i.path}for(var r=a.isAbsolute(e),f=[],y=0,C=0;;){if(y=C,(C=e.indexOf("/",y))===-1){f.push(e.slice(y));break}for(f.push(e.slice(y,C));C<e.length&&e[C]==="/";)C++}var L,S=0;for(C=f.length-1;C>=0;C--)(L=f[C])==="."?f.splice(C,1):L===".."?S++:S>0&&(L===""?(f.splice(C+1,S),S=0):(f.splice(C,2),S--));return(e=f.join("/"))===""&&(e=r?"/":"."),i?(i.path=e,g(i)):e},o=[],function(n){for(var e=0;e<o.length;e++)if(o[e].input===n){var i=o[0];return o[0]=o[e],o[e]=i,o[0].result}var r=t(n);return o.unshift({input:n,result:r}),o.length>32&&o.pop(),r});function d(n,e){n===""&&(n="."),e===""&&(e=".");var i=_(e),r=_(n);if(r&&(n=r.path||"/"),i&&!i.scheme)return r&&(i.scheme=r.scheme),g(i);if(i||e.match(m))return e;if(r&&!r.host&&!r.path)return r.host=e,g(r);var f=e.charAt(0)==="/"?e:c(n.replace(/\/+$/,"")+"/"+e);return r?(r.path=f,g(r)):f}a.normalize=c,a.join=d,a.isAbsolute=function(n){return n.charAt(0)==="/"||p.test(n)},a.relative=function(n,e){n===""&&(n="."),n=n.replace(/\/$/,"");for(var i=0;e.indexOf(n+"/")!==0;){var r=n.lastIndexOf("/");if(r<0||(n=n.slice(0,r)).match(/^([^\/]+:\/)?\/*$/))return e;++i}return Array(i+1).join("../")+e.substr(n.length+1)};var h=!("__proto__"in Object.create(null));function v(n){return n}function s(n){if(!n)return!1;var e=n.length;if(e<9||n.charCodeAt(e-1)!==95||n.charCodeAt(e-2)!==95||n.charCodeAt(e-3)!==111||n.charCodeAt(e-4)!==116||n.charCodeAt(e-5)!==111||n.charCodeAt(e-6)!==114||n.charCodeAt(e-7)!==112||n.charCodeAt(e-8)!==95||n.charCodeAt(e-9)!==95)return!1;for(var i=e-10;i>=0;i--)if(n.charCodeAt(i)!==36)return!1;return!0}function u(n,e){return n===e?0:n===null?1:e===null?-1:n>e?1:-1}a.toSetString=h?v:function(n){return s(n)?"$"+n:n},a.fromSetString=h?v:function(n){return s(n)?n.slice(1):n},a.compareByOriginalPositions=function(n,e,i){var r=u(n.source,e.source);return r!==0||(r=n.originalLine-e.originalLine)!==0||(r=n.originalColumn-e.originalColumn)!==0||i||(r=n.generatedColumn-e.generatedColumn)!==0||(r=n.generatedLine-e.generatedLine)!==0?r:u(n.name,e.name)},a.compareByOriginalPositionsNoSource=function(n,e,i){var r;return(r=n.originalLine-e.originalLine)!==0||(r=n.originalColumn-e.originalColumn)!==0||i||(r=n.generatedColumn-e.generatedColumn)!==0||(r=n.generatedLine-e.generatedLine)!==0?r:u(n.name,e.name)},a.compareByGeneratedPositionsDeflated=function(n,e,i){var r=n.generatedLine-e.generatedLine;return r!==0||(r=n.generatedColumn-e.generatedColumn)!==0||i||(r=u(n.source,e.source))!==0||(r=n.originalLine-e.originalLine)!==0||(r=n.originalColumn-e.originalColumn)!==0?r:u(n.name,e.name)},a.compareByGeneratedPositionsDeflatedNoLine=function(n,e,i){var r=n.generatedColumn-e.generatedColumn;return r!==0||i||(r=u(n.source,e.source))!==0||(r=n.originalLine-e.originalLine)!==0||(r=n.originalColumn-e.originalColumn)!==0?r:u(n.name,e.name)},a.compareByGeneratedPositionsInflated=function(n,e){var i=n.generatedLine-e.generatedLine;return i!==0||(i=n.generatedColumn-e.generatedColumn)!==0||(i=u(n.source,e.source))!==0||(i=n.originalLine-e.originalLine)!==0||(i=n.originalColumn-e.originalColumn)!==0?i:u(n.name,e.name)},a.parseSourceMapInput=function(n){return JSON.parse(n.replace(/^\)]}'[^\n]*\n/,""))},a.computeSourceURL=function(n,e,i){if(e=e||"",n&&(n[n.length-1]!=="/"&&e[0]!=="/"&&(n+="/"),e=n+e),i){var r=_(i);if(!r)throw new Error("sourceMapURL could not be parsed");if(r.path){var f=r.path.lastIndexOf("/");f>=0&&(r.path=r.path.substring(0,f+1))}e=d(g(r),e)}return c(e)}})(K)),K}var X,D={};function le(){if(X)return D;X=1;var a=j(),p=Object.prototype.hasOwnProperty,m=typeof Map<"u";function _(){this._array=[],this._set=m?new Map:Object.create(null)}return _.fromArray=function(g,t){for(var o=new _,c=0,d=g.length;c<d;c++)o.add(g[c],t);return o},_.prototype.size=function(){return m?this._set.size:Object.getOwnPropertyNames(this._set).length},_.prototype.add=function(g,t){var o=m?g:a.toSetString(g),c=m?this.has(g):p.call(this._set,o),d=this._array.length;c&&!t||this._array.push(g),c||(m?this._set.set(g,d):this._set[o]=d)},_.prototype.has=function(g){if(m)return this._set.has(g);var t=a.toSetString(g);return p.call(this._set,t)},_.prototype.indexOf=function(g){if(m){var t=this._set.get(g);if(t>=0)return t}else{var o=a.toSetString(g);if(p.call(this._set,o))return this._set[o]}throw new Error('"'+g+'" is not in the set.')},_.prototype.at=function(g){if(g>=0&&g<this._array.length)return this._array[g];throw new Error("No element indexed by "+g)},_.prototype.toArray=function(){return this._array.slice()},D.ArraySet=_,D}var Y,Z,U={};function he(){if(Y)return U;Y=1;var a=j();function p(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}return p.prototype.unsortedForEach=function(m,_){this._array.forEach(m,_)},p.prototype.add=function(m){var _,g,t,o,c,d;_=this._last,g=m,t=_.generatedLine,o=g.generatedLine,c=_.generatedColumn,d=g.generatedColumn,o>t||o==t&&d>=c||a.compareByGeneratedPositionsInflated(_,g)<=0?(this._last=m,this._array.push(m)):(this._sorted=!1,this._array.push(m))},p.prototype.toArray=function(){return this._sorted||(this._array.sort(a.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},U.MappingList=p,U}function ee(){if(Z)return G;Z=1;var a=ue(),p=j(),m=le().ArraySet,_=he().MappingList;function g(t){t||(t={}),this._file=p.getArg(t,"file",null),this._sourceRoot=p.getArg(t,"sourceRoot",null),this._skipValidation=p.getArg(t,"skipValidation",!1),this._ignoreInvalidMapping=p.getArg(t,"ignoreInvalidMapping",!1),this._sources=new m,this._names=new m,this._mappings=new _,this._sourcesContents=null}return g.prototype._version=3,g.fromSourceMap=function(t,o){var c=t.sourceRoot,d=new g(Object.assign(o||{},{file:t.file,sourceRoot:c}));return t.eachMapping(function(h){var v={generated:{line:h.generatedLine,column:h.generatedColumn}};h.source!=null&&(v.source=h.source,c!=null&&(v.source=p.relative(c,v.source)),v.original={line:h.originalLine,column:h.originalColumn},h.name!=null&&(v.name=h.name)),d.addMapping(v)}),t.sources.forEach(function(h){var v=h;c!==null&&(v=p.relative(c,h)),d._sources.has(v)||d._sources.add(v);var s=t.sourceContentFor(h);s!=null&&d.setSourceContent(h,s)}),d},g.prototype.addMapping=function(t){var o=p.getArg(t,"generated"),c=p.getArg(t,"original",null),d=p.getArg(t,"source",null),h=p.getArg(t,"name",null);(this._skipValidation||this._validateMapping(o,c,d,h)!==!1)&&(d!=null&&(d=String(d),this._sources.has(d)||this._sources.add(d)),h!=null&&(h=String(h),this._names.has(h)||this._names.add(h)),this._mappings.add({generatedLine:o.line,generatedColumn:o.column,originalLine:c!=null&&c.line,originalColumn:c!=null&&c.column,source:d,name:h}))},g.prototype.setSourceContent=function(t,o){var c=t;this._sourceRoot!=null&&(c=p.relative(this._sourceRoot,c)),o!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[p.toSetString(c)]=o):this._sourcesContents&&(delete this._sourcesContents[p.toSetString(c)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))},g.prototype.applySourceMap=function(t,o,c){var d=o;if(o==null){if(t.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);d=t.file}var h=this._sourceRoot;h!=null&&(d=p.relative(h,d));var v=new m,s=new m;this._mappings.unsortedForEach(function(u){if(u.source===d&&u.originalLine!=null){var n=t.originalPositionFor({line:u.originalLine,column:u.originalColumn});n.source!=null&&(u.source=n.source,c!=null&&(u.source=p.join(c,u.source)),h!=null&&(u.source=p.relative(h,u.source)),u.originalLine=n.line,u.originalColumn=n.column,n.name!=null&&(u.name=n.name))}var e=u.source;e==null||v.has(e)||v.add(e);var i=u.name;i==null||s.has(i)||s.add(i)},this),this._sources=v,this._names=s,t.sources.forEach(function(u){var n=t.sourceContentFor(u);n!=null&&(c!=null&&(u=p.join(c,u)),h!=null&&(u=p.relative(h,u)),this.setSourceContent(u,n))},this)},g.prototype._validateMapping=function(t,o,c,d){if(o&&typeof o.line!="number"&&typeof o.column!="number"){var h="original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.";if(this._ignoreInvalidMapping)return typeof console<"u"&&console.warn&&console.warn(h),!1;throw new Error(h)}if((!(t&&"line"in t&&"column"in t&&t.line>0&&t.column>=0)||o||c||d)&&!(t&&"line"in t&&"column"in t&&o&&"line"in o&&"column"in o&&t.line>0&&t.column>=0&&o.line>0&&o.column>=0&&c)){if(h="Invalid mapping: "+JSON.stringify({generated:t,source:c,original:o,name:d}),this._ignoreInvalidMapping)return typeof console<"u"&&console.warn&&console.warn(h),!1;throw new Error(h)}},g.prototype._serializeMappings=function(){for(var t,o,c,d,h=0,v=1,s=0,u=0,n=0,e=0,i="",r=this._mappings.toArray(),f=0,y=r.length;f<y;f++){if(t="",(o=r[f]).generatedLine!==v)for(h=0;o.generatedLine!==v;)t+=";",v++;else if(f>0){if(!p.compareByGeneratedPositionsInflated(o,r[f-1]))continue;t+=","}t+=a.encode(o.generatedColumn-h),h=o.generatedColumn,o.source!=null&&(d=this._sources.indexOf(o.source),t+=a.encode(d-e),e=d,t+=a.encode(o.originalLine-1-u),u=o.originalLine-1,t+=a.encode(o.originalColumn-s),s=o.originalColumn,o.name!=null&&(c=this._names.indexOf(o.name),t+=a.encode(c-n),n=c)),i+=t}return i},g.prototype._generateSourcesContent=function(t,o){return t.map(function(c){if(!this._sourcesContents)return null;o!=null&&(c=p.relative(o,c));var d=p.toSetString(c);return Object.prototype.hasOwnProperty.call(this._sourcesContents,d)?this._sourcesContents[d]:null},this)},g.prototype.toJSON=function(){var t={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(t.file=this._file),this._sourceRoot!=null&&(t.sourceRoot=this._sourceRoot),this._sourcesContents&&(t.sourcesContent=this._generateSourcesContent(t.sources,t.sourceRoot)),t},g.prototype.toString=function(){return JSON.stringify(this.toJSON())},G.SourceMapGenerator=g,G}var ne,P={},re={};function me(){return ne||(ne=1,(function(a){function p(m,_,g,t,o,c){var d=Math.floor((_-m)/2)+m,h=o(g,t[d],!0);return h===0?d:h>0?_-d>1?p(d,_,g,t,o,c):c==a.LEAST_UPPER_BOUND?_<t.length?_:-1:d:d-m>1?p(m,d,g,t,o,c):c==a.LEAST_UPPER_BOUND?d:m<0?-1:m}a.GREATEST_LOWER_BOUND=1,a.LEAST_UPPER_BOUND=2,a.search=function(m,_,g,t){if(_.length===0)return-1;var o=p(-1,_.length,m,_,g,t||a.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&g(_[o],_[o-1],!0)===0;)--o;return o}})(re)),re}var te,oe,B={};function _e(){if(te)return B;function a(m){function _(g,t,o){var c=g[t];g[t]=g[o],g[o]=c}return function g(t,o,c,d){if(c<d){var h=c-1;_(t,(n=c,e=d,Math.round(n+Math.random()*(e-n))),d);for(var v=t[d],s=c;s<d;s++)o(t[s],v,!1)<=0&&_(t,h+=1,s);_(t,h+1,s);var u=h+1;g(t,o,c,u-1),g(t,o,u+1,d)}var n,e}}te=1;let p=new WeakMap;return B.quickSort=function(m,_,g=0){let t=p.get(_);t===void 0&&(t=(function(o){let c=a.toString();return new Function(`return ${c}`)()(o)})(_),p.set(_,t)),t(m,_,g,m.length-1)},B}var ie,se,W={},ae=(se||(se=1,I.SourceMapGenerator=ee().SourceMapGenerator,I.SourceMapConsumer=(function(){if(oe)return P;oe=1;var a=j(),p=me(),m=le().ArraySet,_=ue(),g=_e().quickSort;function t(s,u){var n=s;return typeof s=="string"&&(n=a.parseSourceMapInput(s)),n.sections!=null?new v(n,u):new o(n,u)}function o(s,u){var n=s;typeof s=="string"&&(n=a.parseSourceMapInput(s));var e=a.getArg(n,"version"),i=a.getArg(n,"sources"),r=a.getArg(n,"names",[]),f=a.getArg(n,"sourceRoot",null),y=a.getArg(n,"sourcesContent",null),C=a.getArg(n,"mappings"),L=a.getArg(n,"file",null);if(e!=this._version)throw new Error("Unsupported version: "+e);f&&(f=a.normalize(f)),i=i.map(String).map(a.normalize).map(function(S){return f&&a.isAbsolute(f)&&a.isAbsolute(S)?a.relative(f,S):S}),this._names=m.fromArray(r.map(String),!0),this._sources=m.fromArray(i,!0),this._absoluteSources=this._sources.toArray().map(function(S){return a.computeSourceURL(f,S,u)}),this.sourceRoot=f,this.sourcesContent=y,this._mappings=C,this._sourceMapURL=u,this.file=L}function c(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}t.fromSourceMap=function(s,u){return o.fromSourceMap(s,u)},t.prototype._version=3,t.prototype.__generatedMappings=null,Object.defineProperty(t.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),t.prototype.__originalMappings=null,Object.defineProperty(t.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),t.prototype._charIsMappingSeparator=function(s,u){var n=s.charAt(u);return n===";"||n===","},t.prototype._parseMappings=function(s,u){throw new Error("Subclasses must implement _parseMappings")},t.GENERATED_ORDER=1,t.ORIGINAL_ORDER=2,t.GREATEST_LOWER_BOUND=1,t.LEAST_UPPER_BOUND=2,t.prototype.eachMapping=function(s,u,n){var e,i=u||null;switch(n||t.GENERATED_ORDER){case t.GENERATED_ORDER:e=this._generatedMappings;break;case t.ORIGINAL_ORDER:e=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}for(var r=this.sourceRoot,f=s.bind(i),y=this._names,C=this._sources,L=this._sourceMapURL,S=0,A=e.length;S<A;S++){var b=e[S],M=b.source===null?null:C.at(b.source);M!==null&&(M=a.computeSourceURL(r,M,L)),f({source:M,generatedLine:b.generatedLine,generatedColumn:b.generatedColumn,originalLine:b.originalLine,originalColumn:b.originalColumn,name:b.name===null?null:y.at(b.name)})}},t.prototype.allGeneratedPositionsFor=function(s){var u=a.getArg(s,"line"),n={source:a.getArg(s,"source"),originalLine:u,originalColumn:a.getArg(s,"column",0)};if(n.source=this._findSourceIndex(n.source),n.source<0)return[];var e=[],i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,p.LEAST_UPPER_BOUND);if(i>=0){var r=this._originalMappings[i];if(s.column===void 0)for(var f=r.originalLine;r&&r.originalLine===f;)e.push({line:a.getArg(r,"generatedLine",null),column:a.getArg(r,"generatedColumn",null),lastColumn:a.getArg(r,"lastGeneratedColumn",null)}),r=this._originalMappings[++i];else for(var y=r.originalColumn;r&&r.originalLine===u&&r.originalColumn==y;)e.push({line:a.getArg(r,"generatedLine",null),column:a.getArg(r,"generatedColumn",null),lastColumn:a.getArg(r,"lastGeneratedColumn",null)}),r=this._originalMappings[++i]}return e},P.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.prototype._findSourceIndex=function(s){var u,n=s;if(this.sourceRoot!=null&&(n=a.relative(this.sourceRoot,n)),this._sources.has(n))return this._sources.indexOf(n);for(u=0;u<this._absoluteSources.length;++u)if(this._absoluteSources[u]==s)return u;return-1},o.fromSourceMap=function(s,u){var n=Object.create(o.prototype),e=n._names=m.fromArray(s._names.toArray(),!0),i=n._sources=m.fromArray(s._sources.toArray(),!0);n.sourceRoot=s._sourceRoot,n.sourcesContent=s._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=s._file,n._sourceMapURL=u,n._absoluteSources=n._sources.toArray().map(function(b){return a.computeSourceURL(n.sourceRoot,b,u)});for(var r=s._mappings.toArray().slice(),f=n.__generatedMappings=[],y=n.__originalMappings=[],C=0,L=r.length;C<L;C++){var S=r[C],A=new c;A.generatedLine=S.generatedLine,A.generatedColumn=S.generatedColumn,S.source&&(A.source=i.indexOf(S.source),A.originalLine=S.originalLine,A.originalColumn=S.originalColumn,S.name&&(A.name=e.indexOf(S.name)),y.push(A)),f.push(A)}return g(n.__originalMappings,a.compareByOriginalPositions),n},o.prototype._version=3,Object.defineProperty(o.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});const d=a.compareByGeneratedPositionsDeflatedNoLine;function h(s,u){let n=s.length,e=s.length-u;if(!(e<=1))if(e==2){let i=s[u],r=s[u+1];d(i,r)>0&&(s[u]=r,s[u+1]=i)}else if(e<20)for(let i=u;i<n;i++)for(let r=i;r>u;r--){let f=s[r-1],y=s[r];if(d(f,y)<=0)break;s[r-1]=y,s[r]=f}else g(s,d,u)}function v(s,u){var n=s;typeof s=="string"&&(n=a.parseSourceMapInput(s));var e=a.getArg(n,"version"),i=a.getArg(n,"sections");if(e!=this._version)throw new Error("Unsupported version: "+e);this._sources=new m,this._names=new m;var r={line:-1,column:0};this._sections=i.map(function(f){if(f.url)throw new Error("Support for url field in sections not implemented.");var y=a.getArg(f,"offset"),C=a.getArg(y,"line"),L=a.getArg(y,"column");if(C<r.line||C===r.line&&L<r.column)throw new Error("Section offsets must be ordered and non-overlapping.");return r=y,{generatedOffset:{generatedLine:C+1,generatedColumn:L+1},consumer:new t(a.getArg(f,"map"),u)}})}return o.prototype._parseMappings=function(s,u){var n,e,i,r,f=1,y=0,C=0,L=0,S=0,A=0,b=s.length,M=0,w={},E=[],O=[];let T=0;for(;M<b;)if(s.charAt(M)===";")f++,M++,y=0,h(O,T),T=O.length;else if(s.charAt(M)===",")M++;else{for((n=new c).generatedLine=f,i=M;i<b&&!this._charIsMappingSeparator(s,i);i++);for(s.slice(M,i),e=[];M<i;)_.decode(s,M,w),r=w.value,M=w.rest,e.push(r);if(e.length===2)throw new Error("Found a source, but no line and column");if(e.length===3)throw new Error("Found a source and line, but no column");if(n.generatedColumn=y+e[0],y=n.generatedColumn,e.length>1&&(n.source=S+e[1],S+=e[1],n.originalLine=C+e[2],C=n.originalLine,n.originalLine+=1,n.originalColumn=L+e[3],L=n.originalColumn,e.length>4&&(n.name=A+e[4],A+=e[4])),O.push(n),typeof n.originalLine=="number"){let F=n.source;for(;E.length<=F;)E.push(null);E[F]===null&&(E[F]=[]),E[F].push(n)}}h(O,T),this.__generatedMappings=O;for(var x=0;x<E.length;x++)E[x]!=null&&g(E[x],a.compareByOriginalPositionsNoSource);this.__originalMappings=[].concat(...E)},o.prototype._findMapping=function(s,u,n,e,i,r){if(s[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+s[n]);if(s[e]<0)throw new TypeError("Column must be greater than or equal to 0, got "+s[e]);return p.search(s,u,i,r)},o.prototype.computeColumnSpans=function(){for(var s=0;s<this._generatedMappings.length;++s){var u=this._generatedMappings[s];if(s+1<this._generatedMappings.length){var n=this._generatedMappings[s+1];if(u.generatedLine===n.generatedLine){u.lastGeneratedColumn=n.generatedColumn-1;continue}}u.lastGeneratedColumn=1/0}},o.prototype.originalPositionFor=function(s){var u={generatedLine:a.getArg(s,"line"),generatedColumn:a.getArg(s,"column")},n=this._findMapping(u,this._generatedMappings,"generatedLine","generatedColumn",a.compareByGeneratedPositionsDeflated,a.getArg(s,"bias",t.GREATEST_LOWER_BOUND));if(n>=0){var e=this._generatedMappings[n];if(e.generatedLine===u.generatedLine){var i=a.getArg(e,"source",null);i!==null&&(i=this._sources.at(i),i=a.computeSourceURL(this.sourceRoot,i,this._sourceMapURL));var r=a.getArg(e,"name",null);return r!==null&&(r=this._names.at(r)),{source:i,line:a.getArg(e,"originalLine",null),column:a.getArg(e,"originalColumn",null),name:r}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(s){return s==null})},o.prototype.sourceContentFor=function(s,u){if(!this.sourcesContent)return null;var n=this._findSourceIndex(s);if(n>=0)return this.sourcesContent[n];var e,i=s;if(this.sourceRoot!=null&&(i=a.relative(this.sourceRoot,i)),this.sourceRoot!=null&&(e=a.urlParse(this.sourceRoot))){var r=i.replace(/^file:\/\//,"");if(e.scheme=="file"&&this._sources.has(r))return this.sourcesContent[this._sources.indexOf(r)];if((!e.path||e.path=="/")&&this._sources.has("/"+i))return this.sourcesContent[this._sources.indexOf("/"+i)]}if(u)return null;throw new Error('"'+i+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(s){var u=a.getArg(s,"source");if((u=this._findSourceIndex(u))<0)return{line:null,column:null,lastColumn:null};var n={source:u,originalLine:a.getArg(s,"line"),originalColumn:a.getArg(s,"column")},e=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(s,"bias",t.GREATEST_LOWER_BOUND));if(e>=0){var i=this._originalMappings[e];if(i.source===n.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},P.BasicSourceMapConsumer=o,v.prototype=Object.create(t.prototype),v.prototype.constructor=t,v.prototype._version=3,Object.defineProperty(v.prototype,"sources",{get:function(){for(var s=[],u=0;u<this._sections.length;u++)for(var n=0;n<this._sections[u].consumer.sources.length;n++)s.push(this._sections[u].consumer.sources[n]);return s}}),v.prototype.originalPositionFor=function(s){var u={generatedLine:a.getArg(s,"line"),generatedColumn:a.getArg(s,"column")},n=p.search(u,this._sections,function(i,r){return i.generatedLine-r.generatedOffset.generatedLine||i.generatedColumn-r.generatedOffset.generatedColumn}),e=this._sections[n];return e?e.consumer.originalPositionFor({line:u.generatedLine-(e.generatedOffset.generatedLine-1),column:u.generatedColumn-(e.generatedOffset.generatedLine===u.generatedLine?e.generatedOffset.generatedColumn-1:0),bias:s.bias}):{source:null,line:null,column:null,name:null}},v.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(s){return s.consumer.hasContentsOfAllSources()})},v.prototype.sourceContentFor=function(s,u){for(var n=0;n<this._sections.length;n++){var e=this._sections[n].consumer.sourceContentFor(s,!0);if(e||e==="")return e}if(u)return null;throw new Error('"'+s+'" is not in the SourceMap.')},v.prototype.generatedPositionFor=function(s){for(var u=0;u<this._sections.length;u++){var n=this._sections[u];if(n.consumer._findSourceIndex(a.getArg(s,"source"))!==-1){var e=n.consumer.generatedPositionFor(s);if(e)return{line:e.line+(n.generatedOffset.generatedLine-1),column:e.column+(n.generatedOffset.generatedLine===e.line?n.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}},v.prototype._parseMappings=function(s,u){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var e=this._sections[n],i=e.consumer._generatedMappings,r=0;r<i.length;r++){var f=i[r],y=e.consumer._sources.at(f.source);y!==null&&(y=a.computeSourceURL(e.consumer.sourceRoot,y,this._sourceMapURL)),this._sources.add(y),y=this._sources.indexOf(y);var C=null;f.name&&(C=e.consumer._names.at(f.name),this._names.add(C),C=this._names.indexOf(C));var L={source:y,generatedLine:f.generatedLine+(e.generatedOffset.generatedLine-1),generatedColumn:f.generatedColumn+(e.generatedOffset.generatedLine===f.generatedLine?e.generatedOffset.generatedColumn-1:0),originalLine:f.originalLine,originalColumn:f.originalColumn,name:C};this.__generatedMappings.push(L),typeof L.originalLine=="number"&&this.__originalMappings.push(L)}g(this.__generatedMappings,a.compareByGeneratedPositionsDeflated),g(this.__originalMappings,a.compareByOriginalPositions)},P.IndexedSourceMapConsumer=v,P})().SourceMapConsumer,I.SourceNode=(function(){if(ie)return W;ie=1;var a=ee().SourceMapGenerator,p=j(),m=/(\r?\n)/,_="$$$isSourceNode$$$";function g(t,o,c,d,h){this.children=[],this.sourceContents={},this.line=t??null,this.column=o??null,this.source=c??null,this.name=h??null,this[_]=!0,d!=null&&this.add(d)}return g.fromStringWithSourceMap=function(t,o,c){var d=new g,h=t.split(m),v=0,s=function(){return r()+(r()||"");function r(){return v<h.length?h[v++]:void 0}},u=1,n=0,e=null;return o.eachMapping(function(r){if(e!==null){if(!(u<r.generatedLine)){var f=(y=h[v]||"").substr(0,r.generatedColumn-n);return h[v]=y.substr(r.generatedColumn-n),n=r.generatedColumn,i(e,f),void(e=r)}i(e,s()),u++,n=0}for(;u<r.generatedLine;)d.add(s()),u++;if(n<r.generatedColumn){var y=h[v]||"";d.add(y.substr(0,r.generatedColumn)),h[v]=y.substr(r.generatedColumn),n=r.generatedColumn}e=r},this),v<h.length&&(e&&i(e,s()),d.add(h.splice(v).join(""))),o.sources.forEach(function(r){var f=o.sourceContentFor(r);f!=null&&(c!=null&&(r=p.join(c,r)),d.setSourceContent(r,f))}),d;function i(r,f){if(r===null||r.source===void 0)d.add(f);else{var y=c?p.join(c,r.source):r.source;d.add(new g(r.originalLine,r.originalColumn,y,f,r.name))}}},g.prototype.add=function(t){if(Array.isArray(t))t.forEach(function(o){this.add(o)},this);else{if(!t[_]&&typeof t!="string")throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+t);t&&this.children.push(t)}return this},g.prototype.prepend=function(t){if(Array.isArray(t))for(var o=t.length-1;o>=0;o--)this.prepend(t[o]);else{if(!t[_]&&typeof t!="string")throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+t);this.children.unshift(t)}return this},g.prototype.walk=function(t){for(var o,c=0,d=this.children.length;c<d;c++)(o=this.children[c])[_]?o.walk(t):o!==""&&t(o,{source:this.source,line:this.line,column:this.column,name:this.name})},g.prototype.join=function(t){var o,c,d=this.children.length;if(d>0){for(o=[],c=0;c<d-1;c++)o.push(this.children[c]),o.push(t);o.push(this.children[c]),this.children=o}return this},g.prototype.replaceRight=function(t,o){var c=this.children[this.children.length-1];return c[_]?c.replaceRight(t,o):typeof c=="string"?this.children[this.children.length-1]=c.replace(t,o):this.children.push("".replace(t,o)),this},g.prototype.setSourceContent=function(t,o){this.sourceContents[p.toSetString(t)]=o},g.prototype.walkSourceContents=function(t){for(var o=0,c=this.children.length;o<c;o++)this.children[o][_]&&this.children[o].walkSourceContents(t);var d=Object.keys(this.sourceContents);for(o=0,c=d.length;o<c;o++)t(p.fromSetString(d[o]),this.sourceContents[d[o]])},g.prototype.toString=function(){var t="";return this.walk(function(o){t+=o}),t},g.prototype.toStringWithSourceMap=function(t){var o={code:"",line:1,column:0},c=new a(t),d=!1,h=null,v=null,s=null,u=null;return this.walk(function(n,e){o.code+=n,e.source!==null&&e.line!==null&&e.column!==null?(h===e.source&&v===e.line&&s===e.column&&u===e.name||c.addMapping({source:e.source,original:{line:e.line,column:e.column},generated:{line:o.line,column:o.column},name:e.name}),h=e.source,v=e.line,s=e.column,u=e.name,d=!0):d&&(c.addMapping({generated:{line:o.line,column:o.column}}),h=null,d=!1);for(var i=0,r=n.length;i<r;i++)n.charCodeAt(i)===10?(o.line++,o.column=0,i+1===r?(h=null,d=!1):d&&c.addMapping({source:e.source,original:{line:e.line,column:e.column},generated:{line:o.line,column:o.column},name:e.name})):o.column++}),this.walkSourceContents(function(n,e){c.setSourceContent(n,e)}),{code:o.code,map:c}},W.SourceNode=g,W})().SourceNode),I);const q=z.default||z,ye=J.default||J;function k(a){const p=[];for(const m of a)l.isIdentifier(m)?p.push(m.name):l.isRestElement(m)&&l.isIdentifier(m.argument)?p.push(`...${m.argument.name}`):l.isAssignmentPattern(m)&&l.isIdentifier(m.left)?p.push(m.left.name):l.isObjectPattern(m)?p.push("{}"):l.isArrayPattern(m)?p.push("[]"):p.push("_");return p}exports.sourceMapExports=ae,exports.transformFunctionSpans=async function(a,p,m={}){const{projectRoot:_=process.cwd(),includeNodeModules:g=[],debug:t=!1}=m;if(p.includes("node_modules")&&!g.some(e=>p.includes(`node_modules/${e}`)))return{code:a,modified:!1,functionsWrapped:0};const o=R.relative(_,p).replace(/\\/g,"/");let c;t&&console.log(`[FuncSpan Transform] Processing: ${o}`);try{c=ce.parse(a,{sourceType:"module",plugins:["typescript","jsx","decorators-legacy","classProperties","objectRestSpread","asyncGenerators","dynamicImport","optionalCatchBinding","optionalChaining","nullishCoalescingOperator"]})}catch(e){return t&&console.error(`[FuncSpan Transform] Parse error in ${o}:`,e),{code:a,modified:!1,functionsWrapped:0}}let d=null,h=null;try{const e=ge.readFileSync(`${p}.map`,"utf-8");d=await new ae.SourceMapConsumer(JSON.parse(e))}catch{}const v=(e,i)=>{if(d){const r=d.originalPositionFor({line:e,column:i});if(r.line!==null&&r.column!==null)return!h&&r.source&&(h=r.source),{line:r.line,column:r.column,source:r.source||void 0}}return{line:e,column:i}};let s=!1,u=0;const n=new Set;if(q(c,{FunctionDeclaration(e){const i=e.node.id?.name;if(!i)return;const r=`decl_${i}`;if(n.has(r))return;t&&console.log(`[FuncSpan Transform] Wrapping function declaration: ${i}`);const f=e.node.loc?.start.line??0,y=e.node.loc?.start.column??0,C=v(f,y),{line:L,column:S}=C;let A=p;C.source&&(A=R.resolve(R.dirname(p),C.source)),!t||L===f&&S===y||console.log(`[FuncSpan Transform] Mapped ${f}:${y} → ${L}:${S} in ${A}`);const b=k(e.node.params),M=l.callExpression(l.identifier("captureFunctionSpan"),[l.identifier(i),l.stringLiteral(i),l.stringLiteral(A),l.objectExpression([l.objectProperty(l.identifier("line"),l.numericLiteral(L)),l.objectProperty(l.identifier("column"),l.numericLiteral(S)),l.objectProperty(l.identifier("paramNames"),l.arrayExpression(b.map(E=>l.stringLiteral(E))))])]),w=l.expressionStatement(l.assignmentExpression("=",l.identifier(i),M));e.insertAfter(w),s=!0,u++,n.add(r)},VariableDeclarator(e){const i=e.node.id,r=e.node.init;if(!l.isIdentifier(i)||!r||!l.isFunctionExpression(r)&&!l.isArrowFunctionExpression(r))return;const f=i.name,y=`var_${f}`;if(n.has(y))return;t&&console.log(`[FuncSpan Transform] Wrapping variable function: ${f}`);const C=r.loc?.start.line??0,L=r.loc?.start.column??0,S=v(C,L),{line:A,column:b}=S;let M=p;S.source&&(M=R.resolve(R.dirname(p),S.source)),!t||A===C&&b===L||console.log(`[FuncSpan Transform] Mapped ${C}:${L} → ${A}:${b} in ${M}`);const w=k(r.params),E=l.callExpression(l.identifier("captureFunctionSpan"),[r,l.stringLiteral(f),l.stringLiteral(M),l.objectExpression([l.objectProperty(l.identifier("line"),l.numericLiteral(A)),l.objectProperty(l.identifier("column"),l.numericLiteral(b)),l.objectProperty(l.identifier("paramNames"),l.arrayExpression(w.map(O=>l.stringLiteral(O))))])]);e.node.init=E,s=!0,u++,n.add(y)},ClassMethod(e){if(e.node.kind==="constructor"||e.node.kind==="get"||e.node.kind==="set")return;const i=l.isIdentifier(e.node.key)?e.node.key.name:"anonymous",r=`method_${i}_${e.node.start}`;if(n.has(r))return;t&&console.log(`[FuncSpan Transform] Wrapping class method: ${i}`);const f=e.node.body,y=l.functionExpression(null,e.node.params,f,e.node.generator,e.node.async),C=l.callExpression(l.identifier("captureFunctionSpan"),[y,l.stringLiteral(i),l.stringLiteral(o)]),L=l.blockStatement([l.returnStatement(l.callExpression(l.memberExpression(C,l.identifier("call")),[l.thisExpression(),l.spreadElement(l.identifier("arguments"))]))]);e.node.body=L,s=!0,u++,n.add(r)},ObjectMethod(e){if(e.node.kind==="get"||e.node.kind==="set")return;const i=l.isIdentifier(e.node.key)?e.node.key.name:l.isStringLiteral(e.node.key)?e.node.key.value:"anonymous",r=`objmethod_${i}_${e.node.start}`;if(n.has(r))return;t&&console.log(`[FuncSpan Transform] Wrapping object method: ${i}`);const f=e.node.loc?.start.line??0,y=e.node.loc?.start.column??0,C=v(f,y),{line:L,column:S}=C;let A=p;C.source&&(A=R.resolve(R.dirname(p),C.source));const b=k(e.node.params),M=l.functionExpression(l.identifier(i),e.node.params,e.node.body,e.node.generator,e.node.async),w=l.callExpression(l.identifier("captureFunctionSpan"),[M,l.stringLiteral(i),l.stringLiteral(A),l.objectExpression([l.objectProperty(l.identifier("line"),l.numericLiteral(L)),l.objectProperty(l.identifier("column"),l.numericLiteral(S)),l.objectProperty(l.identifier("paramNames"),l.arrayExpression(b.map(O=>l.stringLiteral(O))))])]),E=l.objectProperty(e.node.key,w,e.node.computed,!1);e.replaceWith(E),s=!0,u++,n.add(r)},ClassProperty(e){const i=e.node.key,r=e.node.value;if(!l.isIdentifier(i)||!r||!l.isFunctionExpression(r)&&!l.isArrowFunctionExpression(r))return;const f=i.name,y=`classprop_${f}_${e.node.start}`;if(n.has(y))return;t&&console.log(`[FuncSpan Transform] Wrapping class property function: ${f}`);const C=r.loc?.start.line??0,L=r.loc?.start.column??0,S=v(C,L),{line:A,column:b}=S;let M=p;S.source&&(M=R.resolve(R.dirname(p),S.source));const w=k(r.params),E=l.callExpression(l.identifier("captureFunctionSpan"),[r,l.stringLiteral(f),l.stringLiteral(M),l.objectExpression([l.objectProperty(l.identifier("line"),l.numericLiteral(A)),l.objectProperty(l.identifier("column"),l.numericLiteral(b)),l.objectProperty(l.identifier("paramNames"),l.arrayExpression(w.map(O=>l.stringLiteral(O))))])]);e.node.value=E,s=!0,u++,n.add(y)}}),s&&!(function(e){let i=!1;return q(e,{ImportDeclaration(r){l.isStringLiteral(r.node.source)&&r.node.source.value==="@sailfish-ai/sf-veritas"&&r.node.specifiers.some(f=>l.isImportSpecifier(f)&&l.isIdentifier(f.imported)&&f.imported.name==="captureFunctionSpan")&&(i=!0,r.stop())},VariableDeclarator(r){if(l.isObjectPattern(r.node.id)&&l.isCallExpression(r.node.init)&&l.isIdentifier(r.node.init.callee)&&r.node.init.callee.name==="require"){const f=r.node.init.arguments;f.length>0&&l.isStringLiteral(f[0])&&f[0].value==="@sailfish-ai/sf-veritas"&&r.node.id.properties.some(y=>l.isObjectProperty(y)&&l.isIdentifier(y.key)&&y.key.name==="captureFunctionSpan")&&(i=!0,r.stop())}}}),i})(c))if((function(e){let i=!1;return q(e,{CallExpression(r){l.isIdentifier(r.node.callee)&&r.node.callee.name==="require"&&(i=!0,r.stop())},MemberExpression(r){!l.isIdentifier(r.node.object)||r.node.object.name!=="module"&&r.node.object.name!=="exports"||(i=!0,r.stop())}}),i})(c)){const e=l.variableDeclaration("const",[l.variableDeclarator(l.objectPattern([l.objectProperty(l.identifier("captureFunctionSpan"),l.identifier("captureFunctionSpan"),!1,!0)]),l.callExpression(l.identifier("require"),[l.stringLiteral("@sailfish-ai/sf-veritas")]))]);c.program.body.unshift(e)}else{const e=l.importDeclaration([l.importSpecifier(l.identifier("captureFunctionSpan"),l.identifier("captureFunctionSpan"))],l.stringLiteral("@sailfish-ai/sf-veritas"));c.program.body.unshift(e)}if(u>0){const e=ye(c,{retainLines:!0,compact:!1,sourceMaps:!0,sourceFileName:p},a);return t&&console.log(`[FuncSpan Transform] ✅ Wrapped ${u} functions in ${o}`),{code:e.code,map:e.map,modified:!0,functionsWrapped:u}}return{code:a,modified:!1,functionsWrapped:0}};