dd-trace 5.100.0 → 5.102.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 (189) hide show
  1. package/index.d.ts +14 -0
  2. package/package.json +11 -9
  3. package/packages/datadog-instrumentations/src/aerospike.js +2 -2
  4. package/packages/datadog-instrumentations/src/ai.js +8 -8
  5. package/packages/datadog-instrumentations/src/amqplib.js +6 -7
  6. package/packages/datadog-instrumentations/src/anthropic.js +10 -10
  7. package/packages/datadog-instrumentations/src/apollo-server-core.js +3 -3
  8. package/packages/datadog-instrumentations/src/apollo-server.js +5 -5
  9. package/packages/datadog-instrumentations/src/avsc.js +6 -6
  10. package/packages/datadog-instrumentations/src/aws-sdk.js +151 -67
  11. package/packages/datadog-instrumentations/src/azure-durable-functions.js +8 -8
  12. package/packages/datadog-instrumentations/src/bluebird.js +2 -2
  13. package/packages/datadog-instrumentations/src/body-parser.js +2 -2
  14. package/packages/datadog-instrumentations/src/cassandra-driver.js +7 -7
  15. package/packages/datadog-instrumentations/src/child_process.js +12 -12
  16. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +9 -9
  17. package/packages/datadog-instrumentations/src/connect.js +7 -7
  18. package/packages/datadog-instrumentations/src/cookie-parser.js +4 -4
  19. package/packages/datadog-instrumentations/src/cookie.js +2 -2
  20. package/packages/datadog-instrumentations/src/couchbase.js +16 -30
  21. package/packages/datadog-instrumentations/src/crypto.js +4 -4
  22. package/packages/datadog-instrumentations/src/cucumber.js +77 -16
  23. package/packages/datadog-instrumentations/src/cypress.js +5 -3
  24. package/packages/datadog-instrumentations/src/dns.js +0 -3
  25. package/packages/datadog-instrumentations/src/elasticsearch.js +8 -11
  26. package/packages/datadog-instrumentations/src/express-mongo-sanitize.js +6 -6
  27. package/packages/datadog-instrumentations/src/express-session.js +4 -4
  28. package/packages/datadog-instrumentations/src/express.js +10 -11
  29. package/packages/datadog-instrumentations/src/fastify.js +2 -2
  30. package/packages/datadog-instrumentations/src/fs.js +14 -14
  31. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +5 -7
  32. package/packages/datadog-instrumentations/src/google-genai.js +4 -4
  33. package/packages/datadog-instrumentations/src/grpc/server.js +2 -2
  34. package/packages/datadog-instrumentations/src/hapi.js +2 -2
  35. package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +8 -8
  36. package/packages/datadog-instrumentations/src/helpers/promise.js +2 -2
  37. package/packages/datadog-instrumentations/src/hono.js +2 -2
  38. package/packages/datadog-instrumentations/src/http/client.js +26 -9
  39. package/packages/datadog-instrumentations/src/http/server.js +9 -9
  40. package/packages/datadog-instrumentations/src/jest.js +93 -63
  41. package/packages/datadog-instrumentations/src/kafkajs.js +9 -9
  42. package/packages/datadog-instrumentations/src/knex.js +17 -17
  43. package/packages/datadog-instrumentations/src/koa.js +12 -12
  44. package/packages/datadog-instrumentations/src/ldapjs.js +5 -5
  45. package/packages/datadog-instrumentations/src/light-my-request.js +2 -2
  46. package/packages/datadog-instrumentations/src/limitd-client.js +4 -4
  47. package/packages/datadog-instrumentations/src/lodash.js +4 -4
  48. package/packages/datadog-instrumentations/src/mariadb.js +13 -13
  49. package/packages/datadog-instrumentations/src/memcached.js +2 -2
  50. package/packages/datadog-instrumentations/src/microgateway-core.js +2 -2
  51. package/packages/datadog-instrumentations/src/mocha/common.js +7 -4
  52. package/packages/datadog-instrumentations/src/mocha/main.js +37 -14
  53. package/packages/datadog-instrumentations/src/mocha/utils.js +133 -16
  54. package/packages/datadog-instrumentations/src/mocha/worker.js +12 -7
  55. package/packages/datadog-instrumentations/src/mongodb-core.js +9 -22
  56. package/packages/datadog-instrumentations/src/mongodb.js +5 -5
  57. package/packages/datadog-instrumentations/src/mongoose.js +21 -21
  58. package/packages/datadog-instrumentations/src/mquery.js +5 -5
  59. package/packages/datadog-instrumentations/src/multer.js +4 -4
  60. package/packages/datadog-instrumentations/src/mysql.js +16 -16
  61. package/packages/datadog-instrumentations/src/mysql2.js +4 -4
  62. package/packages/datadog-instrumentations/src/net.js +14 -8
  63. package/packages/datadog-instrumentations/src/nyc.js +5 -5
  64. package/packages/datadog-instrumentations/src/openai.js +19 -19
  65. package/packages/datadog-instrumentations/src/oracledb.js +6 -6
  66. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +11 -6
  67. package/packages/datadog-instrumentations/src/passport-utils.js +5 -5
  68. package/packages/datadog-instrumentations/src/pg.js +15 -15
  69. package/packages/datadog-instrumentations/src/pino.js +6 -10
  70. package/packages/datadog-instrumentations/src/playwright.js +20 -15
  71. package/packages/datadog-instrumentations/src/protobufjs.js +16 -16
  72. package/packages/datadog-instrumentations/src/redis.js +1 -2
  73. package/packages/datadog-instrumentations/src/restify.js +2 -2
  74. package/packages/datadog-instrumentations/src/router.js +12 -12
  75. package/packages/datadog-instrumentations/src/stripe.js +12 -12
  76. package/packages/datadog-instrumentations/src/vitest.js +107 -26
  77. package/packages/datadog-instrumentations/src/winston.js +4 -4
  78. package/packages/datadog-instrumentations/src/ws.js +7 -7
  79. package/packages/datadog-plugin-aws-sdk/src/base.js +52 -4
  80. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +19 -12
  81. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +45 -35
  82. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +33 -22
  83. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +12 -13
  84. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +73 -54
  85. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +19 -17
  86. package/packages/datadog-plugin-aws-sdk/src/util.js +22 -0
  87. package/packages/datadog-plugin-bullmq/src/consumer.js +2 -2
  88. package/packages/datadog-plugin-bullmq/src/producer.js +14 -20
  89. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +6 -6
  90. package/packages/datadog-plugin-cucumber/src/index.js +4 -0
  91. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +18 -4
  92. package/packages/datadog-plugin-cypress/src/plugin.js +5 -14
  93. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +1 -5
  94. package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +3 -1
  95. package/packages/datadog-plugin-http/src/client.js +1 -5
  96. package/packages/datadog-plugin-jest/src/util.js +1 -2
  97. package/packages/datadog-plugin-kafkajs/src/consumer.js +2 -9
  98. package/packages/datadog-plugin-kafkajs/src/producer.js +2 -8
  99. package/packages/datadog-plugin-mocha/src/index.js +4 -0
  100. package/packages/datadog-plugin-mongodb-core/src/index.js +2 -1
  101. package/packages/datadog-plugin-openai/src/tracing.js +12 -23
  102. package/packages/datadog-plugin-playwright/src/index.js +1 -1
  103. package/packages/datadog-plugin-vitest/src/index.js +8 -1
  104. package/packages/datadog-shimmer/src/shimmer.js +7 -1
  105. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +1 -1
  106. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +81 -81
  107. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +2 -2
  108. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +2 -2
  109. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +2 -2
  110. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  111. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +2 -0
  112. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +1 -3
  113. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +83 -48
  114. package/packages/dd-trace/src/appsec/index.js +21 -24
  115. package/packages/dd-trace/src/appsec/reporter.js +7 -2
  116. package/packages/dd-trace/src/appsec/rule_manager.js +4 -2
  117. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +31 -16
  118. package/packages/dd-trace/src/ci-visibility/lage.js +2 -1
  119. package/packages/dd-trace/src/ci-visibility/requests/request.js +11 -33
  120. package/packages/dd-trace/src/config/config-types.d.ts +0 -2
  121. package/packages/dd-trace/src/config/git_properties.js +2 -2
  122. package/packages/dd-trace/src/config/index.js +1 -55
  123. package/packages/dd-trace/src/datastreams/checkpointer.js +4 -10
  124. package/packages/dd-trace/src/datastreams/encoding.js +39 -28
  125. package/packages/dd-trace/src/datastreams/index.js +2 -1
  126. package/packages/dd-trace/src/datastreams/pathway.js +29 -26
  127. package/packages/dd-trace/src/datastreams/processor.js +18 -17
  128. package/packages/dd-trace/src/datastreams/size.js +6 -2
  129. package/packages/dd-trace/src/debugger/config.js +5 -2
  130. package/packages/dd-trace/src/debugger/devtools_client/index.js +2 -5
  131. package/packages/dd-trace/src/debugger/devtools_client/send.js +2 -1
  132. package/packages/dd-trace/src/debugger/devtools_client/snapshot-pruner.js +1 -0
  133. package/packages/dd-trace/src/dogstatsd.js +10 -7
  134. package/packages/dd-trace/src/encode/0.4.js +759 -234
  135. package/packages/dd-trace/src/encode/0.5.js +15 -9
  136. package/packages/dd-trace/src/encode/agentless-json.js +2 -2
  137. package/packages/dd-trace/src/encode/tags-processors.js +2 -27
  138. package/packages/dd-trace/src/exporters/common/request.js +22 -11
  139. package/packages/dd-trace/src/exporters/common/retry.js +104 -0
  140. package/packages/dd-trace/src/git_metadata.js +66 -0
  141. package/packages/dd-trace/src/git_metadata_tagger.js +13 -5
  142. package/packages/dd-trace/src/id.js +15 -26
  143. package/packages/dd-trace/src/llmobs/constants/tags.js +2 -0
  144. package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -2
  145. package/packages/dd-trace/src/llmobs/plugins/anthropic/index.js +27 -16
  146. package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +3 -0
  147. package/packages/dd-trace/src/llmobs/plugins/genai/util.js +33 -13
  148. package/packages/dd-trace/src/llmobs/plugins/openai/index.js +20 -50
  149. package/packages/dd-trace/src/llmobs/sdk.js +29 -27
  150. package/packages/dd-trace/src/llmobs/span_processor.js +52 -6
  151. package/packages/dd-trace/src/llmobs/tagger.js +42 -0
  152. package/packages/dd-trace/src/llmobs/telemetry.js +29 -0
  153. package/packages/dd-trace/src/llmobs/util.js +81 -5
  154. package/packages/dd-trace/src/msgpack/chunk.js +6 -3
  155. package/packages/dd-trace/src/openfeature/noop.js +40 -36
  156. package/packages/dd-trace/src/openfeature/writers/exposures.js +33 -52
  157. package/packages/dd-trace/src/opentelemetry/active-span-proxy.js +42 -0
  158. package/packages/dd-trace/src/opentelemetry/bridge-span-base.js +106 -0
  159. package/packages/dd-trace/src/opentelemetry/context_manager.js +11 -2
  160. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +1 -2
  161. package/packages/dd-trace/src/opentelemetry/span-helpers.js +188 -50
  162. package/packages/dd-trace/src/opentelemetry/span.js +42 -80
  163. package/packages/dd-trace/src/opentelemetry/tracer.js +0 -22
  164. package/packages/dd-trace/src/opentracing/propagation/text_map.js +65 -27
  165. package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +2 -11
  166. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +58 -22
  167. package/packages/dd-trace/src/opentracing/span.js +56 -48
  168. package/packages/dd-trace/src/opentracing/span_context.js +1 -0
  169. package/packages/dd-trace/src/plugins/util/ci.js +1 -1
  170. package/packages/dd-trace/src/plugins/util/git-cache.js +3 -5
  171. package/packages/dd-trace/src/plugins/util/test.js +19 -7
  172. package/packages/dd-trace/src/plugins/util/url.js +1 -3
  173. package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -1
  174. package/packages/dd-trace/src/plugins/util/web.js +5 -7
  175. package/packages/dd-trace/src/priority_sampler.js +6 -4
  176. package/packages/dd-trace/src/profiling/config.js +5 -4
  177. package/packages/dd-trace/src/profiling/profilers/events.js +3 -23
  178. package/packages/dd-trace/src/profiling/profilers/wall.js +4 -5
  179. package/packages/dd-trace/src/remote_config/index.js +5 -3
  180. package/packages/dd-trace/src/runtime_metrics/index.js +2 -2
  181. package/packages/dd-trace/src/scope.js +3 -10
  182. package/packages/dd-trace/src/serverless.js +1 -4
  183. package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +7 -1
  184. package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +4 -0
  185. package/packages/dd-trace/src/span_format.js +52 -5
  186. package/packages/dd-trace/src/span_processor.js +0 -4
  187. package/packages/dd-trace/src/spanleak.js +0 -1
  188. package/packages/dd-trace/src/tracer.js +7 -7
  189. package/packages/dd-trace/src/util.js +17 -0
