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
  const satisfies = require('semifies')
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 {
6
6
  parseAnnotations,
@@ -8,6 +8,7 @@ const {
8
8
  PLAYWRIGHT_WORKER_TRACE_PAYLOAD_CODE
9
9
  } = require('../../dd-trace/src/plugins/util/test')
10
10
  const log = require('../../dd-trace/src/log')
11
+ const { DD_MAJOR } = require('../../../version')
11
12
 
12
13
  const testStartCh = channel('ci:playwright:test:start')
13
14
  const testFinishCh = channel('ci:playwright:test:finish')
@@ -18,6 +19,8 @@ const testSessionFinishCh = channel('ci:playwright:session:finish')
18
19
  const libraryConfigurationCh = channel('ci:playwright:library-configuration')
19
20
  const knownTestsCh = channel('ci:playwright:known-tests')
20
21
  const testManagementTestsCh = channel('ci:playwright:test-management-tests')
22
+ const impactedTestsCh = channel('ci:playwright:modified-tests')
23
+ const isModifiedCh = channel('ci:playwright:test:is-modified')
21
24
 
22
25
  const testSuiteStartCh = channel('ci:playwright:test-suite:start')
23
26
  const testSuiteFinishCh = channel('ci:playwright:test-suite:finish')
@@ -30,7 +33,6 @@ const testSuiteToCtx = new Map()
30
33
  const testSuiteToTestStatuses = new Map()
31
34
  const testSuiteToErrors = new Map()
32
35
  const testsToTestStatuses = new Map()
33
- const testSessionAsyncResource = new AsyncResource('bound-anonymous-fn')
34
36
 
35
37
  let applyRepeatEachIndex = null
36
38
 
@@ -53,9 +55,11 @@ let knownTests = {}
53
55
  let isTestManagementTestsEnabled = false
54
56
  let testManagementAttemptToFixRetries = 0
55
57
  let testManagementTests = {}
58
+ let isImpactedTestsEnabled = false
59
+ let modifiedTests = {}
56
60
  const quarantinedOrDisabledTestsAttemptToFix = []
57
61
  let rootDir = ''
58
- const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0'
62
+ const MINIMUM_SUPPORTED_VERSION_RANGE_EFD = '>=1.38.0' // TODO: remove this once we drop support for v5
59
63
 
60
64
  function getTestProperties (test) {
61
65
  const testName = getTestFullname(test)
@@ -105,9 +109,10 @@ function deepCloneSuite (suite, filterTest, tags = []) {
105
109
  function getTestsBySuiteFromTestGroups (testGroups) {
106
110
  return testGroups.reduce((acc, { requireFile, tests }) => {
107
111
  if (acc[requireFile]) {
108
- acc[requireFile] = acc[requireFile].concat(tests)
112
+ acc[requireFile].push(...tests)
109
113
  } else {
110
- acc[requireFile] = tests
114
+ // Copy the tests, otherwise we modify the original tests
115
+ acc[requireFile] = [...tests]
111
116
  }
112
117
  return acc
113
118
  }, {})
@@ -132,10 +137,10 @@ function getTestsBySuiteFromTestsById (testsById) {
132
137
  function getPlaywrightConfig (playwrightRunner) {
133
138
  try {
134
139
  return playwrightRunner._configLoader.fullConfig()
135
- } catch (e) {
140
+ } catch {
136
141
  try {
137
142
  return playwrightRunner._loader.fullConfig()
138
- } catch (e) {
143
+ } catch {
139
144
  return playwrightRunner._config || {}
140
145
  }
141
146
  }
@@ -235,14 +240,12 @@ function getTestByTestId (dispatcher, testId) {
235
240
  }
236
241
  }
237
242
 
238
- function getChannelPromise (channelToPublishTo) {
243
+ function getChannelPromise (channelToPublishTo, params) {
239
244
  return new Promise(resolve => {
240
- testSessionAsyncResource.runInAsyncScope(() => {
241
- channelToPublishTo.publish({ onDone: resolve })
242
- })
245
+ channelToPublishTo.publish({ onDone: resolve, ...params })
243
246
  })
244
247
  }
245
- // eslint-disable-next-line
248
+
246
249
  // Inspired by https://github.com/microsoft/playwright/blob/2b77ed4d7aafa85a600caa0b0d101b72c8437eeb/packages/playwright/src/reporters/base.ts#L293
247
250
  // We can't use test.outcome() directly because it's set on follow up handlers:
248
251
  // our `testEndHandler` is called before the outcome is set.
@@ -281,7 +284,7 @@ function testBeginHandler (test, browserName, isMainProcess) {
281
284
  startedSuites.push(testSuiteAbsolutePath)
282
285
  const testSuiteCtx = { testSuiteAbsolutePath }
283
286
  testSuiteToCtx.set(testSuiteAbsolutePath, testSuiteCtx)
284
- testSuiteStartCh.runStores(testSuiteCtx, () => { })
287
+ testSuiteStartCh.runStores(testSuiteCtx, () => {})
285
288
  }
286
289
 
287
290
  // We disable retries by default if attemptToFix is true
@@ -301,7 +304,7 @@ function testBeginHandler (test, browserName, isMainProcess) {
301
304
  }
302
305
  testToCtx.set(test, testCtx)
303
306
 
304
- testStartCh.runStores(testCtx, () => { })
307
+ testStartCh.runStores(testCtx, () => {})
305
308
  }
306
309
  }
307
310
 
@@ -333,7 +336,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
333
336
  }
334
337
 
335
338
  if (testStatuses.length === testManagementAttemptToFixRetries + 1) {
336
- if (testStatuses.some(status => status === 'fail')) {
339
+ if (testStatuses.includes('fail')) {
337
340
  test._ddHasFailedAttemptToFixRetries = true
338
341
  }
339
342
  if (testStatuses.every(status => status === 'fail')) {
@@ -345,7 +348,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
345
348
 
346
349
  // this handles tests that do not go through the worker process (because they're skipped)
347
350
  if (isMainProcess) {
348
- const testResult = results[results.length - 1]
351
+ const testResult = results.at(-1)
349
352
  const testCtx = testToCtx.get(test)
350
353
  const isAtrRetry = testResult?.retry > 0 &&
351
354
  isFlakyTestRetriesEnabled &&
@@ -366,6 +369,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
366
369
  hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
367
370
  hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
368
371
  isAtrRetry,
372
+ isModified: test._ddIsModified,
369
373
  ...testCtx.currentStore
370
374
  })
371
375
  }
@@ -389,7 +393,7 @@ function testEndHandler (test, annotations, testStatus, error, isTimeout, isMain
389
393
  if (!remainingTestsByFile[testSuiteAbsolutePath].length) {
390
394
  const testStatuses = testSuiteToTestStatuses.get(testSuiteAbsolutePath)
391
395
  let testSuiteStatus = 'pass'
392
- if (testStatuses.some(status => status === 'fail')) {
396
+ if (testStatuses.includes('fail')) {
393
397
  testSuiteStatus = 'fail'
394
398
  } else if (testStatuses.every(status => status === 'skip')) {
395
399
  testSuiteStatus = 'skip'
@@ -413,9 +417,9 @@ function dispatcherRunWrapperNew (run) {
413
417
  if (!this._allTests) {
414
418
  // Removed in https://github.com/microsoft/playwright/commit/1e52c37b254a441cccf332520f60225a5acc14c7
415
419
  // Not available from >=1.44.0
416
- this._ddAllTests = testGroups.map(g => g.tests).flat()
420
+ this._ddAllTests = testGroups.flatMap(g => g.tests)
417
421
  }
418
- remainingTestsByFile = getTestsBySuiteFromTestGroups(arguments[0])
422
+ remainingTestsByFile = getTestsBySuiteFromTestGroups(testGroups)
419
423
  return run.apply(this, arguments)
420
424
  }
421
425
  }
@@ -435,7 +439,7 @@ function dispatcherHook (dispatcherExport) {
435
439
  const { test } = dispatcher._testById.get(params.testId)
436
440
 
437
441
  const { results } = test
438
- const testResult = results[results.length - 1]
442
+ const testResult = results.at(-1)
439
443
 
440
444
  const isTimeout = testResult.status === 'timedOut'
441
445
  testEndHandler(
@@ -471,7 +475,7 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
471
475
 
472
476
  const isTimeout = status === 'timedOut'
473
477
  testEndHandler(test, annotations, STATUS_TO_TEST_STATUS[status], errors && errors[0], isTimeout, false)
474
- const testResult = test.results[test.results.length - 1]
478
+ const testResult = test.results.at(-1)
475
479
  const isAtrRetry = testResult?.retry > 0 &&
476
480
  isFlakyTestRetriesEnabled &&
477
481
  !test._ddIsAttemptToFix &&
@@ -490,7 +494,8 @@ function dispatcherHookNew (dispatcherExport, runWrapper) {
490
494
  _ddHasFailedAllRetries: test._ddHasFailedAllRetries,
491
495
  _ddHasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
492
496
  _ddHasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
493
- _ddIsAtrRetry: isAtrRetry
497
+ _ddIsAtrRetry: isAtrRetry,
498
+ _ddIsModified: test._ddIsModified
494
499
  }
495
500
  })
496
501
  })
@@ -508,9 +513,7 @@ function runnerHook (runnerExport, playwrightVersion) {
508
513
 
509
514
  const processArgv = process.argv.slice(2).join(' ')
510
515
  const command = `playwright ${processArgv}`
511
- testSessionAsyncResource.runInAsyncScope(() => {
512
- testSessionStartCh.publish({ command, frameworkVersion: playwrightVersion, rootDir })
513
- })
516
+ testSessionStartCh.publish({ command, frameworkVersion: playwrightVersion, rootDir })
514
517
 
515
518
  try {
516
519
  const { err, libraryConfig } = await getChannelPromise(libraryConfigurationCh)
@@ -522,22 +525,24 @@ function runnerHook (runnerExport, playwrightVersion) {
522
525
  flakyTestRetriesCount = libraryConfig.flakyTestRetriesCount
523
526
  isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
524
527
  testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
528
+ isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
525
529
  }
526
530
  } catch (e) {
527
531
  isEarlyFlakeDetectionEnabled = false
528
532
  isKnownTestsEnabled = false
529
533
  isTestManagementTestsEnabled = false
534
+ isImpactedTestsEnabled = false
530
535
  log.error('Playwright session start error', e)
531
536
  }
532
537
 
533
538
  if (isKnownTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
534
539
  try {
535
540
  const { err, knownTests: receivedKnownTests } = await getChannelPromise(knownTestsCh)
536
- if (!err) {
537
- knownTests = receivedKnownTests
538
- } else {
541
+ if (err) {
539
542
  isEarlyFlakeDetectionEnabled = false
540
543
  isKnownTestsEnabled = false
544
+ } else {
545
+ knownTests = receivedKnownTests
541
546
  }
542
547
  } catch (err) {
543
548
  isEarlyFlakeDetectionEnabled = false
@@ -549,10 +554,10 @@ function runnerHook (runnerExport, playwrightVersion) {
549
554
  if (isTestManagementTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
550
555
  try {
551
556
  const { err, testManagementTests: receivedTestManagementTests } = await getChannelPromise(testManagementTestsCh)
552
- if (!err) {
553
- testManagementTests = receivedTestManagementTests
554
- } else {
557
+ if (err) {
555
558
  isTestManagementTestsEnabled = false
559
+ } else {
560
+ testManagementTests = receivedTestManagementTests
556
561
  }
557
562
  } catch (err) {
558
563
  isTestManagementTestsEnabled = false
@@ -560,6 +565,20 @@ function runnerHook (runnerExport, playwrightVersion) {
560
565
  }
561
566
  }
562
567
 
568
+ if (isImpactedTestsEnabled && satisfies(playwrightVersion, MINIMUM_SUPPORTED_VERSION_RANGE_EFD)) {
569
+ try {
570
+ const { err, modifiedTests: receivedModifiedTests } = await getChannelPromise(impactedTestsCh)
571
+ if (err) {
572
+ isImpactedTestsEnabled = false
573
+ } else {
574
+ modifiedTests = receivedModifiedTests
575
+ }
576
+ } catch (err) {
577
+ isImpactedTestsEnabled = false
578
+ log.error('Playwright impacted tests error', err)
579
+ }
580
+ }
581
+
563
582
  const projects = getProjectsFromRunner(this)
564
583
 
565
584
  const shouldSetRetries = isFlakyTestRetriesEnabled &&
@@ -611,13 +630,11 @@ function runnerHook (runnerExport, playwrightVersion) {
611
630
  const flushWait = new Promise(resolve => {
612
631
  onDone = resolve
613
632
  })
614
- testSessionAsyncResource.runInAsyncScope(() => {
615
- testSessionFinishCh.publish({
616
- status: STATUS_TO_TEST_STATUS[sessionStatus],
617
- isEarlyFlakeDetectionEnabled,
618
- isTestManagementTestsEnabled,
619
- onDone
620
- })
633
+ testSessionFinishCh.publish({
634
+ status: STATUS_TO_TEST_STATUS[sessionStatus],
635
+ isEarlyFlakeDetectionEnabled,
636
+ isTestManagementTestsEnabled,
637
+ onDone
621
638
  })
622
639
  await flushWait
623
640
 
@@ -632,37 +649,38 @@ function runnerHook (runnerExport, playwrightVersion) {
632
649
  return runnerExport
633
650
  }
634
651
 
635
- addHook({
636
- name: '@playwright/test',
637
- file: 'lib/runner.js',
638
- versions: ['>=1.18.0 <=1.30.0']
639
- }, runnerHook)
640
-
641
- addHook({
642
- name: '@playwright/test',
643
- file: 'lib/dispatcher.js',
644
- versions: ['>=1.18.0 <1.30.0']
645
- }, dispatcherHook)
646
-
647
- addHook({
648
- name: '@playwright/test',
649
- file: 'lib/dispatcher.js',
650
- versions: ['>=1.30.0 <1.31.0']
651
- }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapper))
652
-
653
- addHook({
654
- name: '@playwright/test',
655
- file: 'lib/runner/dispatcher.js',
656
- versions: ['>=1.31.0 <1.38.0']
657
- }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
658
-
659
- addHook({
660
- name: '@playwright/test',
661
- file: 'lib/runner/runner.js',
662
- versions: ['>=1.31.0 <1.38.0']
663
- }, runnerHook)
652
+ if (DD_MAJOR < 6) { // <1.38.0 is only supported up to version 5
653
+ addHook({
654
+ name: '@playwright/test',
655
+ file: 'lib/runner.js',
656
+ versions: ['>=1.18.0 <=1.30.0']
657
+ }, runnerHook)
658
+
659
+ addHook({
660
+ name: '@playwright/test',
661
+ file: 'lib/dispatcher.js',
662
+ versions: ['>=1.18.0 <1.30.0']
663
+ }, dispatcherHook)
664
+
665
+ addHook({
666
+ name: '@playwright/test',
667
+ file: 'lib/dispatcher.js',
668
+ versions: ['>=1.30.0 <1.31.0']
669
+ }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapper))
670
+
671
+ addHook({
672
+ name: '@playwright/test',
673
+ file: 'lib/runner/dispatcher.js',
674
+ versions: ['>=1.31.0 <1.38.0']
675
+ }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
676
+
677
+ addHook({
678
+ name: '@playwright/test',
679
+ file: 'lib/runner/runner.js',
680
+ versions: ['>=1.31.0 <1.38.0']
681
+ }, runnerHook)
682
+ }
664
683
 
665
- // From >=1.38.0
666
684
  addHook({
667
685
  name: 'playwright',
668
686
  file: 'lib/runner/runner.js',
@@ -675,11 +693,10 @@ addHook({
675
693
  versions: ['>=1.38.0']
676
694
  }, (dispatcher) => dispatcherHookNew(dispatcher, dispatcherRunWrapperNew))
677
695
 
678
- // Hook used for early flake detection. EFD only works from >=1.38.0
679
696
  addHook({
680
697
  name: 'playwright',
681
698
  file: 'lib/common/suiteUtils.js',
682
- versions: [MINIMUM_SUPPORTED_VERSION_RANGE_EFD]
699
+ versions: ['>=1.38.0']
683
700
  }, suiteUtilsPackage => {
684
701
  // We grab `applyRepeatEachIndex` to use it later
685
702
  // `applyRepeatEachIndex` needs to be applied to a cloned suite
@@ -687,16 +704,15 @@ addHook({
687
704
  return suiteUtilsPackage
688
705
  })
689
706
 
690
- // Hook used for early flake detection. EFD only works from >=1.38.0
691
707
  addHook({
692
708
  name: 'playwright',
693
709
  file: 'lib/runner/loadUtils.js',
694
- versions: [MINIMUM_SUPPORTED_VERSION_RANGE_EFD]
710
+ versions: ['>=1.38.0']
695
711
  }, (loadUtilsPackage) => {
696
712
  const oldCreateRootSuite = loadUtilsPackage.createRootSuite
697
713
 
698
714
  async function newCreateRootSuite () {
699
- if (!isKnownTestsEnabled && !isTestManagementTestsEnabled) {
715
+ if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
700
716
  return oldCreateRootSuite.apply(this, arguments)
701
717
  }
702
718
  const rootSuite = await oldCreateRootSuite.apply(this, arguments)
@@ -735,13 +751,41 @@ addHook({
735
751
  }
736
752
  }
737
753
 
754
+ if (isImpactedTestsEnabled) {
755
+ await Promise.all(allTests.map(async (test) => {
756
+ const { isModified } = await getChannelPromise(isModifiedCh, {
757
+ filePath: test._requireFile,
758
+ modifiedTests
759
+ })
760
+ if (isModified) {
761
+ test._ddIsModified = true
762
+ }
763
+ if (isEarlyFlakeDetectionEnabled && test.expectedStatus !== 'skipped') {
764
+ const isNew = isKnownTestsEnabled && isNewTest(test)
765
+ const fileSuite = getSuiteType(test, 'file')
766
+ const projectSuite = getSuiteType(test, 'project')
767
+ // If something change in the file, all tests in the file are impacted
768
+ const isModifiedTest = () => isModified
769
+ for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
770
+ const copyFileSuite = deepCloneSuite(fileSuite, isModifiedTest, [
771
+ isNew && '_ddIsNew',
772
+ '_ddIsModified',
773
+ '_ddIsEfdRetry'
774
+ ])
775
+ applyRepeatEachIndex(projectSuite._fullProject, copyFileSuite, repeatEachIndex + 1)
776
+ projectSuite._addSuite(copyFileSuite)
777
+ }
778
+ }
779
+ }))
780
+ }
781
+
738
782
  if (isKnownTestsEnabled) {
739
783
  const newTests = allTests.filter(isNewTest)
740
784
 
741
785
  for (const newTest of newTests) {
742
786
  // No need to filter out attempt to fix tests here because attempt to fix tests are never new
743
787
  newTest._ddIsNew = true
744
- if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped') {
788
+ if (isEarlyFlakeDetectionEnabled && newTest.expectedStatus !== 'skipped' && !newTest._ddIsModified) {
745
789
  const fileSuite = getSuiteType(newTest, 'file')
746
790
  const projectSuite = getSuiteType(newTest, 'project')
747
791
  for (let repeatEachIndex = 1; repeatEachIndex <= earlyFlakeDetectionNumRetries; repeatEachIndex++) {
@@ -814,11 +858,7 @@ addHook({
814
858
  try {
815
859
  if (page) {
816
860
  const isRumActive = await page.evaluate(() => {
817
- if (window.DD_RUM && window.DD_RUM.getInternalContext) {
818
- return !!window.DD_RUM.getInternalContext()
819
- } else {
820
- return false
821
- }
861
+ return window.DD_RUM && window.DD_RUM.getInternalContext ? !!window.DD_RUM.getInternalContext() : false
822
862
  })
823
863
 
824
864
  if (isRumActive) {
@@ -828,7 +868,7 @@ addHook({
828
868
  })
829
869
  }
830
870
  }
831
- } catch (e) {
871
+ } catch {
832
872
  // ignore errors such as redirects, context destroyed, etc
833
873
  }
834
874
 
@@ -897,9 +937,8 @@ addHook({
897
937
  if (window.DD_RUM && window.DD_RUM.stopSession) {
898
938
  window.DD_RUM.stopSession()
899
939
  return true
900
- } else {
901
- return false
902
940
  }
941
+ return false
903
942
  })
904
943
 
905
944
  if (isRumActive) {
@@ -916,7 +955,7 @@ addHook({
916
955
  }
917
956
  }
918
957
  }
919
- } catch (e) {
958
+ } catch {
920
959
  // ignore errors
921
960
  }
922
961
  },
@@ -984,6 +1023,7 @@ addHook({
984
1023
  hasPassedAttemptToFixRetries: test._ddHasPassedAttemptToFixRetries,
985
1024
  hasFailedAttemptToFixRetries: test._ddHasFailedAttemptToFixRetries,
986
1025
  isAtrRetry: test._ddIsAtrRetry,
1026
+ isModified: test._ddIsModified,
987
1027
  onDone,
988
1028
  ...testCtx.currentStore
989
1029
  })
@@ -102,11 +102,10 @@ addHook({
102
102
  wrapProtobufClasses(root)
103
103
  return root
104
104
  })
105
- } else {
106
- // If result is not a promise, directly wrap the protobuf classes
107
- wrapProtobufClasses(result)
108
- return result
109
105
  }
106
+ // If result is not a promise, directly wrap the protobuf classes
107
+ wrapProtobufClasses(result)
108
+ return result
110
109
  })
111
110
 
112
111
  shimmer.wrap(protobuf.Root.prototype, 'loadSync', original => function () {
@@ -45,9 +45,9 @@ function wrapCommandQueueClass (cls) {
45
45
  try {
46
46
  const parsed = new URL(createClientUrl)
47
47
  if (parsed) {
48
- this._url = { host: parsed.hostname, port: +parsed.port || 6379 }
48
+ this._url = { host: parsed.hostname, port: Number(parsed.port) || 6379 }
49
49
  }
50
- } catch (error) {
50
+ } catch {
51
51
  // ignore
52
52
  }
53
53
  }
@@ -130,8 +130,8 @@ addHook({ name: 'redis', versions: ['>=0.12 <2.6'] }, redis => {
130
130
  if (typeof callback === 'function') {
131
131
  const cb = callbackResource.bind(callback)
132
132
  arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
133
- } else if (Array.isArray(args) && typeof args[args.length - 1] === 'function') {
134
- const cb = callbackResource.bind(args[args.length - 1])
133
+ } else if (Array.isArray(args) && typeof args.at(-1) === 'function') {
134
+ const cb = callbackResource.bind(args.at(-1))
135
135
  args[args.length - 1] = asyncResource.bind(wrapCallback(finishCh, errorCh, cb))
136
136
  } else {
137
137
  arguments[2] = asyncResource.bind(wrapCallback(finishCh, errorCh))
@@ -20,25 +20,21 @@ function wrapSetupRequest (setupRequest) {
20
20
  }
21
21
 
22
22
  function wrapMethod (method) {
23
- return function (path) {
24
- const middleware = wrapMiddleware(Array.prototype.slice.call(arguments, 1))
23
+ return function (path, ...middlewares) {
24
+ const wrappedMiddlewares = middlewares.map(wrapFn)
25
25
 
26
- return method.apply(this, [path].concat(middleware))
26
+ return method.apply(this, [path, ...wrappedMiddlewares])
27
27
  }
28
28
  }
29
29
 
30
30
  function wrapHandler (method) {
31
- return function () {
32
- return method.apply(this, wrapMiddleware(arguments))
31
+ return function (...middlewares) {
32
+ return method.apply(this, middlewares.map(wrapFn))
33
33
  }
34
34
  }
35
35
 
36
- function wrapMiddleware (middleware) {
37
- return Array.prototype.map.call(middleware, wrapFn)
38
- }
39
-
40
36
  function wrapFn (fn) {
41
- if (Array.isArray(fn)) return wrapMiddleware(fn)
37
+ if (Array.isArray(fn)) return fn.map(wrapFn)
42
38
 
43
39
  return shimmer.wrapFunction(fn, fn => function (req, res, next) {
44
40
  if (typeof next === 'function') {
@@ -51,11 +47,11 @@ function wrapFn (fn) {
51
47
 
52
48
  try {
53
49
  const result = fn.apply(this, arguments)
54
- if (result !== null && typeof result === 'object' && typeof result.then === 'function') {
55
- return result.then(function () {
50
+ if (typeof result?.then === 'function') {
51
+ return result.then(function (result) {
56
52
  nextChannel.publish({ req })
57
53
  finishChannel.publish({ req })
58
- return arguments[0]
54
+ return result
59
55
  }).catch(function (error) {
60
56
  errorChannel.publish({ req, error })
61
57
  nextChannel.publish({ req })