dd-trace 5.53.0 → 5.55.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 (368) hide show
  1. package/LICENSE-3rdparty.csv +2 -1
  2. package/ci/cypress/plugin.js +8 -0
  3. package/ci/cypress/polyfills.js +23 -0
  4. package/ci/init.js +8 -7
  5. package/index.d.ts +33 -16
  6. package/initialize.mjs +5 -6
  7. package/package.json +40 -38
  8. package/packages/datadog-code-origin/index.js +22 -4
  9. package/packages/datadog-core/src/utils/src/get.js +1 -1
  10. package/packages/datadog-core/src/utils/src/has.js +1 -1
  11. package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
  12. package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
  13. package/packages/datadog-core/src/utils/src/pick.js +2 -2
  14. package/packages/datadog-core/src/utils/src/set.js +1 -1
  15. package/packages/datadog-core/src/utils/src/uniq.js +1 -1
  16. package/packages/datadog-instrumentations/src/amqp10.js +19 -17
  17. package/packages/datadog-instrumentations/src/amqplib.js +52 -35
  18. package/packages/datadog-instrumentations/src/apollo.js +2 -2
  19. package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
  20. package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
  21. package/packages/datadog-instrumentations/src/child_process.js +1 -2
  22. package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
  23. package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
  24. package/packages/datadog-instrumentations/src/couchbase.js +6 -9
  25. package/packages/datadog-instrumentations/src/cucumber.js +108 -68
  26. package/packages/datadog-instrumentations/src/cypress.js +2 -1
  27. package/packages/datadog-instrumentations/src/dns.js +5 -5
  28. package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
  29. package/packages/datadog-instrumentations/src/fastify.js +7 -9
  30. package/packages/datadog-instrumentations/src/fs.js +1 -1
  31. package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
  32. package/packages/datadog-instrumentations/src/graphql.js +7 -10
  33. package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
  34. package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
  35. package/packages/datadog-instrumentations/src/hapi.js +10 -11
  36. package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
  37. package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
  38. package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
  39. package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
  40. package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
  41. package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
  42. package/packages/datadog-instrumentations/src/http/client.js +14 -20
  43. package/packages/datadog-instrumentations/src/jest.js +201 -143
  44. package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
  45. package/packages/datadog-instrumentations/src/knex.js +4 -4
  46. package/packages/datadog-instrumentations/src/koa.js +2 -3
  47. package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
  48. package/packages/datadog-instrumentations/src/mariadb.js +49 -65
  49. package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
  50. package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
  51. package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
  52. package/packages/datadog-instrumentations/src/mocha.js +3 -1
  53. package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
  54. package/packages/datadog-instrumentations/src/mysql.js +30 -37
  55. package/packages/datadog-instrumentations/src/mysql2.js +53 -47
  56. package/packages/datadog-instrumentations/src/net.js +1 -1
  57. package/packages/datadog-instrumentations/src/next.js +1 -0
  58. package/packages/datadog-instrumentations/src/nyc.js +3 -2
  59. package/packages/datadog-instrumentations/src/openai.js +22 -24
  60. package/packages/datadog-instrumentations/src/oracledb.js +1 -1
  61. package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
  62. package/packages/datadog-instrumentations/src/pg.js +3 -5
  63. package/packages/datadog-instrumentations/src/playwright.js +123 -83
  64. package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
  65. package/packages/datadog-instrumentations/src/redis.js +4 -4
  66. package/packages/datadog-instrumentations/src/restify.js +9 -13
  67. package/packages/datadog-instrumentations/src/rhea.js +42 -54
  68. package/packages/datadog-instrumentations/src/router.js +30 -32
  69. package/packages/datadog-instrumentations/src/tedious.js +2 -3
  70. package/packages/datadog-instrumentations/src/vitest.js +87 -52
  71. package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
  72. package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
  73. package/packages/datadog-plugin-amqplib/src/client.js +6 -2
  74. package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
  75. package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
  76. package/packages/datadog-plugin-amqplib/src/util.js +1 -1
  77. package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
  78. package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
  79. package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
  80. package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
  81. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
  82. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
  83. package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
  84. package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
  85. package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
  86. package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
  87. package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
  88. package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
  89. package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
  90. package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
  91. package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
  92. package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
  93. package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
  94. package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
  95. package/packages/datadog-plugin-child_process/src/index.js +4 -4
  96. package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
  97. package/packages/datadog-plugin-cucumber/src/index.js +60 -4
  98. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
  99. package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
  100. package/packages/datadog-plugin-cypress/src/support.js +24 -5
  101. package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
  102. package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
  103. package/packages/datadog-plugin-express/src/code_origin.js +30 -0
  104. package/packages/datadog-plugin-express/src/index.js +10 -12
  105. package/packages/datadog-plugin-express/src/tracing.js +19 -0
  106. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
  107. package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
  108. package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
  109. package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
  110. package/packages/datadog-plugin-graphql/src/execute.js +2 -2
  111. package/packages/datadog-plugin-graphql/src/index.js +10 -8
  112. package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
  113. package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
  114. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
  115. package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
  116. package/packages/datadog-plugin-grpc/src/client.js +2 -2
  117. package/packages/datadog-plugin-grpc/src/util.js +2 -2
  118. package/packages/datadog-plugin-http/src/client.js +23 -13
  119. package/packages/datadog-plugin-http2/src/client.js +24 -25
  120. package/packages/datadog-plugin-jest/src/index.js +26 -23
  121. package/packages/datadog-plugin-jest/src/util.js +8 -8
  122. package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
  123. package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
  124. package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
  125. package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
  126. package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
  127. package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
  128. package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
  129. package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
  130. package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
  131. package/packages/datadog-plugin-mariadb/src/index.js +3 -9
  132. package/packages/datadog-plugin-mocha/src/index.js +39 -14
  133. package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
  134. package/packages/datadog-plugin-mysql/src/index.js +22 -9
  135. package/packages/datadog-plugin-mysql2/src/index.js +16 -0
  136. package/packages/datadog-plugin-net/src/tcp.js +1 -1
  137. package/packages/datadog-plugin-next/src/index.js +7 -6
  138. package/packages/datadog-plugin-openai/src/services.js +6 -10
  139. package/packages/datadog-plugin-openai/src/tracing.js +12 -18
  140. package/packages/datadog-plugin-oracledb/src/index.js +1 -1
  141. package/packages/datadog-plugin-playwright/src/index.js +25 -4
  142. package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
  143. package/packages/datadog-plugin-redis/src/index.js +2 -4
  144. package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
  145. package/packages/datadog-plugin-rhea/src/producer.js +5 -2
  146. package/packages/datadog-plugin-router/src/index.js +1 -1
  147. package/packages/datadog-plugin-selenium/src/index.js +1 -6
  148. package/packages/datadog-plugin-vitest/src/index.js +52 -35
  149. package/packages/datadog-shimmer/src/shimmer.js +4 -8
  150. package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
  151. package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
  152. package/packages/dd-trace/src/appsec/blocking.js +6 -20
  153. package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
  154. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
  155. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
  156. package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
  157. package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
  158. package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
  159. package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
  160. package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
  161. package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
  162. package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
  163. package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
  164. package/packages/dd-trace/src/appsec/iast/index.js +1 -0
  165. package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
  166. package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
  167. package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
  168. package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
  169. package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
  170. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
  171. package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
  172. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
  173. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
  174. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
  175. package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
  176. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
  177. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
  178. package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
  179. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
  180. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
  181. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
  182. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
  183. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
  184. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
  185. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
  186. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
  187. package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
  188. package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
  189. package/packages/dd-trace/src/appsec/index.js +5 -5
  190. package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
  191. package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
  192. package/packages/dd-trace/src/appsec/reporter.js +232 -41
  193. package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
  194. package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
  195. package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
  196. package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
  197. package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
  198. package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
  199. package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
  200. package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
  201. package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
  202. package/packages/dd-trace/src/azure_metadata.js +9 -9
  203. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
  204. package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
  205. package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
  206. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
  207. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
  208. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
  209. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
  210. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
  211. package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
  212. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
  213. package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
  214. package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
  215. package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
  216. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
  217. package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
  218. package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
  219. package/packages/dd-trace/src/config-helper.js +89 -0
  220. package/packages/dd-trace/src/config.js +159 -129
  221. package/packages/dd-trace/src/config_stable.js +10 -7
  222. package/packages/dd-trace/src/datastreams/encoding.js +9 -9
  223. package/packages/dd-trace/src/datastreams/fnv.js +2 -2
  224. package/packages/dd-trace/src/datastreams/pathway.js +4 -4
  225. package/packages/dd-trace/src/datastreams/processor.js +5 -7
  226. package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
  227. package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
  228. package/packages/dd-trace/src/datastreams/size.js +1 -1
  229. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
  230. package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
  231. package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
  232. package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
  233. package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
  234. package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
  235. package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
  236. package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
  237. package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
  238. package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
  239. package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
  240. package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
  241. package/packages/dd-trace/src/debugger/index.js +1 -0
  242. package/packages/dd-trace/src/dogstatsd.js +7 -6
  243. package/packages/dd-trace/src/encode/0.4.js +14 -11
  244. package/packages/dd-trace/src/encode/0.5.js +4 -6
  245. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
  246. package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
  247. package/packages/dd-trace/src/encode/tags-processors.js +1 -1
  248. package/packages/dd-trace/src/exporter.js +7 -6
  249. package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
  250. package/packages/dd-trace/src/exporters/common/docker.js +4 -3
  251. package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
  252. package/packages/dd-trace/src/exporters/common/request.js +5 -2
  253. package/packages/dd-trace/src/exporters/common/util.js +4 -2
  254. package/packages/dd-trace/src/external-logger/src/index.js +5 -5
  255. package/packages/dd-trace/src/flare/file.js +1 -5
  256. package/packages/dd-trace/src/format.js +1 -1
  257. package/packages/dd-trace/src/git_properties.js +1 -1
  258. package/packages/dd-trace/src/id.js +15 -9
  259. package/packages/dd-trace/src/iitm.js +10 -22
  260. package/packages/dd-trace/src/index.js +4 -3
  261. package/packages/dd-trace/src/lambda/handler.js +7 -6
  262. package/packages/dd-trace/src/lambda/index.js +2 -1
  263. package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
  264. package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
  265. package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
  266. package/packages/dd-trace/src/llmobs/index.js +21 -5
  267. package/packages/dd-trace/src/llmobs/noop.js +18 -20
  268. package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
  269. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
  270. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
  271. package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
  272. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
  273. package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
  274. package/packages/dd-trace/src/llmobs/sdk.js +4 -3
  275. package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
  276. package/packages/dd-trace/src/llmobs/tagger.js +129 -102
  277. package/packages/dd-trace/src/llmobs/util.js +9 -9
  278. package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
  279. package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
  280. package/packages/dd-trace/src/log/index.js +9 -8
  281. package/packages/dd-trace/src/log/log.js +1 -1
  282. package/packages/dd-trace/src/log/writer.js +3 -4
  283. package/packages/dd-trace/src/msgpack/chunk.js +3 -3
  284. package/packages/dd-trace/src/msgpack/encoder.js +31 -31
  285. package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
  286. package/packages/dd-trace/src/noop/span.js +4 -6
  287. package/packages/dd-trace/src/noop/tracer.js +1 -2
  288. package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
  289. package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
  290. package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
  291. package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
  292. package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
  293. package/packages/dd-trace/src/opentracing/span.js +16 -20
  294. package/packages/dd-trace/src/opentracing/tracer.js +9 -6
  295. package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
  296. package/packages/dd-trace/src/payload-tagging/index.js +1 -1
  297. package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
  298. package/packages/dd-trace/src/pkg.js +1 -1
  299. package/packages/dd-trace/src/plugin_manager.js +4 -3
  300. package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
  301. package/packages/dd-trace/src/plugins/consumer.js +2 -2
  302. package/packages/dd-trace/src/plugins/inbound.js +5 -1
  303. package/packages/dd-trace/src/plugins/index.js +0 -1
  304. package/packages/dd-trace/src/plugins/outbound.js +4 -5
  305. package/packages/dd-trace/src/plugins/plugin.js +1 -1
  306. package/packages/dd-trace/src/plugins/producer.js +2 -2
  307. package/packages/dd-trace/src/plugins/storage.js +2 -2
  308. package/packages/dd-trace/src/plugins/util/ci.js +28 -20
  309. package/packages/dd-trace/src/plugins/util/git.js +166 -12
  310. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
  311. package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
  312. package/packages/dd-trace/src/plugins/util/llm.js +27 -10
  313. package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
  314. package/packages/dd-trace/src/plugins/util/test.js +315 -51
  315. package/packages/dd-trace/src/plugins/util/url.js +1 -1
  316. package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
  317. package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
  318. package/packages/dd-trace/src/plugins/util/web.js +8 -8
  319. package/packages/dd-trace/src/priority_sampler.js +64 -53
  320. package/packages/dd-trace/src/profiling/config.js +51 -35
  321. package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
  322. package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
  323. package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
  324. package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
  325. package/packages/dd-trace/src/profiling/index.js +2 -1
  326. package/packages/dd-trace/src/profiling/profiler.js +44 -6
  327. package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
  328. package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
  329. package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
  330. package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
  331. package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
  332. package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
  333. package/packages/dd-trace/src/profiling/tagger.js +21 -13
  334. package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
  335. package/packages/dd-trace/src/proxy.js +9 -10
  336. package/packages/dd-trace/src/random_sampler.js +40 -0
  337. package/packages/dd-trace/src/rate_limiter.js +4 -4
  338. package/packages/dd-trace/src/remote_config/index.js +3 -7
  339. package/packages/dd-trace/src/remote_config/manager.js +25 -13
  340. package/packages/dd-trace/src/require-package-json.js +1 -1
  341. package/packages/dd-trace/src/ritm.js +8 -8
  342. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
  343. package/packages/dd-trace/src/sampler.js +41 -4
  344. package/packages/dd-trace/src/sampling_rule.js +12 -3
  345. package/packages/dd-trace/src/scope.js +1 -1
  346. package/packages/dd-trace/src/serverless.js +11 -4
  347. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  348. package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
  349. package/packages/dd-trace/src/span_processor.js +5 -4
  350. package/packages/dd-trace/src/span_sampler.js +4 -1
  351. package/packages/dd-trace/src/standalone/tracesource.js +2 -3
  352. package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
  353. package/packages/dd-trace/src/startup-log.js +6 -18
  354. package/packages/dd-trace/src/supported-configurations.json +439 -0
  355. package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
  356. package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
  357. package/packages/dd-trace/src/telemetry/metrics.js +10 -5
  358. package/packages/dd-trace/src/telemetry/send-data.js +8 -7
  359. package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
  360. package/packages/dd-trace/src/tracer.js +3 -7
  361. package/packages/dd-trace/src/util.js +1 -6
  362. package/version.js +1 -0
  363. package/packages/datadog-instrumentations/src/paperplane.js +0 -77
  364. package/packages/datadog-plugin-paperplane/src/index.js +0 -25
  365. package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
  366. package/packages/datadog-plugin-paperplane/src/server.js +0 -24
  367. package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
  368. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