@@ -32,41 +32,41 @@ addHook({
32
32
  versions: ['>=2'],
33
33
  file: 'lib/knex-builder/Knex.js',
34
34
  }, Knex => {
35
- shimmer.wrap(Knex.Client.prototype, 'raw', raw => function () {
35
+ shimmer.wrap(Knex.Client.prototype, 'raw', raw => function (...args) {
36
36
  if (!startRawQueryCh.hasSubscribers) {
37
- return raw.apply(this, arguments)
37
+ return raw.apply(this, args)
38
38
  }
39
39
 
40
- const sql = arguments[0]
40
+ const sql = args[0]
41
41
 
42
42
  // Skip query done by Knex to get the value used for undefined
43
43
  if (sql === 'DEFAULT') {
44
- return raw.apply(this, arguments)
44
+ return raw.apply(this, args)
45
45
  }
46
46
 
47
47
  const context = { sql, dialect: this.dialect }
48
48
  return startRawQueryCh.runStores(context, () => {
49
- const rawResult = raw.apply(this, arguments)
50
- shimmer.wrap(rawResult, 'then', originalThen => function () {
49
+ const rawResult = raw.apply(this, args)
50
+ shimmer.wrap(rawResult, 'then', originalThen => function (...args) {
51
51
  return rawQuerySubscribes.runStores(context, () => {
52
- arguments[0] = wrapCallbackWithFinish(arguments[0], finish, context)
53
- if (arguments[1]) arguments[1] = wrapCallbackWithFinish(arguments[1], finish, context)
52
+ args[0] = wrapCallbackWithFinish(args[0], finish, context)
53
+ if (args[1]) args[1] = wrapCallbackWithFinish(args[1], finish, context)
54
54
 
55
- const originalThenResult = originalThen.apply(this, arguments)
55
+ const originalThenResult = originalThen.apply(this, args)
56
56
 
57
- shimmer.wrap(originalThenResult, 'catch', originalCatch => function () {
58
- arguments[0] = wrapCallbackWithFinish(arguments[0], finish, context)
59
- return originalCatch.apply(this, arguments)
57
+ shimmer.wrap(originalThenResult, 'catch', originalCatch => function (...args) {
58
+ args[0] = wrapCallbackWithFinish(args[0], finish, context)
59
+ return originalCatch.apply(this, args)
60
60
  })
61
61
 
62
62
  return originalThenResult
63
63
  })
64
64
  })
65
65
 
66
- shimmer.wrap(rawResult, 'asCallback', originalAsCallback => function () {
66
+ shimmer.wrap(rawResult, 'asCallback', originalAsCallback => function (...args) {
67
67
  return rawQuerySubscribes.runStores(context, () => {
68
- arguments[0] = wrapCallbackWithFinish(arguments[0], finish, context)
69
- return originalAsCallback.apply(this, arguments)
68
+ args[0] = wrapCallbackWithFinish(args[0], finish, context)
69
+ return originalAsCallback.apply(this, args)
70
70
  })
71
71
  })
72
72
 
@@ -80,7 +80,7 @@ addHook({
80
80
  function wrapCallbackWithFinish (callback, finish, context) {
81
81
  if (typeof callback !== 'function') return callback
82
82
 
83
- return shimmer.wrapFunction(callback, callback => function () {
84
- finish(context, () => callback.apply(this, arguments))
83
+ return shimmer.wrapFunction(callback, callback => function (...args) {
84
+ finish(context, () => callback.apply(this, args))
85
85
  })
86
86
  }
@@ -14,8 +14,8 @@ const routeChannel = channel('apm:koa:request:route')
14
14
  const originals = new WeakMap()
15
15
 
16
16
  function wrapCallback (callback) {
17
- return function callbackWithTrace () {
18
- const handleRequest = callback.apply(this, arguments)
17
+ return function callbackWithTrace (...args) {
18
+ const handleRequest = callback.apply(this, args)
19
19
 
20
20
  if (typeof handleRequest !== 'function') return handleRequest
21
21
 
@@ -28,14 +28,14 @@ function wrapCallback (callback) {
28
28
  }
29
29
 
30
30
  function wrapUse (use) {
31
- return function useWithTrace () {
32
- const result = use.apply(this, arguments)
31
+ return function useWithTrace (...args) {
32
+ const result = use.apply(this, args)
33
33
 
34
- if (!Array.isArray(this.middleware)) return result
34
+ if (Array.isArray(this.middleware)) {
35
+ const fn = this.middleware.pop()
35
36
 
36
- const fn = this.middleware.pop()
37
-
38
- this.middleware.push(wrapMiddleware(fn))
37
+ this.middleware.push(wrapMiddleware(fn))
38
+ }
39
39
 
40
40
  return result
41
41
  }
@@ -54,8 +54,8 @@ function wrapRegister (register) {
54
54
  }
55
55
 
56
56
  function wrapRouterUse (use) {
57
- return function useWithTrace () {
58
- const router = use.apply(this, arguments)
57
+ return function useWithTrace (...args) {
58
+ const router = use.apply(this, args)
59
59
 
60
60
  for (const layer of router.stack) {
61
61
  wrapStack(layer)
@@ -144,10 +144,10 @@ function fulfill (ctx, error) {
144
144
  }
145
145
 
146
146
  function wrapNext (req, next) {
147
- return shimmer.wrapFunction(next, next => function () {
147
+ return shimmer.wrapFunction(next, next => function (...args) {
148
148
  nextChannel.publish({ req })
149
149
 
150
- return next.apply(this, arguments)
150
+ return next.apply(this, args)
151
151
  })
152
152
  }
153
153
 
@@ -71,12 +71,12 @@ addHook({ name: 'ldapjs', versions: ['>=2'] }, ldapjs => {
71
71
  return search.apply(this, arguments)
72
72
  })
73
73
 
74
- shimmer.wrap(ldapjs.Client.prototype, '_send', _send => function () {
75
- const callbackIndex = getCallbackArgIndex(arguments)
74
+ shimmer.wrap(ldapjs.Client.prototype, '_send', _send => function (...args) {
75
+ const callbackIndex = getCallbackArgIndex(args)
76
76
  if (callbackIndex > -1) {
77
- const callback = arguments[callbackIndex]
77
+ const callback = args[callbackIndex]
78
78
  // eslint-disable-next-line n/handle-callback-err
79
- arguments[callbackIndex] = shimmer.wrapFunction(callback, callback => function (err, corkedEmitter) {
79
+ args[callbackIndex] = shimmer.wrapFunction(callback, callback => function (err, corkedEmitter) {
80
80
  if (corkedEmitter !== null && typeof corkedEmitter === 'object' && typeof corkedEmitter.on === 'function') {
81
81
  wrapEmitter(corkedEmitter)
82
82
  }
@@ -84,7 +84,7 @@ addHook({ name: 'ldapjs', versions: ['>=2'] }, ldapjs => {
84
84
  })
85
85
  }
86
86
 
87
- return _send.apply(this, arguments)
87
+ return _send.apply(this, args)
88
88
  })
89
89
 
90
90
  shimmer.wrap(ldapjs.Client.prototype, 'bind', bind => function (dn, password, controls, callback) {
@@ -69,8 +69,8 @@ function wrapDispatchFunc (dispatchFunc) {
69
69
  // Also wrap end() as fallback
70
70
  const originalEnd = res.end
71
71
  if (originalEnd) {
72
- res.end = function wrappedEnd () {
73
- const result = originalEnd.apply(this, arguments)
72
+ res.end = function wrappedEnd (...args) {
73
+ const result = originalEnd.apply(this, args)
74
74
  // Trigger finish if events don't fire
75
75
  setImmediate(onFinish)
76
76
  return result
@@ -4,10 +4,10 @@ const shimmer = require('../../datadog-shimmer')
4
4
  const { addHook, AsyncResource } = require('./helpers/instrument')
5
5
 
6
6
  function wrapRequest (original) {
7
- return function () {
8
- const id = arguments.length - 1
9
- arguments[id] = AsyncResource.bind(arguments[id])
10
- return original.apply(this, arguments)
7
+ return function (...args) {
8
+ const id = args.length - 1
9
+ args[id] = AsyncResource.bind(args[id])
10
+ return original.apply(this, args)
11
11
  }
12
12
  }
13
13
 
@@ -12,13 +12,13 @@ addHook({ name: 'lodash', versions: ['>=4'] }, lodash => {
12
12
  lodash,
13
13
  instrumentedLodashFn,
14
14
  lodashFn => {
15
- return function () {
15
+ return function (...args) {
16
16
  if (!lodashOperationCh.hasSubscribers) {
17
- return lodashFn.apply(this, arguments)
17
+ return lodashFn.apply(this, args)
18
18
  }
19
19
 
20
- const result = lodashFn.apply(this, arguments)
21
- const message = { operation: lodashFn.name, arguments, result }
20
+ const result = lodashFn.apply(this, args)
21
+ const message = { operation: lodashFn.name, arguments: args, result }
22
22
  lodashOperationCh.publish(message)
23
23
 
24
24
  return message.result
@@ -12,13 +12,13 @@ const errorCh = channel('apm:mariadb:query:error')
12
12
  const skipCh = channel('apm:mariadb:pool:skip')
13
13
 
14
14
  function wrapCommandStart (start, ctx) {
15
- return shimmer.wrapFunction(start, start => function () {
16
- if (!startCh.hasSubscribers) return start.apply(this, arguments)
15
+ return shimmer.wrapFunction(start, start => function (...args) {
16
+ if (!startCh.hasSubscribers) return start.apply(this, args)
17
17
 
18
18
  const { reject, resolve } = this
19
19
  shimmer.wrap(this, 'resolve', function wrapResolve () {
20
- return function () {
21
- return finishCh.runStores(ctx, resolve, this, ...arguments)
20
+ return function (...args) {
21
+ return finishCh.runStores(ctx, resolve, this, ...args)
22
22
  }
23
23
  })
24
24
 
@@ -32,7 +32,7 @@ function wrapCommandStart (start, ctx) {
32
32
  }
33
33
  })
34
34
 
35
- return startCh.runStores(ctx, start, this, ...arguments)
35
+ return startCh.runStores(ctx, start, this, ...args)
36
36
  })
37
37
  }
38
38
 
@@ -128,25 +128,25 @@ function wrapPoolBase (PoolBase) {
128
128
  // so instead we just skip instrumentation completely to avoid memory leaks
129
129
  // and/or orphan spans.
130
130
  function wrapPoolMethod (createConnection) {
131
- return function () {
132
- return skipCh.runStores({}, createConnection, this, ...arguments)
131
+ return function (...args) {
132
+ return skipCh.runStores({}, createConnection, this, ...args)
133
133
  }
134
134
  }
135
135
 
136
136
  function wrapPoolGetConnectionMethod (getConnection) {
137
- return function wrappedGetConnection () {
138
- const cb = arguments[arguments.length - 1]
139
- if (typeof cb !== 'function') return getConnection.apply(this, arguments)
137
+ return function wrappedGetConnection (...args) {
138
+ const cb = args[args.length - 1]
139
+ if (typeof cb !== 'function') return getConnection.apply(this, args)
140
140
 
141
141
  const ctx = {}
142
142
 
143
- arguments[arguments.length - 1] = function () {
144
- return connectionFinishCh.runStores(ctx, cb, this, ...arguments)
143
+ args[args.length - 1] = function (...args) {
144
+ return connectionFinishCh.runStores(ctx, cb, this, ...args)
145
145
  }
146
146
 
147
147
  connectionStartCh.publish(ctx)
148
148
 
149
- return getConnection.apply(this, arguments)
149
+ return getConnection.apply(this, args)
150
150
  }
151
151
  }
152
152
 
@@ -18,8 +18,8 @@ addHook({ name: 'memcached', versions: ['>=2.2'] }, Memcached => {
18
18
 
19
19
  const client = this
20
20
 
21
- const wrappedQueryCompiler = function () {
22
- const query = queryCompiler.apply(this, arguments)
21
+ const wrappedQueryCompiler = function (...args) {
22
+ const query = queryCompiler.apply(this, args)
23
23
 
24
24
  const ctx = { client, server, query }
25
25
  startCh.runStores(ctx, () => {
@@ -14,8 +14,8 @@ const versions = ['>=2.1 <=3.0.0']
14
14
  const requestContexts = new WeakMap()
15
15
 
16
16
  function wrapConfigProxyFactory (configProxyFactory) {
17
- return function () {
18
- const configProxy = configProxyFactory.apply(this, arguments)
17
+ return function (...args) {
18
+ const configProxy = configProxyFactory.apply(this, args)
19
19
 
20
20
  return function (req, res, next) {
21
21
  const ctx = { req, res }
@@ -3,8 +3,11 @@
3
3
  const { addHook, channel } = require('../helpers/instrument')
4
4
  const shimmer = require('../../../datadog-shimmer')
5
5
  const { getCallSites } = require('../../../dd-trace/src/plugins/util/stacktrace')
6
+ const { DD_MAJOR } = require('../../../../version')
6
7
  const { testToStartLine } = require('./utils')
7
8
 
9
+ const MINIMUM_MOCHA_VERSION = DD_MAJOR >= 6 ? '>=8.0.0' : '>=5.2.0'
10
+
8
11
  const parameterizedTestCh = channel('ci:mocha:test:parameterize')
9
12
  const patched = new WeakSet()
10
13
 
@@ -17,9 +20,9 @@ addHook({
17
20
 
18
21
  patched.add(mochaEach)
19
22
 
20
- return shimmer.wrapFunction(mochaEach, mochaEach => function () {
21
- const [params] = arguments
22
- const { it, ...rest } = mochaEach.apply(this, arguments)
23
+ return shimmer.wrapFunction(mochaEach, mochaEach => function (...args) {
24
+ const [params] = args
25
+ const { it, ...rest } = mochaEach.apply(this, args)
23
26
  return {
24
27
  it: function (title) {
25
28
  parameterizedTestCh.publish({ title, params })
@@ -33,7 +36,7 @@ addHook({
33
36
  // support for start line
34
37
  addHook({
35
38
  name: 'mocha',
36
- versions: ['>=5.2.0'],
39
+ versions: [MINIMUM_MOCHA_VERSION],
37
40
  file: 'lib/suite.js',
38
41
  }, (Suite) => {
39
42
  shimmer.wrap(Suite.prototype, 'addTest', addTest => function (test) {
@@ -1,6 +1,8 @@
1
1
  'use strict'
2
2
 
3
3
  const { createCoverageMap } = require('../../../../vendor/dist/istanbul-lib-coverage')
4
+ const satisfies = require('../../../../vendor/dist/semifies')
5
+ const { DD_MAJOR } = require('../../../../version')
4
6
  const { addHook, channel } = require('../helpers/instrument')
5
7
  const shimmer = require('../../../datadog-shimmer')
6
8
  const { isMarkedAsUnskippable } = require('../../../datadog-plugin-jest/src/util')
@@ -41,7 +43,10 @@ const {
41
43
 
42
44
  require('./common')
43
45
 
46
+ const MINIMUM_MOCHA_VERSION = DD_MAJOR >= 6 ? '>=8.0.0' : '>=5.2.0'
47
+
44
48
  const patched = new WeakSet()
49
+ let hasWarnedDeprecatedMochaVersion = false
45
50
 
46
51
  const unskippableSuites = []
47
52
  let suitesToSkip = []
@@ -79,6 +84,20 @@ const itrSkippedSuitesCh = channel('ci:mocha:itr:skipped-suites')
79
84
 
80
85
  const getCodeCoverageCh = channel('ci:nyc:get-coverage')
81
86
 
87
+ function warnDeprecatedMochaVersion (frameworkVersion) {
88
+ if (DD_MAJOR >= 6 || hasWarnedDeprecatedMochaVersion || !frameworkVersion ||
89
+ !satisfies(frameworkVersion, '<8.0.0')) {
90
+ return
91
+ }
92
+
93
+ hasWarnedDeprecatedMochaVersion = true
94
+ // eslint-disable-next-line no-console
95
+ console.warn(
96
+ 'dd-trace support for Mocha<8.0.0 is deprecated and will be removed in dd-trace v6. ' +
97
+ 'Please upgrade Mocha to >=8.0.0.'
98
+ )
99
+ }
100
+
82
101
  // Tests from workers do not come with `isFailed` method
83
102
  function isTestFailed (test) {
84
103
  if (test.isFailed) {
@@ -307,6 +326,7 @@ function getExecutionConfiguration (runner, isParallel, frameworkVersion, onFini
307
326
  }
308
327
  config.isEarlyFlakeDetectionEnabled = libraryConfig.isEarlyFlakeDetectionEnabled
309
328
  config.earlyFlakeDetectionNumRetries = libraryConfig.earlyFlakeDetectionNumRetries
329
+ config.earlyFlakeDetectionSlowTestRetries = libraryConfig.earlyFlakeDetectionSlowTestRetries ?? {}
310
330
  config.earlyFlakeDetectionFaultyThreshold = libraryConfig.earlyFlakeDetectionFaultyThreshold
311
331
  config.isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
312
332
  config.isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
@@ -345,20 +365,22 @@ function getExecutionConfiguration (runner, isParallel, frameworkVersion, onFini
345
365
  // It is called but skipped in parallel mode.
346
366
  addHook({
347
367
  name: 'mocha',
348
- versions: ['>=5.2.0'],
368
+ versions: [MINIMUM_MOCHA_VERSION],
349
369
  file: 'lib/mocha.js',
350
370
  }, (Mocha, frameworkVersion) => {
351
- shimmer.wrap(Mocha.prototype, 'run', run => function () {
371
+ warnDeprecatedMochaVersion(frameworkVersion)
372
+
373
+ shimmer.wrap(Mocha.prototype, 'run', run => function (...args) {
352
374
  // Workers do not need to request any data, just run the tests
353
375
  if (!testFinishCh.hasSubscribers || getEnvironmentVariable('MOCHA_WORKER_ID') || this.options.parallel) {
354
- return run.apply(this, arguments)
376
+ return run.apply(this, args)
355
377
  }
356
378
 
357
379
  // `options.delay` does not work in parallel mode, so we can't delay the execution this way
358
380
  // This needs to be both here and in `runMocha` hook. Read the comment in `runMocha` hook for more info.
359
381
  this.options.delay = true
360
382
 
361
- const runner = run.apply(this, arguments)
383
+ const runner = run.apply(this, args)
362
384
 
363
385
  // eslint-disable-next-line unicorn/no-array-for-each
364
386
  this.files.forEach((path) => {
@@ -401,15 +423,15 @@ addHook({
401
423
 
402
424
  addHook({
403
425
  name: 'mocha',
404
- versions: ['>=5.2.0'],
426
+ versions: [MINIMUM_MOCHA_VERSION],
405
427
  file: 'lib/cli/run-helpers.js',
406
428
  }, (run) => {
407
429
  // `runMocha` is an async function
408
- shimmer.wrap(run, 'runMocha', runMocha => function () {
430
+ shimmer.wrap(run, 'runMocha', runMocha => function (...args) {
409
431
  if (!testFinishCh.hasSubscribers) {
410
- return runMocha.apply(this, arguments)
432
+ return runMocha.apply(this, args)
411
433
  }
412
- const mocha = arguments[0]
434
+ const mocha = args[0]
413
435
 
414
436
  /**
415
437
  * This attaches `run` to the global context, which we'll call after
@@ -423,7 +445,7 @@ addHook({
423
445
  mocha.options.delay = true
424
446
  }
425
447
 
426
- return runMocha.apply(this, arguments)
448
+ return runMocha.apply(this, args)
427
449
  })
428
450
  return run
429
451
  })
@@ -432,7 +454,7 @@ addHook({
432
454
  // This hook is used to generate session, module, suite and test events
433
455
  addHook({
434
456
  name: 'mocha',
435
- versions: ['>=5.2.0'],
457
+ versions: [MINIMUM_MOCHA_VERSION],
436
458
  file: 'lib/runner.js',
437
459
  }, function (Runner, frameworkVersion) {
438
460
  if (patched.has(Runner)) return Runner
@@ -441,9 +463,9 @@ addHook({
441
463
 
442
464
  shimmer.wrap(Runner.prototype, 'runTests', runTests => getRunTestsWrapper(runTests, config))
443
465
 
444
- shimmer.wrap(Runner.prototype, 'run', run => function () {
466
+ shimmer.wrap(Runner.prototype, 'run', run => function (...args) {
445
467
  if (!testFinishCh.hasSubscribers) {
446
- return run.apply(this, arguments)
468
+ return run.apply(this, args)
447
469
  }
448
470
 
449
471
  const { suitesByTestFile, numSuitesByTestFile } = getSuitesByTestFile(this.suite)
@@ -531,7 +553,7 @@ addHook({
531
553
  }
532
554
  })
533
555
 
534
- return run.apply(this, arguments)
556
+ return run.apply(this, args)
535
557
  })
536
558
 
537
559
  return Runner
@@ -541,7 +563,7 @@ addHook({
541
563
  // Used to set the correct async resource to the test.
542
564
  addHook({
543
565
  name: 'mocha',
544
- versions: ['>=5.2.0'],
566
+ versions: [MINIMUM_MOCHA_VERSION],
545
567
  file: 'lib/runnable.js',
546
568
  }, (runnablePackage) => runnableWrapper(runnablePackage, config))
547
569
 
@@ -701,6 +723,7 @@ addHook({
701
723
  if (config.knownTests?.mocha) {
702
724
  const testSuiteKnownTests = config.knownTests.mocha[testPath] || []
703
725
  newWorkerArgs._ddEfdNumRetries = config.earlyFlakeDetectionNumRetries
726
+ newWorkerArgs._ddEfdSlowTestRetries = config.earlyFlakeDetectionSlowTestRetries
704
727
  newWorkerArgs._ddIsEfdEnabled = config.isEarlyFlakeDetectionEnabled
705
728
  newWorkerArgs._ddIsKnownTestsEnabled = true
706
729
  newWorkerArgs._ddKnownTests = {