dd-trace 5.133.0 → 5.134.0

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.
Files changed (55) hide show
  1. package/ci/vitest-no-worker-init-runner-setup.mjs +27 -0
  2. package/index.d.ts +16 -5
  3. package/package.json +17 -16
  4. package/packages/datadog-instrumentations/index.js +2 -1
  5. package/packages/datadog-instrumentations/src/cucumber.js +17 -8
  6. package/packages/datadog-instrumentations/src/helpers/bundler-register.js +27 -8
  7. package/packages/datadog-instrumentations/src/helpers/hooks.js +1 -0
  8. package/packages/datadog-instrumentations/src/helpers/register.js +9 -0
  9. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentation-registry.js +2 -0
  10. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/jest.js +12 -0
  11. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/vitest.js +8 -0
  12. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +5 -0
  13. package/packages/datadog-instrumentations/src/jest.js +69 -57
  14. package/packages/datadog-instrumentations/src/mocha/utils.js +35 -2
  15. package/packages/datadog-instrumentations/src/nova-sonic/session.js +25 -16
  16. package/packages/datadog-instrumentations/src/playwright.js +2 -0
  17. package/packages/datadog-instrumentations/src/stripe.js +23 -12
  18. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +1 -0
  19. package/packages/datadog-instrumentations/src/vitest-main.js +7 -3
  20. package/packages/datadog-instrumentations/src/vitest-util.js +5 -2
  21. package/packages/datadog-instrumentations/src/vitest.js +8 -0
  22. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +3 -0
  23. package/packages/datadog-plugin-cypress/src/support.js +2 -0
  24. package/packages/dd-trace/src/aiguard/evaluation.js +143 -1
  25. package/packages/dd-trace/src/appsec/iast/path-line.js +2 -1
  26. package/packages/dd-trace/src/appsec/stack_trace.js +3 -2
  27. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +3 -2
  28. package/packages/dd-trace/src/config/generated-config-types.d.ts +2 -0
  29. package/packages/dd-trace/src/config/index.js +45 -0
  30. package/packages/dd-trace/src/config/supported-configurations.json +9 -0
  31. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +6 -5
  32. package/packages/dd-trace/src/debugger/devtools_client/condition.js +5 -5
  33. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +4 -6
  34. package/packages/dd-trace/src/debugger/unsupported-runtime.js +16 -0
  35. package/packages/dd-trace/src/llmobs/agent-manifest.js +19 -2
  36. package/packages/dd-trace/src/llmobs/constants/tags.js +3 -0
  37. package/packages/dd-trace/src/llmobs/plugins/openai/constants.js +5 -0
  38. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +9 -1
  39. package/packages/dd-trace/src/llmobs/sdk.js +15 -4
  40. package/packages/dd-trace/src/llmobs/span_processor.js +12 -0
  41. package/packages/dd-trace/src/llmobs/tagger.js +18 -8
  42. package/packages/dd-trace/src/llmobs/util.js +10 -4
  43. package/packages/dd-trace/src/openfeature/index.js +6 -0
  44. package/packages/dd-trace/src/openfeature/writers/util.js +4 -4
  45. package/packages/dd-trace/src/opentelemetry/trace/otlp_transformer.js +18 -1
  46. package/packages/dd-trace/src/plugin_manager.js +1 -2
  47. package/packages/dd-trace/src/plugins/tracing.js +0 -1
  48. package/packages/dd-trace/src/plugins/util/git.js +91 -35
  49. package/packages/dd-trace/src/plugins/util/stacktrace.js +2 -1
  50. package/packages/dd-trace/src/plugins/util/test.js +2 -0
  51. package/packages/dd-trace/src/plugins/util/web.js +90 -20
  52. package/packages/dd-trace/src/span_stats.js +4 -1
  53. package/packages/dd-trace/src/telemetry/logs/log-collector.js +1 -1
  54. package/packages/dd-trace/src/util.js +8 -4
  55. package/vendor/dist/@apm-js-collab/code-transformer/index.js +8 -8