@@ -1,6 +1,6 @@
1
1
  'use strict'
2
2
 
3
- const { addHook, channel, AsyncResource } = require('./helpers/instrument')
3
+ const { addHook, channel } = require('./helpers/instrument')
4
4
  const shimmer = require('../../datadog-shimmer')
5
5
  const log = require('../../dd-trace/src/log')
6
6
  const {
@@ -15,7 +15,9 @@ const {
15
15
  getIsFaultyEarlyFlakeDetection,
16
16
  JEST_WORKER_LOGS_PAYLOAD_CODE,
17
17
  addAttemptToFixStringToTestName,
18
- removeAttemptToFixStringFromTestName
18
+ removeAttemptToFixStringFromTestName,
19
+ getTestEndLine,
20
+ isModifiedTest
19
21
  } = require('../../dd-trace/src/plugins/util/test')
20
22
  const {
21
23
  getFormattedJestTestParameters,
@@ -47,6 +49,7 @@ const skippableSuitesCh = channel('ci:jest:test-suite:skippable')
47
49
  const libraryConfigurationCh = channel('ci:jest:library-configuration')
48
50
  const knownTestsCh = channel('ci:jest:known-tests')
49
51
  const testManagementTestsCh = channel('ci:jest:test-management-tests')
52
+ const impactedTestsCh = channel('ci:jest:modified-tests')
50
53
 
51
54
  const itrSkippedSuitesCh = channel('ci:jest:itr:skipped-suites')
52
55
 
@@ -54,8 +57,8 @@ const itrSkippedSuitesCh = channel('ci:jest:itr:skipped-suites')
54
57
  // https://github.com/jestjs/jest/blob/1d682f21c7a35da4d3ab3a1436a357b980ebd0fa/packages/jest-worker/src/types.ts#L37
55
58
  const CHILD_MESSAGE_CALL = 1
56
59
  // Maximum time we'll wait for the tracer to flush
57
- const FLUSH_TIMEOUT = 10000
58
- // eslint-disable-next-line
60
+ const FLUSH_TIMEOUT = 10_000
61
+
59
62
  // https://github.com/jestjs/jest/blob/41f842a46bb2691f828c3a5f27fc1d6290495b82/packages/jest-circus/src/types.ts#L9C8-L9C54
60
63
  const RETRY_TIMES = Symbol.for('RETRY_TIMES')
61
64
 
@@ -77,8 +80,8 @@ let isKnownTestsEnabled = false
77
80
  let isTestManagementTestsEnabled = false
78
81
  let testManagementTests = {}
79
82
  let testManagementAttemptToFixRetries = 0
80
-
81
- const sessionAsyncResource = new AsyncResource('bound-anonymous-fn')
83
+ let isImpactedTestsEnabled = false
84
+ let modifiedTests = {}
82
85
 
83
86
  const testContexts = new WeakMap()
84
87
  const originalTestFns = new WeakMap()
@@ -150,6 +153,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
150
153
  this.isDiEnabled = this.testEnvironmentOptions._ddIsDiEnabled
151
154
  this.isKnownTestsEnabled = this.testEnvironmentOptions._ddIsKnownTestsEnabled
152
155
  this.isTestManagementTestsEnabled = this.testEnvironmentOptions._ddIsTestManagementTestsEnabled
156
+ this.isImpactedTestsEnabled = this.testEnvironmentOptions._ddIsImpactedTestsEnabled
153
157
 
154
158
  if (this.isKnownTestsEnabled) {
155
159
  try {
@@ -158,7 +162,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
158
162
  this.knownTestsForThisSuite = hasKnownTests
159
163
  ? (knownTests?.jest?.[this.testSuite] || [])
160
164
  : this.getKnownTestsForSuite(this.testEnvironmentOptions._ddKnownTests)
161
- } catch (e) {
165
+ } catch {
162
166
  // If there has been an error parsing the tests, we'll disable Early Flake Deteciton
163
167
  this.isEarlyFlakeDetectionEnabled = false
164
168
  this.isKnownTestsEnabled = false
@@ -184,6 +188,18 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
184
188
  this.isTestManagementTestsEnabled = false
185
189
  }
186
190
  }
191
+
192
+ if (this.isImpactedTestsEnabled) {
193
+ try {
194
+ const hasImpactedTests = Object.keys(modifiedTests).length > 0
195
+ this.modifiedTestsForThisSuite = hasImpactedTests
196
+ ? this.getModifiedTestForThisSuite(modifiedTests)
197
+ : this.getModifiedTestForThisSuite(this.testEnvironmentOptions._ddModifiedTests)
198
+ } catch (e) {
199
+ log.error('Error parsing impacted tests', e)
200
+ this.isImpactedTestsEnabled = false
201
+ }
202
+ }
187
203
  }
188
204
 
189
205
  getHasSnapshotTests () {
@@ -194,7 +210,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
194
210
  try {
195
211
  const { _snapshotData } = this.getVmContext().expect.getState().snapshotState
196
212
  hasSnapshotTests = Object.keys(_snapshotData).length > 0
197
- } catch (e) {
213
+ } catch {
198
214
  // if we can't be sure, we'll err on the side of caution and assume it has snapshots
199
215
  }
200
216
  this.hasSnapshotTests = hasSnapshotTests
@@ -255,6 +271,19 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
255
271
  return result
256
272
  }
257
273
 
274
+ getModifiedTestForThisSuite (modifiedTests) {
275
+ if (this.modifiedTestsForThisSuite) {
276
+ return this.modifiedTestsForThisSuite
277
+ }
278
+ let modifiedTestsForThisSuite = modifiedTests
279
+ // If jest is using workers, modified tests are serialized to json.
280
+ // If jest runs in band, they are not.
281
+ if (typeof modifiedTestsForThisSuite === 'string') {
282
+ modifiedTestsForThisSuite = JSON.parse(modifiedTestsForThisSuite)
283
+ }
284
+ return modifiedTestsForThisSuite
285
+ }
286
+
258
287
  // Generic function to handle test retries
259
288
  retryTest (testName, retryCount, addRetryStringToTestName, retryType, event) {
260
289
  // Retrying snapshots has proven to be problematic, so we'll skip them for now
@@ -288,18 +317,16 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
288
317
 
289
318
  const setNameToParams = (name, params) => { this.nameToParams[name] = [...params] }
290
319
 
291
- if (event.name === 'setup') {
292
- if (this.global.test) {
293
- shimmer.wrap(this.global.test, 'each', each => function () {
294
- const testParameters = getFormattedJestTestParameters(arguments)
295
- const eachBind = each.apply(this, arguments)
296
- return function () {
297
- const [testName] = arguments
298
- setNameToParams(testName, testParameters)
299
- return eachBind.apply(this, arguments)
300
- }
301
- })
302
- }
320
+ if (event.name === 'setup' && this.global.test) {
321
+ shimmer.wrap(this.global.test, 'each', each => function () {
322
+ const testParameters = getFormattedJestTestParameters(arguments)
323
+ const eachBind = each.apply(this, arguments)
324
+ return function () {
325
+ const [testName] = arguments
326
+ setNameToParams(testName, testParameters)
327
+ return eachBind.apply(this, arguments)
328
+ }
329
+ })
303
330
  }
304
331
  if (event.name === 'test_start') {
305
332
  let isNewTest = false
@@ -326,12 +353,26 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
326
353
  }
327
354
  }
328
355
 
356
+ let isModified = false
357
+ if (this.isImpactedTestsEnabled) {
358
+ const testStartLine = getTestLineStart(event.test.asyncError, this.testSuite)
359
+ const testEndLine = getTestEndLine(event.test.fn, testStartLine)
360
+ isModified = isModifiedTest(
361
+ this.testSourceFile,
362
+ testStartLine,
363
+ testEndLine,
364
+ this.modifiedTestsForThisSuite,
365
+ 'jest'
366
+ )
367
+ }
368
+
329
369
  if (this.isKnownTestsEnabled) {
330
370
  isNewTest = retriedTestsToNumAttempts.has(originalTestName)
331
- if (isNewTest) {
332
- numEfdRetry = retriedTestsToNumAttempts.get(originalTestName)
333
- retriedTestsToNumAttempts.set(originalTestName, numEfdRetry + 1)
334
- }
371
+ }
372
+
373
+ if (this.isEarlyFlakeDetectionEnabled && (isNewTest || isModified)) {
374
+ numEfdRetry = retriedTestsToNumAttempts.get(originalTestName)
375
+ retriedTestsToNumAttempts.set(originalTestName, numEfdRetry + 1)
335
376
  }
336
377
 
337
378
  const isJestRetry = event.test?.invocations > 1
@@ -348,22 +389,25 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
348
389
  isAttemptToFixRetry: numOfAttemptsToFixRetries > 0,
349
390
  isJestRetry,
350
391
  isDisabled,
351
- isQuarantined
392
+ isQuarantined,
393
+ isModified
352
394
  }
353
395
  testContexts.set(event.test, ctx)
354
396
 
355
397
  testStartCh.runStores(ctx, () => {
356
398
  for (const hook of event.test.parent.hooks) {
357
399
  let hookFn = hook.fn
358
- if (!originalHookFns.has(hook)) {
359
- originalHookFns.set(hook, hookFn)
360
- } else {
400
+ if (originalHookFns.has(hook)) {
361
401
  hookFn = originalHookFns.get(hook)
402
+ } else {
403
+ originalHookFns.set(hook, hookFn)
362
404
  }
405
+ // The rule has a bug, see https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2164
406
+ // eslint-disable-next-line unicorn/consistent-function-scoping
363
407
  const wrapperHook = function () {
364
408
  return testFnCh.runStores(ctx, () => hookFn.apply(this, arguments))
365
409
  }
366
- // If we don't do this, the timeout will be not be triggered
410
+ // If we don't do this, the timeout will not be triggered
367
411
  Object.defineProperty(wrapperHook, 'length', { value: hookFn.length })
368
412
  hook.fn = wrapperHook
369
413
  }
@@ -395,6 +439,27 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
395
439
  )
396
440
  }
397
441
  }
442
+ if (this.isImpactedTestsEnabled) {
443
+ const testStartLine = getTestLineStart(event.asyncError, this.testSuite)
444
+ const testEndLine = getTestEndLine(event.fn, testStartLine)
445
+ const isModified = isModifiedTest(
446
+ this.testSourceFile,
447
+ testStartLine,
448
+ testEndLine,
449
+ this.modifiedTestsForThisSuite,
450
+ 'jest'
451
+ )
452
+ if (isModified && !retriedTestsToNumAttempts.has(originalTestName) && this.isEarlyFlakeDetectionEnabled) {
453
+ retriedTestsToNumAttempts.set(originalTestName, 0)
454
+ this.retryTest(
455
+ event.testName,
456
+ earlyFlakeDetectionNumRetries,
457
+ addEfdStringToTestName,
458
+ 'Early flake detection',
459
+ event
460
+ )
461
+ }
462
+ }
398
463
  if (this.isKnownTestsEnabled) {
399
464
  const isNew = !this.knownTestsForThisSuite?.includes(originalTestName)
400
465
  if (isNew && !isSkipped && !retriedTestsToNumAttempts.has(originalTestName)) {
@@ -438,7 +503,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
438
503
  // If it is, we'll set the failedAllTests flag to true if all the tests failed
439
504
  // If all tests passed, we'll set the attemptToFixPassed flag to true
440
505
  if (testStatuses.length === testManagementAttemptToFixRetries + 1) {
441
- if (testStatuses.some(status => status === 'fail')) {
506
+ if (testStatuses.includes('fail')) {
442
507
  attemptToFixFailed = true
443
508
  }
444
509
  if (testStatuses.every(status => status === 'fail')) {
@@ -514,19 +579,16 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
514
579
  }
515
580
  }
516
581
  if (event.name === 'test_skip' || event.name === 'test_todo') {
517
- const asyncResource = new AsyncResource('bound-anonymous-fn')
518
- asyncResource.runInAsyncScope(() => {
519
- testSkippedCh.publish({
520
- test: {
521
- name: getJestTestName(event.test),
522
- suite: this.testSuite,
523
- testSourceFile: this.testSourceFile,
524
- displayName: this.displayName,
525
- frameworkVersion: jestVersion,
526
- testStartLine: getTestLineStart(event.test.asyncError, this.testSuite)
527
- },
528
- isDisabled: this.testManagementTestsForThisSuite?.disabled?.includes(getJestTestName(event.test))
529
- })
582
+ testSkippedCh.publish({
583
+ test: {
584
+ name: getJestTestName(event.test),
585
+ suite: this.testSuite,
586
+ testSourceFile: this.testSourceFile,
587
+ displayName: this.displayName,
588
+ frameworkVersion: jestVersion,
589
+ testStartLine: getTestLineStart(event.test.asyncError, this.testSuite)
590
+ },
591
+ isDisabled: this.testManagementTestsForThisSuite?.disabled?.includes(getJestTestName(event.test))
530
592
  })
531
593
  }
532
594
  }
@@ -644,9 +706,7 @@ function cliWrapper (cli, jestVersion) {
644
706
  return runCLI.apply(this, arguments)
645
707
  }
646
708
 
647
- sessionAsyncResource.runInAsyncScope(() => {
648
- libraryConfigurationCh.publish({ onDone })
649
- })
709
+ libraryConfigurationCh.publish({ onDone })
650
710
 
651
711
  try {
652
712
  const { err, libraryConfig } = await configurationPromise
@@ -659,6 +719,7 @@ function cliWrapper (cli, jestVersion) {
659
719
  isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
660
720
  isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
661
721
  testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
722
+ isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
662
723
  }
663
724
  } catch (err) {
664
725
  log.error('Jest library configuration error', err)
@@ -669,18 +730,16 @@ function cliWrapper (cli, jestVersion) {
669
730
  onDone = resolve
670
731
  })
671
732
 
672
- sessionAsyncResource.runInAsyncScope(() => {
673
- knownTestsCh.publish({ onDone })
674
- })
733
+ knownTestsCh.publish({ onDone })
675
734
 
676
735
  try {
677
736
  const { err, knownTests: receivedKnownTests } = await knownTestsPromise
678
- if (!err) {
679
- knownTests = receivedKnownTests
680
- } else {
737
+ if (err) {
681
738
  // We disable EFD if there has been an error in the known tests request
682
739
  isEarlyFlakeDetectionEnabled = false
683
740
  isKnownTestsEnabled = false
741
+ } else {
742
+ knownTests = receivedKnownTests
684
743
  }
685
744
  } catch (err) {
686
745
  log.error('Jest known tests error', err)
@@ -692,9 +751,7 @@ function cliWrapper (cli, jestVersion) {
692
751
  onDone = resolve
693
752
  })
694
753
 
695
- sessionAsyncResource.runInAsyncScope(() => {
696
- skippableSuitesCh.publish({ onDone })
697
- })
754
+ skippableSuitesCh.publish({ onDone })
698
755
 
699
756
  try {
700
757
  const { err, skippableSuites: receivedSkippableSuites } = await skippableSuitesPromise
@@ -711,9 +768,7 @@ function cliWrapper (cli, jestVersion) {
711
768
  onDone = resolve
712
769
  })
713
770
 
714
- sessionAsyncResource.runInAsyncScope(() => {
715
- testManagementTestsCh.publish({ onDone })
716
- })
771
+ testManagementTestsCh.publish({ onDone })
717
772
 
718
773
  try {
719
774
  const { err, testManagementTests: receivedTestManagementTests } = await testManagementTestsPromise
@@ -725,10 +780,25 @@ function cliWrapper (cli, jestVersion) {
725
780
  }
726
781
  }
727
782
 
783
+ if (isImpactedTestsEnabled) {
784
+ const impactedTestsPromise = new Promise((resolve) => {
785
+ onDone = resolve
786
+ })
787
+
788
+ impactedTestsCh.publish({ onDone })
789
+
790
+ try {
791
+ const { err, modifiedTests: receivedModifiedTests } = await impactedTestsPromise
792
+ if (!err) {
793
+ modifiedTests = receivedModifiedTests
794
+ }
795
+ } catch (err) {
796
+ log.error('Jest impacted tests error', err)
797
+ }
798
+ }
799
+
728
800
  const processArgv = process.argv.slice(2).join(' ')
729
- sessionAsyncResource.runInAsyncScope(() => {
730
- testSessionStartCh.publish({ command: `jest ${processArgv}`, frameworkVersion: jestVersion })
731
- })
801
+ testSessionStartCh.publish({ command: `jest ${processArgv}`, frameworkVersion: jestVersion })
732
802
 
733
803
  const result = await runCLI.apply(this, arguments)
734
804
 
@@ -748,19 +818,15 @@ function cliWrapper (cli, jestVersion) {
748
818
  if (isUserCodeCoverageEnabled) {
749
819
  try {
750
820
  const { pct, total } = coverageMap.getCoverageSummary().lines
751
- testCodeCoverageLinesTotal = total !== 0 ? pct : 0
752
- } catch (e) {
821
+ testCodeCoverageLinesTotal = total === 0 ? 0 : pct
822
+ } catch {
753
823
  // ignore errors
754
824
  }
755
825
  }
756
826
  let status, error
757
827
 
758
828
  if (success) {
759
- if (numTotalTests === 0 && numTotalTestSuites === 0) {
760
- status = 'skip'
761
- } else {
762
- status = 'pass'
763
- }
829
+ status = numTotalTests === 0 && numTotalTestSuites === 0 ? 'skip' : 'pass'
764
830
  } else {
765
831
  status = 'fail'
766
832
  error = new Error(`Failed test suites: ${numFailedTestSuites}. Failed tests: ${numFailedTests}`)
@@ -781,23 +847,22 @@ function cliWrapper (cli, jestVersion) {
781
847
  }, FLUSH_TIMEOUT).unref()
782
848
  })
783
849
 
784
- sessionAsyncResource.runInAsyncScope(() => {
785
- testSessionFinishCh.publish({
786
- status,
787
- isSuitesSkipped,
788
- isSuitesSkippingEnabled,
789
- isCodeCoverageEnabled,
790
- testCodeCoverageLinesTotal,
791
- numSkippedSuites,
792
- hasUnskippableSuites,
793
- hasForcedToRunSuites,
794
- error,
795
- isEarlyFlakeDetectionEnabled,
796
- isEarlyFlakeDetectionFaulty,
797
- isTestManagementTestsEnabled,
798
- onDone
799
- })
850
+ testSessionFinishCh.publish({
851
+ status,
852
+ isSuitesSkipped,
853
+ isSuitesSkippingEnabled,
854
+ isCodeCoverageEnabled,
855
+ testCodeCoverageLinesTotal,
856
+ numSkippedSuites,
857
+ hasUnskippableSuites,
858
+ hasForcedToRunSuites,
859
+ error,
860
+ isEarlyFlakeDetectionEnabled,
861
+ isEarlyFlakeDetectionFaulty,
862
+ isTestManagementTestsEnabled,
863
+ onDone
800
864
  })
865
+
801
866
  const waitingResult = await Promise.race([flushPromise, timeoutPromise])
802
867
 
803
868
  if (waitingResult === 'timeout') {
@@ -878,7 +943,7 @@ function cliWrapper (cli, jestVersion) {
878
943
  }
879
944
 
880
945
  function coverageReporterWrapper (coverageReporter) {
881
- const CoverageReporter = coverageReporter.default ? coverageReporter.default : coverageReporter
946
+ const CoverageReporter = coverageReporter.default ?? coverageReporter
882
947
 
883
948
  /**
884
949
  * If ITR is active, we're running fewer tests, so of course the total code coverage is reduced.
@@ -917,51 +982,46 @@ addHook({
917
982
  }, cliWrapper)
918
983
 
919
984
  function jestAdapterWrapper (jestAdapter, jestVersion) {
920
- const adapter = jestAdapter.default ? jestAdapter.default : jestAdapter
985
+ const adapter = jestAdapter.default ?? jestAdapter
921
986
  const newAdapter = shimmer.wrapFunction(adapter, adapter => function () {
922
987
  const environment = arguments[2]
923
988
  if (!environment) {
924
989
  return adapter.apply(this, arguments)
925
990
  }
926
- const asyncResource = new AsyncResource('bound-anonymous-fn')
927
- return asyncResource.runInAsyncScope(() => {
928
- testSuiteStartCh.publish({
929
- testSuite: environment.testSuite,
930
- testEnvironmentOptions: environment.testEnvironmentOptions,
931
- testSourceFile: environment.testSourceFile,
932
- displayName: environment.displayName,
933
- frameworkVersion: jestVersion
934
- })
935
- return adapter.apply(this, arguments).then(suiteResults => {
936
- const { numFailingTests, skipped, failureMessage: errorMessage } = suiteResults
937
- let status = 'pass'
938
- if (skipped) {
939
- status = 'skipped'
940
- } else if (numFailingTests !== 0) {
941
- status = 'fail'
942
- }
991
+ testSuiteStartCh.publish({
992
+ testSuite: environment.testSuite,
993
+ testEnvironmentOptions: environment.testEnvironmentOptions,
994
+ testSourceFile: environment.testSourceFile,
995
+ displayName: environment.displayName,
996
+ frameworkVersion: jestVersion
997
+ })
998
+ return adapter.apply(this, arguments).then(suiteResults => {
999
+ const { numFailingTests, skipped, failureMessage: errorMessage } = suiteResults
1000
+ let status = 'pass'
1001
+ if (skipped) {
1002
+ status = 'skipped'
1003
+ } else if (numFailingTests !== 0) {
1004
+ status = 'fail'
1005
+ }
943
1006
 
944
- /**
945
- * Child processes do not each request ITR configuration, so the jest's parent process
946
- * needs to pass them the configuration. This is done via _ddTestCodeCoverageEnabled, which
947
- * controls whether coverage is reported.
948
- */
949
- if (environment.testEnvironmentOptions?._ddTestCodeCoverageEnabled) {
950
- const root = environment.repositoryRoot || environment.rootDir
1007
+ /**
1008
+ * Child processes do not each request ITR configuration, so the jest's parent process
1009
+ * needs to pass them the configuration. This is done via _ddTestCodeCoverageEnabled, which
1010
+ * controls whether coverage is reported.
1011
+ */
1012
+ if (environment.testEnvironmentOptions?._ddTestCodeCoverageEnabled) {
1013
+ const root = environment.repositoryRoot || environment.rootDir
951
1014
 
952
- const coverageFiles = getCoveredFilenamesFromCoverage(environment.global.__coverage__)
953
- .map(filename => getTestSuitePath(filename, root))
1015
+ const coverageFiles = getCoveredFilenamesFromCoverage(environment.global.__coverage__)
1016
+ .map(filename => getTestSuitePath(filename, root))
954
1017
 
955
- asyncResource.runInAsyncScope(() => {
956
- testSuiteCodeCoverageCh.publish({ coverageFiles, testSuite: environment.testSourceFile })
957
- })
958
- }
959
- testSuiteFinishCh.publish({ status, errorMessage })
960
- return suiteResults
961
- }).catch(error => {
962
- testSuiteFinishCh.publish({ status: 'fail', error })
963
- throw error
964
- })
1018
+ testSuiteCodeCoverageCh.publish({ coverageFiles, testSuite: environment.testSourceFile })
1019
+ }
1020
+ testSuiteFinishCh.publish({ status, errorMessage })
1021
+ return suiteResults
1022
+ }).catch(error => {
1023
+ testSuiteFinishCh.publish({ status: 'fail', error })
1024
+ throw error
965
1025
  })
966
1026
  })
967
1027
  if (jestAdapter.default) {
@@ -981,9 +1041,7 @@ addHook({
981
1041
 
982
1042
  function configureTestEnvironment (readConfigsResult) {
983
1043
  const { configs } = readConfigsResult
984
- sessionAsyncResource.runInAsyncScope(() => {
985
- testSessionConfigurationCh.publish(configs.map(config => config.testEnvironmentOptions))
986
- })
1044
+ testSessionConfigurationCh.publish(configs.map(config => config.testEnvironmentOptions))
987
1045
  // We can't directly use isCodeCoverageEnabled when reporting coverage in `jestAdapterWrapper`
988
1046
  // because `jestAdapterWrapper` runs in a different process. We have to go through `testEnvironmentOptions`
989
1047
  configs.forEach(config => {
@@ -1065,6 +1123,7 @@ addHook({
1065
1123
  _ddIsTestManagementTestsEnabled,
1066
1124
  _ddTestManagementTests,
1067
1125
  _ddTestManagementAttemptToFixRetries,
1126
+ _ddModifiedTests,
1068
1127
  ...restOfTestEnvironmentOptions
1069
1128
  } = testEnvironmentOptions
1070
1129
 
@@ -1086,7 +1145,7 @@ addHook({
1086
1145
  versions: ['>=24.8.0'],
1087
1146
  file: 'build/SearchSource.js'
1088
1147
  }, (searchSourcePackage, frameworkVersion) => {
1089
- const SearchSource = searchSourcePackage.default ? searchSourcePackage.default : searchSourcePackage
1148
+ const SearchSource = searchSourcePackage.default ?? searchSourcePackage
1090
1149
 
1091
1150
  shimmer.wrap(SearchSource.prototype, 'getTestPaths', getTestPaths => async function () {
1092
1151
  const testPaths = await getTestPaths.apply(this, arguments)
@@ -1140,7 +1199,7 @@ addHook({
1140
1199
  versions: ['24.8.0 - 24.9.0']
1141
1200
  }, jestConfigSyncWrapper)
1142
1201
 
1143
- const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = [
1202
+ const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = new Set([
1144
1203
  'selenium-webdriver',
1145
1204
  'selenium-webdriver/chrome',
1146
1205
  'selenium-webdriver/edge',
@@ -1149,11 +1208,11 @@ const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = [
1149
1208
  'selenium-webdriver/ie',
1150
1209
  'selenium-webdriver/chromium',
1151
1210
  'winston'
1152
- ]
1211
+ ])
1153
1212
 
1154
1213
  function shouldBypassJestRequireEngine (moduleName) {
1155
1214
  return (
1156
- LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE.includes(moduleName)
1215
+ LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE.has(moduleName)
1157
1216
  )
1158
1217
  }
1159
1218
 
@@ -1161,7 +1220,7 @@ addHook({
1161
1220
  name: 'jest-runtime',
1162
1221
  versions: ['>=24.8.0']
1163
1222
  }, (runtimePackage) => {
1164
- const Runtime = runtimePackage.default ? runtimePackage.default : runtimePackage
1223
+ const Runtime = runtimePackage.default ?? runtimePackage
1165
1224
 
1166
1225
  shimmer.wrap(Runtime.prototype, 'requireModuleOrMock', requireModuleOrMock => function (from, moduleName) {
1167
1226
  // TODO: do this for every library that we instrument
@@ -1188,17 +1247,17 @@ addHook({
1188
1247
  }, (childProcessWorker) => {
1189
1248
  const ChildProcessWorker = childProcessWorker.default
1190
1249
  shimmer.wrap(ChildProcessWorker.prototype, 'send', send => function (request) {
1191
- if (!isKnownTestsEnabled && !isTestManagementTestsEnabled) {
1250
+ if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
1192
1251
  return send.apply(this, arguments)
1193
1252
  }
1194
1253
  const [type] = request
1195
- // eslint-disable-next-line
1254
+
1196
1255
  // https://github.com/jestjs/jest/blob/1d682f21c7a35da4d3ab3a1436a357b980ebd0fa/packages/jest-worker/src/workers/ChildProcessWorker.ts#L424
1197
1256
  if (type === CHILD_MESSAGE_CALL) {
1198
1257
  // This is the message that the main process sends to the worker to run a test suite (=test file).
1199
1258
  // In here we modify the config.testEnvironmentOptions to include the known tests for the suite.
1200
1259
  // This way the suite only knows about the tests that are part of it.
1201
- const args = request[request.length - 1]
1260
+ const args = request.at(-1)
1202
1261
  if (args.length > 1) {
1203
1262
  return send.apply(this, arguments)
1204
1263
  }
@@ -1211,12 +1270,17 @@ addHook({
1211
1270
 
1212
1271
  const suiteTestManagementTests = testManagementTests?.jest?.suites?.[testSuite]?.tests || {}
1213
1272
 
1273
+ const suiteModifiedTests = Object.keys(modifiedTests).length > 0
1274
+ ? modifiedTests
1275
+ : {}
1276
+
1214
1277
  args[0].config = {
1215
1278
  ...config,
1216
1279
  testEnvironmentOptions: {
1217
1280
  ...config.testEnvironmentOptions,
1218
1281
  _ddKnownTests: suiteKnownTests,
1219
- _ddTestManagementTests: suiteTestManagementTests
1282
+ _ddTestManagementTests: suiteTestManagementTests,
1283
+ _ddModifiedTests: suiteModifiedTests
1220
1284
  }
1221
1285
  }
1222
1286
  }
@@ -1226,21 +1290,15 @@ addHook({
1226
1290
  shimmer.wrap(ChildProcessWorker.prototype, '_onMessage', _onMessage => function () {
1227
1291
  const [code, data] = arguments[0]
1228
1292
  if (code === JEST_WORKER_TRACE_PAYLOAD_CODE) { // datadog trace payload
1229
- sessionAsyncResource.runInAsyncScope(() => {
1230
- workerReportTraceCh.publish(data)
1231
- })
1293
+ workerReportTraceCh.publish(data)
1232
1294
  return
1233
1295
  }
1234
1296
  if (code === JEST_WORKER_COVERAGE_PAYLOAD_CODE) { // datadog coverage payload
1235
- sessionAsyncResource.runInAsyncScope(() => {
1236
- workerReportCoverageCh.publish(data)
1237
- })
1297
+ workerReportCoverageCh.publish(data)
1238
1298
  return
1239
1299
  }
1240
1300
  if (code === JEST_WORKER_LOGS_PAYLOAD_CODE) { // datadog logs payload
1241
- sessionAsyncResource.runInAsyncScope(() => {
1242
- workerReportLogsCh.publish(data)
1243
- })
1301
+ workerReportLogsCh.publish(data)
1244
1302
  return
1245
1303
  }
1246
1304
  return _onMessage.apply(this, arguments)