@@ -48,7 +48,7 @@ function sanitize (logEntry) {
48
48
 
49
49
  for (let i = Math.max(firstIndex, 0); i < lines.length; i++) {
50
50
  const line = lines[i]
51
- if (line.includes(ddBasePath)) {
51
+ if (ddBasePath !== undefined && line.includes(ddBasePath)) {
52
52
  stackLines.push(line.replace(ddBasePath, ''))
53
53
  } else {
54
54
  const match = NODE_FRAME_LINE_REGEX.exec(line)
@@ -145,9 +145,12 @@ function stripQueryAndFragment (target) {
145
145
  }
146
146
 
147
147
  function calculateDDBasePath (dirname) {
148
- const dirSteps = dirname.split(path.sep)
149
- const packagesIndex = dirSteps.lastIndexOf('packages')
150
- return dirSteps.slice(0, packagesIndex).join(path.sep) + path.sep
148
+ // Bundled into ESM output, `__dirname` is not defined. Bundled into CJS output, it is the bundle's directory,
149
+ // which may contain an unrelated `packages` segment (e.g. a monorepo). Only this file's own directory identifies
150
+ // where dd-trace lives.
151
+ const suffix = path.sep + path.join('packages', 'dd-trace', 'src')
152
+ if (dirname === undefined || !dirname.endsWith(suffix)) return
153
+ return dirname.slice(0, -suffix.length) + path.sep
151
154
  }
152
155
 
153
156
  function normalizePluginEnvName (envPluginName, makeLowercase = false) {
@@ -191,7 +194,8 @@ module.exports = {
191
194
  globMatch,
192
195
  getSegment,
193
196
  stripQueryAndFragment,
194
- ddBasePath: globalThis.__DD_ESBUILD_BASEPATH || calculateDDBasePath(__dirname),
197
+ ddBasePath: globalThis.__DD_ESBUILD_BASEPATH ||
198
+ calculateDDBasePath(typeof __dirname === 'string' ? __dirname : undefined),
195
199
  normalizePluginEnvName,
196
200
  formatKnuthRate,
197
201
  truncateString,
@@ -1,4 +1,4 @@
1
- (()=>{var i={"./@apm-js-collab/code-transformer/index.js"(i,s,k){"use strict";i.exports=k("./@apm-js-collab/code-transformer/lib/index.js")},"./@apm-js-collab/code-transformer/lib/index.js"(i,s,k){"use strict";let{InstrumentationMatcher:S}=k("./@apm-js-collab/code-transformer/lib/matcher.js");i.exports={create:function(i,s){return new S(i,s)}}},"./@apm-js-collab/code-transformer/lib/matcher.js"(i,s,k){"use strict";let S=k("./semifies/index.js"),{Transformer:E}=k("./@apm-js-collab/code-transformer/lib/transformer.js");let InstrumentationMatcher=class InstrumentationMatcher{#e=[];#t=null;#r={};#n={};constructor(i,s){this.#e=i,this.#t=s||"diagnostics_channel"}free(){this.#r={}}addTransform(i,s){this.#n[i]=s}getTransformer(i,s,k){k=k.replace(/\\/g,"/");let w=`${i}/${k}@${s}`;if(this.#r[w])return this.#r[w];let C=this.#e.filter(({module:E})=>E.name===i&&("string"==typeof E.filePath?E.filePath===k:E.filePath.test(k))&&S(s,E.versionRange));if(0!==C.length)return this.#r[w]=new E(i,s,k,C,this.#t,this.#n),this.#r[w]}};i.exports={InstrumentationMatcher}},"./@apm-js-collab/code-transformer/lib/transformer.js"(i,s,k){"use strict";let S,E,w=k("./esquery/dist/esquery.min.js"),{parse:C}=k("./meriyah/dist/meriyah.cjs"),{generate:T}=k("./astring/dist/astring.js"),_=k("./@apm-js-collab/code-transformer/lib/transforms.js");let Transformer=class Transformer{#a=null;#o=null;#i=null;#e=[];#t=null;#n={};constructor(i,s,k,S,E,w={}){this.#a=i,this.#o=s,this.#i=k,this.#e=S,this.#t=E,this.#n=w}free(){}get moduleName(){return this.#a}get filePath(){return this.#i}transform(i,s,O){let N;if(Buffer.isBuffer(i)&&(i=i.toString()),!i)return{code:i};let D={},q=0,j={..._,...this.#n,defaults:{..._}};for(let k of this.#e){let{astQuery:S,functionQuery:E={}}=k;if(!N){let k={loc:!0,ranges:!0,raw:!0,module:"esm"===s};try{N=C(i,k)}catch{N=C(i,{...k,module:!k.module})}"esm"===s&&(D=this.#s(N))}let T=this.#l(E,D),_=S||this.#c(T),O={...k,dcModule:this.#t,moduleType:s,moduleVersion:this.#o,functionQuery:T,transforms:j};O.operator=this.#u(O),w.traverse(N,w.parse(_),(...i)=>{q++,this.#p(O,...i)})}if(0===q&&this.#e.length>0){let i=this.#e.map(({astQuery:i,functionQuery:s={}})=>{if(i)return i;let k=this.#l(s,D),S=s.methodName||s.privateMethodName||s.functionName||s.expressionName||"constructor",E=s.className||s.functionName||s.expressionName,w=k.className||k.functionName||k.expressionName;return E&&E!==w?`${E} (local name: ${w})`:S});throw Error(`Failed to find injection points for: ${JSON.stringify(i)}`)}if(N){let i;S??=k("./@apm-js-collab/code-transformer/node_modules/source-map/source-map.js").SourceMapConsumer,E??=k("./@apm-js-collab/code-transformer/node_modules/source-map/source-map.js").SourceMapGenerator;let s=`${this.#a}/${this.#i}`;if(O){let k=new S(O);k.file=s,i=E.fromSourceMap(k)}else i=new E({file:s});return{code:T(N,{sourceMap:i}),map:i.toString()}}return{code:i}}#p(i,...s){let k=i.transforms[i.operator],{index:S=0}=i.functionQuery,[E]=s,w=E.init?.type||E.type;if("ClassDeclaration"===w||"ClassExpression"===w||"VariableDeclarator"!==E.type&&(i.functionIndex=++i.functionIndex||0,null===S||S===i.functionIndex))k(i,...s)}#u({transform:i,functionQuery:{kind:s}}){if(i)return i;switch(s){case"Async":return"tracePromise";case"Auto":return"traceAuto";case"Callback":return"traceCallback";default:return"traceSync"}}#s(i){let s={};for(let k of i.body)if("ExportNamedDeclaration"===k.type&&!k.source){for(let i of k.specifiers)if(i.exported&&i.local){let k=i.exported.name??i.exported.value,S=i.local.name??i.local.value;k&&S&&(s[k]=S)}}return s}#l(i,s){if(!i.isExportAlias)return i;let{functionName:k,expressionName:S,className:E}=i;return k&&s[k]?{...i,functionName:s[k]}:S&&s[S]?{...i,expressionName:s[S]}:E&&s[E]?{...i,className:s[E]}:i}#c(i){let{functionName:s,expressionName:k,className:S,objectName:E,propertyName:w}=i,C=i.privateMethodName?"PrivateIdentifier":"Identifier",T=[],_=i.methodName||i.privateMethodName;if(S?(_??="constructor",T.push(`[id.name="${S}"]`,`[id.name="${S}"] > ClassExpression`,`[id.name="${S}"] > ClassBody > [key.name="${_}"][key.type=${C}] > [async]`,`[id.name="${S}"] > ClassExpression > ClassBody > [key.name="${_}"][key.type=${C}] > [async]`)):_&&T.push(`ClassBody > [key.name="${_}"][key.type=${C}] > [async]`,`Property[key.name="${_}"][key.type=${C}] > [async]`),s?T.push(`FunctionDeclaration[id.name="${s}"][async]`):k&&T.push(`FunctionExpression[id.name="${k}"][async]`,`ArrowFunctionExpression[id.name="${k}"][async]`,`VariableDeclarator[id.name="${k}"] > FunctionExpression[async]`,`VariableDeclarator[id.name="${k}"] > ArrowFunctionExpression[async]`,`AssignmentExpression[left.property.name="${k}"] > FunctionExpression[async]`,`AssignmentExpression[left.property.name="${k}"] > ArrowFunctionExpression[async]`,`AssignmentExpression[left.name="${k}"] > FunctionExpression[async]`,`AssignmentExpression[left.name="${k}"] > ArrowFunctionExpression[async]`),E||w){if(!E||!w)throw Error(`functionQuery: 'objectName' and 'propertyName' must be used together (got objectName=${E}, propertyName=${w})`);let i="this"===E?"left.object.type=ThisExpression":`left.object.name="${E}"`;T.push(`AssignmentExpression[${i}][left.property.name="${w}"] > [async]`)}return T.join(", ")}};i.exports={Transformer}},"./@apm-js-collab/code-transformer/lib/transforms.js"(i,s,k){"use strict";let S=k("./esquery/dist/esquery.min.js"),{parse:E}=k("./meriyah/dist/meriyah.cjs"),tracingChannelPredicate=i=>i.declarations?.[0]?.id?.properties?.[0]?.value?.name==="tr_ch_apm_tracingChannel",w=/[^\w]/g,formatChannelVariable=i=>`tr_ch_apm$${i.replace(w,"_")}`;function wrapParams(i){return[...(i||[]).filter(i=>"RestElement"!==i.type&&"AssignmentPattern"!==i.type).map((i,s)=>({type:"Identifier",name:`__apm$arg${s}`})),{type:"RestElement",argument:{type:"Identifier",name:"__apm$args"}}]}function traceAny(i,s,k,S){let E=S[S.length-1];"ClassDeclaration"===s.type||"ClassExpression"===s.type?traceInstanceMethod(i,s,E):traceFunction(i,s,E)}function isChannelRunStoresReturn(i,s){if("ReturnStatement"!==i.type)return!1;let k=i.argument?.type==="CallExpression"?i.argument.callee:null;return k?.type==="MemberExpression"&&k.property?.name==="runStores"&&k.object?.type==="MemberExpression"&&k.object.property?.name==="start"&&k.object.object?.type==="Identifier"&&k.object.object.name===s}function nextWrappedFunction(i){let declInit=(i,s)=>{let k=i?.find(i=>"VariableDeclaration"===i.type&&i.declarations.some(i=>i.id?.name===s));return k?.declarations.find(i=>i.id?.name===s)?.init??null},s=declInit(i,"__apm$traced"),k=declInit(s?.body?.body,"__apm$wrapped"),S=k?.type;return"FunctionExpression"===S||"ArrowFunctionExpression"===S||"FunctionDeclaration"===S?k:null}function isWrappedForChannel(i,s){let k=new Set,S=i;for(;S&&!k.has(S);){k.add(S);let i=S.body?.body;if(!Array.isArray(i))break;if(i.some(i=>isChannelRunStoresReturn(i,s)))return!0;S=nextWrappedFunction(i)}return!1}function constructorPatchesMethod(i,s){let k=i?.value?.body?.body;return!!Array.isArray(k)&&k.some(i=>"VariableDeclaration"===i.type&&i.declarations.some(i=>i.id?.name===s))}function traceFunction(i,s,k){if(isWrappedForChannel(s,formatChannelVariable(i.channelName)))return;i.transforms.tracingChannelDeclaration(i,k);let{functionQuery:{methodName:S,privateMethodName:E,functionName:w,expressionName:C,propertyName:T}}=i,_="constructor"!==S&&(S||E||w||C||T)?s.type:"ArrowFunctionExpression",O=s.params;s.body=wrap(i,{type:_,params:O,body:s.body,async:s.async,expression:!1,generator:s.generator},k),s.params=wrapParams(O),s.generator=!1,s.async=!1,wrapSuper(i,s)}function traceInstanceMethod(i,s,k){let{functionQuery:S,operator:w,channelName:C}=i,{methodName:T}=S;if(!T)return;let _=s.body;if(_.body.some(({key:i})=>i?.name===T))return;let O=_.body.find(({kind:i})=>"constructor"===i),N=`${formatChannelVariable(C)}$${T}`;if(O&&constructorPatchesMethod(O,N))return;i.transforms.tracingChannelDeclaration(i,k),O||(O=E(s.superClass?"class A extends Object { constructor (...args) { super(...args) } }":"class A { constructor () {} }").body[0].body.body[0],_.body.unshift(O));let D=E(`
1
+ (()=>{var i={"./@apm-js-collab/code-transformer/index.js"(i,s,k){"use strict";i.exports=k("./@apm-js-collab/code-transformer/lib/index.js")},"./@apm-js-collab/code-transformer/lib/index.js"(i,s,k){"use strict";let{InstrumentationMatcher:S}=k("./@apm-js-collab/code-transformer/lib/matcher.js");i.exports={create:function(i,s){return new S(i,s)}}},"./@apm-js-collab/code-transformer/lib/matcher.js"(i,s,k){"use strict";let S=k("./semifies/index.js"),{Transformer:E}=k("./@apm-js-collab/code-transformer/lib/transformer.js");let InstrumentationMatcher=class InstrumentationMatcher{#e=[];#t=null;#r={};#n={};constructor(i,s){this.#e=i,this.#t=s||"diagnostics_channel"}free(){this.#r={}}addTransform(i,s){this.#n[i]=s}getTransformer(i,s,k){k=k.replace(/\\/g,"/");let w=`${i}/${k}@${s}`;if(this.#r[w])return this.#r[w];let C=this.#e.filter(({module:E})=>E.name===i&&("string"==typeof E.filePath?E.filePath===k:E.filePath.test(k))&&S(s,E.versionRange));if(0!==C.length)return this.#r[w]=new E(i,s,k,C,this.#t,this.#n),this.#r[w]}};i.exports={InstrumentationMatcher}},"./@apm-js-collab/code-transformer/lib/transformer.js"(i,s,k){"use strict";let S,E,w=k("./esquery/dist/esquery.min.js"),{parse:C}=k("./meriyah/dist/meriyah.cjs"),{generate:T}=k("./astring/dist/astring.js"),_=k("./@apm-js-collab/code-transformer/lib/transforms.js");let Transformer=class Transformer{#a=null;#o=null;#i=null;#e=[];#t=null;#n={};constructor(i,s,k,S,E,w={}){this.#a=i,this.#o=s,this.#i=k,this.#e=S,this.#t=E,this.#n=w}free(){}get moduleName(){return this.#a}get filePath(){return this.#i}transform(i,s,O,N){let D,q=N?.sourceFile||`${this.#a}/${this.#i}`;if(Buffer.isBuffer(i)&&(i=i.toString()),!i)return{code:i};let j={},R=0,$={..._,...this.#n,defaults:{..._}};for(let k of this.#e){let{astQuery:S,functionQuery:E={}}=k;if(!D){let k={loc:!0,ranges:!0,raw:!0,module:"esm"===s};try{D=C(i,k)}catch{D=C(i,{...k,module:!k.module})}"esm"===s&&(j=this.#s(D))}let T=this.#l(E,j),_=S||this.#c(T),O={...k,dcModule:this.#t,moduleType:s,moduleVersion:this.#o,functionQuery:T,transforms:$};O.operator=this.#u(O),w.traverse(D,w.parse(_),(...i)=>{R++,this.#p(O,...i)})}if(0===R&&this.#e.length>0){let i=this.#e.map(({astQuery:i,functionQuery:s={}})=>{if(i)return i;let k=this.#l(s,j),S=s.methodName||s.privateMethodName||s.functionName||s.expressionName||"constructor",E=s.className||s.functionName||s.expressionName,w=k.className||k.functionName||k.expressionName;return E&&E!==w?`${E} (local name: ${w})`:S});throw Error(`Failed to find injection points for: ${JSON.stringify(i)}`)}if(D){S??=k("./@apm-js-collab/code-transformer/node_modules/source-map/source-map.js").SourceMapConsumer;let s=new(E??=k("./@apm-js-collab/code-transformer/node_modules/source-map/source-map.js").SourceMapGenerator)({file:q});s.setSourceContent(q,i);let w=T(D,{sourceMap:s});return O&&s.applySourceMap(new S(O),q),{code:w,map:s.toString()}}return{code:i}}#p(i,...s){let k="function"==typeof i.transform?i.transform:i.transforms[i.operator],{index:S=0}=i.functionQuery,[E]=s,w=E.init?.type||E.type;if("ClassDeclaration"===w||"ClassExpression"===w||"VariableDeclarator"!==E.type&&(i.functionIndex=++i.functionIndex||0,null===S||S===i.functionIndex))k(i,...s)}#u({transform:i,functionQuery:{kind:s}}){if("string"==typeof i)return i;switch(s){case"Async":return"tracePromise";case"Auto":return"traceAuto";case"Callback":return"traceCallback";default:return"traceSync"}}#s(i){let s={};for(let k of i.body)if("ExportNamedDeclaration"===k.type&&!k.source){for(let i of k.specifiers)if(i.exported&&i.local){let k=i.exported.name??i.exported.value,S=i.local.name??i.local.value;k&&S&&(s[k]=S)}}return s}#l(i,s){if(!i.isExportAlias)return i;let{functionName:k,expressionName:S,className:E}=i;return k&&s[k]?{...i,functionName:s[k]}:S&&s[S]?{...i,expressionName:s[S]}:E&&s[E]?{...i,className:s[E]}:i}#c(i){let{functionName:s,expressionName:k,className:S,objectName:E,propertyName:w}=i,C=i.privateMethodName?"PrivateIdentifier":"Identifier",T=[],_=i.methodName||i.privateMethodName;if(S?(_??="constructor",T.push(`[id.name="${S}"]`,`[id.name="${S}"] > ClassExpression`,`[id.name="${S}"] > ClassBody > [key.name="${_}"][key.type=${C}] > [async]`,`[id.name="${S}"] > ClassExpression > ClassBody > [key.name="${_}"][key.type=${C}] > [async]`)):_&&T.push(`ClassBody > [key.name="${_}"][key.type=${C}] > [async]`,`Property[key.name="${_}"][key.type=${C}] > [async]`),s?T.push(`FunctionDeclaration[id.name="${s}"][async]`):k&&T.push(`FunctionExpression[id.name="${k}"][async]`,`ArrowFunctionExpression[id.name="${k}"][async]`,`VariableDeclarator[id.name="${k}"] > FunctionExpression[async]`,`VariableDeclarator[id.name="${k}"] > ArrowFunctionExpression[async]`,`AssignmentExpression[left.property.name="${k}"] > FunctionExpression[async]`,`AssignmentExpression[left.property.name="${k}"] > ArrowFunctionExpression[async]`,`AssignmentExpression[left.name="${k}"] > FunctionExpression[async]`,`AssignmentExpression[left.name="${k}"] > ArrowFunctionExpression[async]`),E||w){if(!E||!w)throw Error(`functionQuery: 'objectName' and 'propertyName' must be used together (got objectName=${E}, propertyName=${w})`);let i="this"===E?"left.object.type=ThisExpression":`left.object.name="${E}"`;T.push(`AssignmentExpression[${i}][left.property.name="${w}"] > [async]`)}return T.join(", ")}};i.exports={Transformer}},"./@apm-js-collab/code-transformer/lib/transforms.js"(i,s,k){"use strict";let S=k("./esquery/dist/esquery.min.js"),{parse:E}=k("./meriyah/dist/meriyah.cjs"),tracingChannelPredicate=i=>i.declarations?.[0]?.id?.properties?.[0]?.value?.name==="tr_ch_apm_tracingChannel",w=/[^\w]/g,formatChannelVariable=i=>`tr_ch_apm$${i.replace(w,"_")}`;function wrapParams(i){return[...(i||[]).filter(i=>"RestElement"!==i.type&&"AssignmentPattern"!==i.type).map((i,s)=>({type:"Identifier",name:`__apm$arg${s}`})),{type:"RestElement",argument:{type:"Identifier",name:"__apm$args"}}]}function traceAny(i,s,k,S){let E=S[S.length-1];"ClassDeclaration"===s.type||"ClassExpression"===s.type?traceInstanceMethod(i,s,E):traceFunction(i,s,E)}function isChannelRunStoresReturn(i,s){if("ReturnStatement"!==i.type)return!1;let k=i.argument?.type==="CallExpression"?i.argument.callee:null;return k?.type==="MemberExpression"&&k.property?.name==="runStores"&&k.object?.type==="MemberExpression"&&k.object.property?.name==="start"&&k.object.object?.type==="Identifier"&&k.object.object.name===s}function nextWrappedFunction(i){let declInit=(i,s)=>{let k=i?.find(i=>"VariableDeclaration"===i.type&&i.declarations.some(i=>i.id?.name===s));return k?.declarations.find(i=>i.id?.name===s)?.init??null},s=declInit(i,"__apm$traced"),k=declInit(s?.body?.body,"__apm$wrapped"),S=k?.type;return"FunctionExpression"===S||"ArrowFunctionExpression"===S||"FunctionDeclaration"===S?k:null}function isWrappedForChannel(i,s){let k=new Set,S=i;for(;S&&!k.has(S);){k.add(S);let i=S.body?.body;if(!Array.isArray(i))break;if(i.some(i=>isChannelRunStoresReturn(i,s)))return!0;S=nextWrappedFunction(i)}return!1}function constructorPatchesMethod(i,s){let k=i?.value?.body?.body;return!!Array.isArray(k)&&k.some(i=>"VariableDeclaration"===i.type&&i.declarations.some(i=>i.id?.name===s))}function traceFunction(i,s,k){if(isWrappedForChannel(s,formatChannelVariable(i.channelName)))return;i.transforms.tracingChannelDeclaration(i,k);let{functionQuery:{methodName:S,privateMethodName:E,functionName:w,expressionName:C,propertyName:T}}=i,_="constructor"===S||!S&&!E&&!w&&!C&&!T,O=_?"ArrowFunctionExpression":s.type,N=s.params,D=`${formatChannelVariable(i.channelName)}$self`;i.selfBinding=_&&captureSelfAtSuper(s,D)?D:null,s.body=wrap(i,{type:O,params:N,body:s.body,async:s.async,expression:!1,generator:s.generator},k),s.params=wrapParams(N),s.generator=!1,s.async=!1,"ArrowFunctionExpression"!==O&&wrapSuper(i,s)}function traceInstanceMethod(i,s,k){let{functionQuery:S,operator:w,channelName:C}=i,{methodName:T}=S;if(!T)return;let _=s.body;if(_.body.some(({key:i})=>i?.name===T))return;let O=_.body.find(({kind:i})=>"constructor"===i),N=`${formatChannelVariable(C)}$${T}`;if(O&&constructorPatchesMethod(O,N))return;i.transforms.tracingChannelDeclaration(i,k),O||(O=E(s.superClass?"class A extends Object { constructor (...args) { super(...args) } }":"class A { constructor () {} }").body[0].body.body[0],_.body.unshift(O));let D=E(`
2
2
  const ${N} = this["${T}"]
3
3
  this["${T}"] = function () {}
4
4
  if (typeof ${N} === 'function') {
@@ -7,8 +7,8 @@
7
7
  configurable: true
8
8
  })
9
9
  }
10
- `).body,q=D[1].expression.right;q.params=[{type:"RestElement",argument:{type:"Identifier",name:"__apm$args"}}],q.async="tracePromise"===w,q.body=wrap(i,{type:"Identifier",name:N},k),wrapSuper(i,q),O.value.body.body.push(...D)}function wrap(i,s,k){let w,{operator:C,moduleVersion:T}=i,{returnKind:_}=i.functionQuery,O=_?generateIterPatch(i,_,k):"";"traceCallback"===C&&(w=wrapCallback(i,s,O)),"tracePromise"===C&&(w=wrapPromise(i,s,O)),"traceSync"===C&&(w=wrapSync(i,s,O)),"traceAuto"===C&&(w=wrapAuto(i,s,O));let N=(s.params||[]).filter(i=>"RestElement"!==i.type&&"AssignmentPattern"!==i.type).map((i,s)=>`__apm$arg${s}`).concat("...__apm$args").join(", "),D=w.body[0].body,q=E("ArrowFunctionExpression"===s.type?`
11
- const __apm$arguments = [${N}];
10
+ `).body,q=D[1].expression.right;q.params=[{type:"RestElement",argument:{type:"Identifier",name:"__apm$args"}}],q.async="tracePromise"===w,i.selfBinding=null,q.body=wrap(i,{type:"Identifier",name:N},k),wrapSuper(i,q),O.value.body.body.push(...D)}function wrap(i,s,k){let w,{operator:C,moduleVersion:T,selfBinding:_}=i,{returnKind:O}=i.functionQuery,N=O?generateIterPatch(i,O,k):"";"traceCallback"===C&&(w=wrapCallback(i,s,N)),"tracePromise"===C&&(w=wrapPromise(i,s,N)),"traceSync"===C&&(w=wrapSync(i,s,N)),"traceAuto"===C&&(w=wrapAuto(i,s,N));let D=(s.params||[]).filter(i=>"RestElement"!==i.type&&"AssignmentPattern"!==i.type).map((i,s)=>`__apm$arg${s}`).concat("...__apm$args").join(", "),q=w.body[0].body,j=E((_?`let ${_};`:"")+("ArrowFunctionExpression"===s.type?`
11
+ const __apm$arguments = [${D}];
12
12
  const __apm$ctx = {
13
13
  arguments: __apm$arguments,
14
14
  moduleVersion: ${JSON.stringify(T)}
@@ -18,7 +18,7 @@
18
18
  return __apm$wrapped(...__apm$arguments);
19
19
  };
20
20
  `:`
21
- const __apm$arguments = [${N}].slice(0, arguments.length);
21
+ const __apm$arguments = [${D}].slice(0, arguments.length);
22
22
  const __apm$ctx = {
23
23
  arguments: __apm$arguments,
24
24
  self: this,
@@ -28,7 +28,7 @@
28
28
  const __apm$wrapped = () => {};
29
29
  return __apm$wrapped.apply(this, __apm$arguments);
30
30
  };
31
- `).body;return D.body.unshift(...q),S.query(D,"[id.name=__apm$wrapped]")[0].init=s,D}function wrapSuper(i,s){let k=new Set;for(let i of(S.traverse(s.body,S.parse("[object.type=Super]"),(i,s)=>{let S,{name:w}=i.property;if(s.callee){let{expression:i}=E(`__apm$super['${w}'].call(this)`).body[0];s.callee=S=i.callee,s.arguments.unshift(...i.arguments)}else s.expression=S=E(`__apm$super['${w}']`).body[0];S.computed=s.callee.computed,S.optional=s.callee.optional,k.add(w)}),k)){let k=E(`
31
+ `)).body;return q.body.unshift(...j),S.query(q,"[id.name=__apm$wrapped]")[0].init=s,q}function captureSelfAtSuper(i,s){let k=!1,visit=(i,S)=>{let w=i[S];if(null!==w&&"object"==typeof w){if(Array.isArray(w)){for(let i=0;i<w.length;i++)visit(w,i);return}if("string"==typeof w.type&&"ClassBody"!==w.type&&"FunctionExpression"!==w.type&&"FunctionDeclaration"!==w.type){if("CallExpression"===w.type&&"Super"===w.callee.type){let C=E(`(0, ${s} = this)`).body[0].expression;C.expressions[0]=w,i[S]=C,k=!0;return}for(let i of Object.keys(w))visit(w,i)}}};return visit(i,"body"),k}function wrapSuper(i,s){let k=new Set;for(let i of(S.traverse(s.body,S.parse("[object.type=Super]"),(i,s)=>{let S,{name:w}=i.property;if(s.callee){let{expression:i}=E(`__apm$super['${w}'].call(this)`).body[0];s.callee=S=i.callee,s.arguments.unshift(...i.arguments)}else s.expression=S=E(`__apm$super['${w}']`).body[0];S.computed=s.callee.computed,S.optional=s.callee.optional,k.add(w)}),k)){let k=E(`
32
32
  class Wrapper {
33
33
  wrapper () {
34
34
  __apm$super['${i}'] = super['${i}']
@@ -73,7 +73,7 @@
73
73
  ${C}.error.publish(__apm$ctx);
74
74
  throw err;
75
75
  } finally {
76
- __apm$ctx.self ??= this;
76
+ __apm$ctx.self ??= ${(({selfBinding:i})=>i||"this")(i)};
77
77
  ${C}.end.publish(__apm$ctx);
78
78
  }
79
79
  });
@@ -134,7 +134,7 @@
134
134
  ${w}.error.publish(__apm$ctx);
135
135
  throw err;
136
136
  } finally {
137
- __apm$ctx.self ??= this;
137
+ __apm$ctx.self ??= ${(({selfBinding:i})=>i||"this")(i)};
138
138
  ${w}.end.publish(__apm$ctx);
139
139
  }
140
140
  });
@@ -152,7 +152,7 @@
152
152
  ${w}.error.publish(__apm$ctx);
153
153
  throw err;
154
154
  } finally {
155
- __apm$ctx.self ??= this;
155
+ __apm$ctx.self ??= ${(({selfBinding:i})=>i||"this")(i)};
156
156
  ${w}.end.publish(__apm$ctx);
157
157
  }
158
158
  return __apm$ctx.result;