dd-trace 5.124.0 → 5.126.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 (208) hide show
  1. package/LICENSE-3rdparty.csv +3 -1
  2. package/ci/init.js +8 -3
  3. package/ci/test-optimization-validation/ci-package-scripts.js +2 -2
  4. package/ci/test-optimization-validation/ci-remediation.js +6 -6
  5. package/ci/test-optimization-validation/command-blocker.js +7 -5
  6. package/ci/test-optimization-validation/framework-adapters/cucumber.js +1 -1
  7. package/ci/test-optimization-validation/framework-adapters/vitest.js +3 -3
  8. package/ci/test-optimization-validation/package-check.js +1 -1
  9. package/ci/test-optimization-validation/report-writer.js +7 -5
  10. package/ci/vitest-no-worker-init-runner-setup.mjs +8 -0
  11. package/ci/vitest-no-worker-init-setup.mjs +13 -13
  12. package/ci/vitest-no-worker-init-v5-setup.mjs +4 -0
  13. package/index.d.ts +8 -0
  14. package/package.json +13 -10
  15. package/packages/datadog-esbuild/index.js +3 -1
  16. package/packages/datadog-instrumentations/src/cypress-config.js +19 -17
  17. package/packages/datadog-instrumentations/src/fs.js +24 -20
  18. package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -2
  19. package/packages/datadog-instrumentations/src/graphql.js +16 -16
  20. package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +504 -0
  21. package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
  22. package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +265 -0
  23. package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +1 -2
  24. package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +95 -30
  25. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +0 -25
  26. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql-jit.js +83 -0
  27. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql.js +85 -1
  28. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
  29. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/mercurius.js +30 -12
  30. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +14 -5
  31. package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +251 -0
  32. package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +11 -1
  33. package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +562 -27
  34. package/packages/datadog-instrumentations/src/jest.js +166 -45
  35. package/packages/datadog-instrumentations/src/knex.js +76 -0
  36. package/packages/datadog-instrumentations/src/mariadb.js +6 -0
  37. package/packages/datadog-instrumentations/src/mocha/common.js +59 -2
  38. package/packages/datadog-instrumentations/src/mocha/main.js +66 -20
  39. package/packages/datadog-instrumentations/src/mocha/utils.js +2 -1
  40. package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +98 -0
  41. package/packages/datadog-instrumentations/src/mocha/worker.js +12 -8
  42. package/packages/datadog-instrumentations/src/net.js +14 -17
  43. package/packages/datadog-instrumentations/src/next.js +212 -62
  44. package/packages/datadog-instrumentations/src/openai.js +42 -40
  45. package/packages/datadog-instrumentations/src/pg.js +15 -0
  46. package/packages/datadog-instrumentations/src/playwright.js +113 -13
  47. package/packages/datadog-instrumentations/src/rum-browser-scripts.js +40 -0
  48. package/packages/datadog-instrumentations/src/sequelize.js +94 -2
  49. package/packages/datadog-instrumentations/src/undici.js +53 -4
  50. package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +37 -3
  51. package/packages/datadog-instrumentations/src/vitest-main.js +92 -9
  52. package/packages/datadog-instrumentations/src/vitest-worker.js +71 -14
  53. package/packages/datadog-instrumentations/src/webdriverio.js +965 -6
  54. package/packages/datadog-plugin-amqp10/src/consumer.js +3 -1
  55. package/packages/datadog-plugin-amqp10/src/producer.js +3 -1
  56. package/packages/datadog-plugin-amqp10/src/util.js +2 -1
  57. package/packages/datadog-plugin-avsc/src/schema_iterator.js +6 -1
  58. package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +16 -5
  59. package/packages/datadog-plugin-cassandra-driver/src/index.js +8 -3
  60. package/packages/datadog-plugin-cucumber/src/index.js +0 -2
  61. package/packages/datadog-plugin-cypress/src/cypress-plugin.js +262 -48
  62. package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +4 -1
  63. package/packages/datadog-plugin-graphql/src/execute.js +998 -196
  64. package/packages/datadog-plugin-graphql/src/index.js +27 -7
  65. package/packages/datadog-plugin-graphql/src/jit.js +136 -0
  66. package/packages/datadog-plugin-graphql/src/request.js +18 -27
  67. package/packages/datadog-plugin-graphql/src/resolve-error.js +108 -0
  68. package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -2
  69. package/packages/datadog-plugin-graphql/src/tools/transforms.js +45 -3
  70. package/packages/datadog-plugin-graphql/src/utils.js +208 -120
  71. package/packages/datadog-plugin-graphql/src/validate.js +10 -23
  72. package/packages/datadog-plugin-jest/src/index.js +0 -6
  73. package/packages/datadog-plugin-langchain/src/tracing.js +7 -0
  74. package/packages/datadog-plugin-mocha/src/index.js +403 -75
  75. package/packages/datadog-plugin-mongodb-core/src/query.js +6 -0
  76. package/packages/datadog-plugin-mysql/src/index.js +41 -15
  77. package/packages/datadog-plugin-net/src/tcp.js +3 -1
  78. package/packages/datadog-plugin-next/src/index.js +63 -29
  79. package/packages/datadog-plugin-playwright/src/index.js +167 -27
  80. package/packages/datadog-plugin-undici/src/index.js +27 -41
  81. package/packages/datadog-plugin-vitest/src/index.js +6 -12
  82. package/packages/dd-trace/src/aiguard/evaluation.js +2 -1
  83. package/packages/dd-trace/src/aiguard/messages/anthropic.js +8 -1
  84. package/packages/dd-trace/src/aiguard/messages/openai.js +8 -1
  85. package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +20 -6
  86. package/packages/dd-trace/src/appsec/api_security/index.js +23 -6
  87. package/packages/dd-trace/src/appsec/api_security/sampler.js +99 -40
  88. package/packages/dd-trace/src/appsec/graphql.js +6 -2
  89. package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +3 -3
  90. package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -1
  91. package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +8 -2
  92. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +3 -1
  93. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +531 -95
  94. package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +1 -1
  95. package/packages/dd-trace/src/appsec/lambda.js +44 -26
  96. package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +32 -2
  97. package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +8 -8
  98. package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +6 -4
  99. package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +20 -4
  100. package/packages/dd-trace/src/ci-visibility/exporters/agentless/request-tracker.js +5 -173
  101. package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +7 -6
  102. package/packages/dd-trace/src/ci-visibility/exporters/agents.js +54 -0
  103. package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/writer.js +1 -2
  104. package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +394 -225
  105. package/packages/dd-trace/src/ci-visibility/exporters/limits.js +9 -0
  106. package/packages/dd-trace/src/ci-visibility/exporters/request.js +323 -31
  107. package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +42 -0
  108. package/packages/dd-trace/src/ci-visibility/final-flush.js +2 -1
  109. package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +57 -18
  110. package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +0 -3
  111. package/packages/dd-trace/src/ci-visibility/requests/request.js +11 -0
  112. package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +164 -71
  113. package/packages/dd-trace/src/ci-visibility/requests/video-request.js +180 -0
  114. package/packages/dd-trace/src/ci-visibility/telemetry.js +10 -7
  115. package/packages/dd-trace/src/ci-visibility/test-video.js +61 -0
  116. package/packages/dd-trace/src/config/generated-config-types.d.ts +4 -0
  117. package/packages/dd-trace/src/config/index.js +73 -13
  118. package/packages/dd-trace/src/config/parsers.js +11 -1
  119. package/packages/dd-trace/src/config/stable.js +3 -3
  120. package/packages/dd-trace/src/config/supported-configurations.json +22 -2
  121. package/packages/dd-trace/src/crashtracking/crashtracker.js +82 -18
  122. package/packages/dd-trace/src/debugger/config.js +12 -1
  123. package/packages/dd-trace/src/debugger/constants.js +1 -0
  124. package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -1
  125. package/packages/dd-trace/src/debugger/devtools_client/request-options.js +28 -0
  126. package/packages/dd-trace/src/debugger/devtools_client/send.js +7 -40
  127. package/packages/dd-trace/src/debugger/devtools_client/status.js +11 -6
  128. package/packages/dd-trace/src/debugger/devtools_client/tags.js +41 -0
  129. package/packages/dd-trace/src/debugger/index.js +23 -3
  130. package/packages/dd-trace/src/dogstatsd.js +510 -76
  131. package/packages/dd-trace/src/encode/0.4-cross-payload.js +170 -0
  132. package/packages/dd-trace/src/encode/0.4.js +5 -5
  133. package/packages/dd-trace/src/encode/agentless-ci-visibility.js +9 -8
  134. package/packages/dd-trace/src/evp_proxy/direct.js +3 -25
  135. package/packages/dd-trace/src/exporters/agent/index.js +2 -1
  136. package/packages/dd-trace/src/exporters/agent/writer.js +24 -7
  137. package/packages/dd-trace/src/exporters/agentless/index.js +7 -9
  138. package/packages/dd-trace/src/exporters/agentless/writer.js +103 -119
  139. package/packages/dd-trace/src/exporters/common/agents.js +28 -6
  140. package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -2
  141. package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +191 -0
  142. package/packages/dd-trace/src/exporters/common/proxy.js +52 -0
  143. package/packages/dd-trace/src/exporters/common/request.js +42 -14
  144. package/packages/dd-trace/src/exporters/common/url.js +40 -1
  145. package/packages/dd-trace/src/exporters/common/writer.js +9 -7
  146. package/packages/dd-trace/src/flush.js +6 -3
  147. package/packages/dd-trace/src/id.js +14 -0
  148. package/packages/dd-trace/src/index.js +5 -2
  149. package/packages/dd-trace/src/llmobs/experiments/dataset.js +2 -1
  150. package/packages/dd-trace/src/llmobs/index.js +32 -32
  151. package/packages/dd-trace/src/llmobs/plugins/ai/ddTelemetry.js +22 -71
  152. package/packages/dd-trace/src/llmobs/plugins/ai/vercelTelemetry.js +23 -13
  153. package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +7 -0
  154. package/packages/dd-trace/src/llmobs/util.js +0 -33
  155. package/packages/dd-trace/src/llmobs/writers/base.js +49 -32
  156. package/packages/dd-trace/src/log/index.js +7 -1
  157. package/packages/dd-trace/src/{ci-visibility/log-submission → log-submission}/log-submission-plugin.js +48 -19
  158. package/packages/dd-trace/src/openfeature/writers/base.js +14 -12
  159. package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
  160. package/packages/dd-trace/src/opentelemetry/logs/index.js +5 -24
  161. package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +14 -4
  162. package/packages/dd-trace/src/opentelemetry/metrics/index.js +15 -22
  163. package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +14 -4
  164. package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +10 -0
  165. package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +5 -0
  166. package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +19 -4
  167. package/packages/dd-trace/src/opentelemetry/resource-attributes.js +55 -0
  168. package/packages/dd-trace/src/opentelemetry/trace/index.js +6 -1
  169. package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +10 -0
  170. package/packages/dd-trace/src/opentracing/propagation/text_map.js +101 -20
  171. package/packages/dd-trace/src/payload-tagging/index.js +2 -1
  172. package/packages/dd-trace/src/plugins/ci_plugin.js +1 -6
  173. package/packages/dd-trace/src/plugins/tracing.js +12 -10
  174. package/packages/dd-trace/src/plugins/util/ci.js +3 -1
  175. package/packages/dd-trace/src/plugins/util/inferred_proxy.js +16 -15
  176. package/packages/dd-trace/src/plugins/util/test.js +83 -20
  177. package/packages/dd-trace/src/plugins/util/url.js +2 -2
  178. package/packages/dd-trace/src/plugins/util/web.js +4 -9
  179. package/packages/dd-trace/src/priority_sampler.js +4 -0
  180. package/packages/dd-trace/src/profiling/config.js +1 -0
  181. package/packages/dd-trace/src/profiling/oom.js +7 -2
  182. package/packages/dd-trace/src/profiling/profiler.js +23 -13
  183. package/packages/dd-trace/src/profiling/profilers/space.js +38 -11
  184. package/packages/dd-trace/src/profiling/webspan-utils.js +7 -4
  185. package/packages/dd-trace/src/proxy.js +75 -5
  186. package/packages/dd-trace/src/remote_config/index.js +319 -101
  187. package/packages/dd-trace/src/remote_config/scheduler.js +37 -12
  188. package/packages/dd-trace/src/runtime_metrics/client.js +37 -8
  189. package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +5 -1
  190. package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -1
  191. package/packages/dd-trace/src/sampling_rule.js +39 -10
  192. package/packages/dd-trace/src/serverless/telemetry-delivery-tracker.js +4 -8
  193. package/packages/dd-trace/src/serverless/vercel.js +53 -20
  194. package/packages/dd-trace/src/serverless.js +10 -3
  195. package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
  196. package/packages/dd-trace/src/span_processor.js +18 -3
  197. package/packages/dd-trace/src/span_stats.js +24 -28
  198. package/packages/dd-trace/src/startup-log.js +3 -2
  199. package/packages/dd-trace/src/telemetry/agentless-url.js +28 -0
  200. package/packages/dd-trace/src/telemetry/send-data.js +23 -20
  201. package/packages/dd-trace/src/telemetry/session-propagation.js +3 -2
  202. package/packages/dd-trace/src/tracer.js +4 -5
  203. package/packages/dd-trace/src/tracer_metadata.js +11 -3
  204. package/vendor/dist/@datadog/sketches-js/index.js +1 -1
  205. package/vendor/dist/protobufjs/index.js +1 -1
  206. package/vendor/dist/protobufjs/minimal/index.js +1 -1
  207. package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +0 -27
  208. package/packages/dd-trace/src/encode/agentless-json.js +0 -210
@@ -68,6 +68,7 @@ const finishWrappedContexts = new WeakSet()
68
68
  const runFilesWrappedPrototypes = new WeakSet()
69
69
  const activeRunFilesContexts = new WeakSet()
70
70
  const runErrorsByContext = new WeakMap()
71
+ const typecheckPoolWorkerRequests = new WeakMap()
71
72
  let isFlakyTestRetriesEnabled = false
72
73
  let flakyTestRetriesCount = 0
73
74
  let isEarlyFlakeDetectionEnabled = false
@@ -148,6 +149,10 @@ function getTypecheckerExport (vitestPackage) {
148
149
  return findExportByName(vitestPackage, 'Typechecker')
149
150
  }
150
151
 
152
+ function getTypecheckPoolWorkerExport (vitestPackage) {
153
+ return findExportByName(vitestPackage, 'TypecheckPoolWorker')
154
+ }
155
+
151
156
  function getForksPoolWorkerExport (vitestPackage) {
152
157
  return findExportByName(vitestPackage, 'ForksPoolWorker')
153
158
  }
@@ -1207,7 +1212,6 @@ function getFinishWrapper (exitOrClose) {
1207
1212
  status: runError ? 'fail' : (areAllSuitesSkipped ? 'skip' : getSessionStatus(this.state)),
1208
1213
  testCodeCoverageLinesTotal,
1209
1214
  error,
1210
- isTestSessionFinalizationError: Boolean(runError),
1211
1215
  isEarlyFlakeDetectionEnabled,
1212
1216
  isEarlyFlakeDetectionFaulty,
1213
1217
  isTestManagementTestsEnabled,
@@ -1691,9 +1695,9 @@ async function reportTypecheckFile (file, sessionConfiguration, frameworkVersion
1691
1695
  })
1692
1696
  }
1693
1697
 
1694
- async function reportTypecheckResults (result, frameworkVersion, ctx, typechecker) {
1698
+ async function reportTypecheckResults (result, frameworkVersion, ctx, typechecker, files = result?.files) {
1695
1699
  if (!testSuiteFinishCh.hasSubscribers) return
1696
- if (!Array.isArray(result?.files)) return
1700
+ if (!Array.isArray(result?.files) || !Array.isArray(files)) return
1697
1701
 
1698
1702
  const setupState = ctx && mainProcessSetupStates.get(ctx)
1699
1703
  if (
@@ -1703,7 +1707,7 @@ async function reportTypecheckResults (result, frameworkVersion, ctx, typechecke
1703
1707
  await ensureMainProcessSetup(
1704
1708
  ctx,
1705
1709
  frameworkVersion,
1706
- result.files,
1710
+ files,
1707
1711
  false,
1708
1712
  !setupState || setupState.disableTestImpactAnalysis
1709
1713
  )
@@ -1713,7 +1717,7 @@ async function reportTypecheckResults (result, frameworkVersion, ctx, typechecke
1713
1717
  ? await getChannelPromise(testSessionConfigurationCh, { frameworkVersion }) || {}
1714
1718
  : {}
1715
1719
 
1716
- await Promise.all(result.files.map(file => reportTypecheckFile(
1720
+ await Promise.all(files.map(file => reportTypecheckFile(
1717
1721
  file,
1718
1722
  sessionConfiguration,
1719
1723
  frameworkVersion,
@@ -1742,6 +1746,51 @@ function getTypecheckerWrapper (vitestPackage, frameworkVersion) {
1742
1746
  return vitestPackage
1743
1747
  }
1744
1748
 
1749
+ function wrapTypecheckPoolWorker (TypecheckPoolWorker, frameworkVersion) {
1750
+ if (!TypecheckPoolWorker?.prototype?.send || !TypecheckPoolWorker.prototype.on) return
1751
+
1752
+ shimmer.wrap(TypecheckPoolWorker.prototype, 'send', send => function (message) {
1753
+ typecheckPoolWorkerRequests.set(this, {
1754
+ type: message?.type,
1755
+ filepaths: new Set(message?.context?.files?.map(file => file.filepath)),
1756
+ })
1757
+ return send.apply(this, arguments)
1758
+ })
1759
+ shimmer.wrap(TypecheckPoolWorker.prototype, 'on', on => function (event, callback) {
1760
+ if (event !== 'message') return on.apply(this, arguments)
1761
+
1762
+ const worker = this
1763
+ arguments[1] = shimmer.wrapFunction(callback, callback => function (message) {
1764
+ const typechecker = worker.project?.typechecker
1765
+ const request = typecheckPoolWorkerRequests.get(worker)
1766
+ if (
1767
+ message?.type !== 'testfileFinished' ||
1768
+ request?.type !== 'run' ||
1769
+ !typechecker
1770
+ ) {
1771
+ return callback.apply(this, arguments)
1772
+ }
1773
+
1774
+ const result = typechecker.getResult?.()
1775
+ const files = result?.files?.filter(file => request.filepaths.has(file.filepath))
1776
+ return reportTypecheckResults(
1777
+ result,
1778
+ frameworkVersion,
1779
+ worker.project?.vitest,
1780
+ typechecker,
1781
+ files
1782
+ ).then(
1783
+ () => callback.apply(this, arguments),
1784
+ (error) => {
1785
+ log.error('Could not report Vitest typecheck results: %s', error?.message)
1786
+ return callback.apply(this, arguments)
1787
+ }
1788
+ )
1789
+ })
1790
+ return on.apply(this, arguments)
1791
+ })
1792
+ }
1793
+
1745
1794
  function getCreateCliWrapper (vitestPackage, frameworkVersion) {
1746
1795
  const createCliExport = findExportByName(vitestPackage, 'createCLI')
1747
1796
  if (!createCliExport) {
@@ -1963,14 +2012,23 @@ function getStartVitestWrapper (cliApiPackage, frameworkVersion) {
1963
2012
  }
1964
2013
  const startVitestExport = findExportByName(cliApiPackage, 'startVitest')
1965
2014
  shimmer.wrap(cliApiPackage, startVitestExport.key, getCliOrStartVitestWrapper(frameworkVersion))
2015
+ const createVitestExport = findExportByName(cliApiPackage, 'createVitest')
2016
+ if (createVitestExport) {
2017
+ shimmer.wrap(cliApiPackage, createVitestExport.key, getCliOrStartVitestWrapper(frameworkVersion))
2018
+ }
1966
2019
  wrapMessagePortOn()
1967
2020
 
1968
- const vitest = getVitestExport(cliApiPackage)
2021
+ wrapVitestInternals(cliApiPackage, frameworkVersion)
2022
+ return cliApiPackage
2023
+ }
2024
+
2025
+ function wrapVitestInternals (vitestPackage, frameworkVersion) {
2026
+ const vitest = getVitestExport(vitestPackage)
1969
2027
  if (vitest) {
1970
2028
  wrapVitestRunFiles(vitest.value, frameworkVersion)
1971
2029
  }
1972
2030
 
1973
- const forksPoolWorker = getForksPoolWorkerExport(cliApiPackage)
2031
+ const forksPoolWorker = getForksPoolWorkerExport(vitestPackage)
1974
2032
  if (forksPoolWorker) {
1975
2033
  // function is async
1976
2034
  shimmer.wrap(forksPoolWorker.value.prototype, 'start', start => function (...args) {
@@ -1982,7 +2040,7 @@ function getStartVitestWrapper (cliApiPackage, frameworkVersion) {
1982
2040
  shimmer.wrap(forksPoolWorker.value.prototype, 'on', getWrappedOn)
1983
2041
  }
1984
2042
 
1985
- const threadsPoolWorker = getThreadsPoolWorkerExport(cliApiPackage)
2043
+ const threadsPoolWorker = getThreadsPoolWorkerExport(vitestPackage)
1986
2044
  if (threadsPoolWorker) {
1987
2045
  // function is async
1988
2046
  shimmer.wrap(threadsPoolWorker.value.prototype, 'start', start => function (...args) {
@@ -1992,7 +2050,6 @@ function getStartVitestWrapper (cliApiPackage, frameworkVersion) {
1992
2050
  })
1993
2051
  shimmer.wrap(threadsPoolWorker.value.prototype, 'on', getWrappedOn)
1994
2052
  }
1995
- return cliApiPackage
1996
2053
  }
1997
2054
 
1998
2055
  addHook({
@@ -2082,6 +2139,32 @@ addHook({
2082
2139
  return coveragePackage
2083
2140
  })
2084
2141
 
2142
+ // Vitest 5 moved the core and pool worker exports out of cli-api into an index chunk.
2143
+ addHook({
2144
+ name: 'vitest',
2145
+ versions: ['>=5.0.0'],
2146
+ filePattern: 'dist/chunks/index.*',
2147
+ }, (vitestPackage, frameworkVersion) => {
2148
+ if (!getVitestExport(vitestPackage)) return vitestPackage
2149
+
2150
+ wrapVitestInternals(vitestPackage, frameworkVersion)
2151
+
2152
+ const typecheckPoolWorker = getTypecheckPoolWorkerExport(vitestPackage)
2153
+ if (typecheckPoolWorker) {
2154
+ wrapTypecheckPoolWorker(typecheckPoolWorker.value, frameworkVersion)
2155
+ }
2156
+
2157
+ const baseSequencer = getBaseSequencerExport(vitestPackage)
2158
+ if (baseSequencer) {
2159
+ shimmer.wrap(
2160
+ baseSequencer.value.prototype,
2161
+ 'sort',
2162
+ sort => getSortWrapper(sort, frameworkVersion)
2163
+ )
2164
+ }
2165
+ return vitestPackage
2166
+ })
2167
+
2085
2168
  addHook({
2086
2169
  name: 'vitest',
2087
2170
  versions: ['>=3.0.0 <3.0.9'],
@@ -1,5 +1,6 @@
1
1
  'use strict'
2
2
 
3
+ const fs = require('node:fs')
3
4
  const path = require('node:path')
4
5
  const { performance } = require('node:perf_hooks')
5
6
  const { fileURLToPath } = require('node:url')
@@ -244,7 +245,17 @@ function wrapVitestCoverageRpc () {
244
245
  if (property !== 'onAfterSuiteRun' || typeof value !== 'function') return value
245
246
 
246
247
  return function (metadata) {
247
- vitestCoverageSnapshot = metadata?.coverage
248
+ const coverage = metadata?.coverage
249
+ if (typeof coverage === 'string') {
250
+ try {
251
+ vitestCoverageSnapshot = JSON.parse(fs.readFileSync(coverage, 'utf8'))
252
+ } catch (error) {
253
+ log.warn('Could not read Vitest V8 coverage: %s', error?.message)
254
+ vitestCoverageSnapshot = undefined
255
+ }
256
+ } else {
257
+ vitestCoverageSnapshot = coverage
258
+ }
248
259
  return value.apply(this, arguments)
249
260
  }
250
261
  },
@@ -891,22 +902,36 @@ function wrapVitestTestRunner (VitestTestRunner) {
891
902
  }
892
903
 
893
904
  function captureRunnerFunctions (pkg) {
894
- if (vitestGetFn) return
895
905
  const getFnExport = findExportByName(pkg, 'getFn')
896
906
  const setFnExport = findExportByName(pkg, 'setFn')
897
- if (getFnExport && setFnExport) {
907
+ if (!vitestGetFn && getFnExport) {
898
908
  vitestGetFn = getFnExport.value
909
+ }
910
+ if (!vitestSetFn && setFnExport) {
899
911
  vitestSetFn = setFnExport.value
900
912
  }
901
913
  const getHooksExport = findExportByName(pkg, 'getHooks')
902
- if (getHooksExport) {
914
+ if (!vitestGetHooks && getHooksExport) {
903
915
  vitestGetHooks = getHooksExport.value
904
916
  }
905
917
  }
906
918
 
919
+ function installTestScopedRunTask (VitestTestRunner) {
920
+ if (VitestTestRunner.prototype.runTask) return
921
+
922
+ VitestTestRunner.prototype.runTask = function (task) {
923
+ const fn = vitestGetFn?.(task)
924
+ if (!fn) {
925
+ throw new Error('Test function is not found. Did you add it using setFn?')
926
+ }
927
+ const testFn = wrapTestScopedFn(task, fn)
928
+ return testFn()
929
+ }
930
+ }
931
+
907
932
  addHook({
908
933
  name: 'vitest',
909
- versions: ['>=4.0.0'],
934
+ versions: ['>=4.0.0 <5.0.0'],
910
935
  filePattern: 'dist/chunks/test.*',
911
936
  }, (testPackage) => {
912
937
  const testRunner = getTestRunnerExport(testPackage)
@@ -920,6 +945,30 @@ addHook({
920
945
  return testPackage
921
946
  })
922
947
 
948
+ // Vitest 5 bundled the former @vitest/runner implementation into separate index and run chunks.
949
+ addHook({
950
+ name: 'vitest',
951
+ versions: ['>=5.0.0'],
952
+ filePattern: 'dist/chunks/index.*',
953
+ }, (testPackage) => {
954
+ const testRunner = getTestRunnerExport(testPackage)
955
+ if (testRunner) {
956
+ wrapVitestTestRunner(testRunner.value)
957
+ installTestScopedRunTask(testRunner.value)
958
+ }
959
+ return testPackage
960
+ })
961
+
962
+ addHook({
963
+ name: 'vitest',
964
+ versions: ['>=5.0.0'],
965
+ filePattern: 'dist/chunks/run.*',
966
+ }, (runnerPackage, frameworkVersion) => {
967
+ captureRunnerFunctions(runnerPackage)
968
+ wrapStartTests(runnerPackage, frameworkVersion)
969
+ return runnerPackage
970
+ })
971
+
923
972
  addHook({
924
973
  name: '@vitest/runner',
925
974
  versions: ['>=1.6.0'],
@@ -946,13 +995,8 @@ addHook({
946
995
  return vitestPackage
947
996
  })
948
997
 
949
- // test suite start and finish
950
- // only relevant for workers
951
- addHook({
952
- name: '@vitest/runner',
953
- versions: ['>=1.6.0'],
954
- }, (vitestPackage, frameworkVersion) => {
955
- shimmer.wrap(vitestPackage, 'startTests', startTests => async function (testPaths) {
998
+ function getStartTestsWrapper (frameworkVersion) {
999
+ return startTests => async function (testPaths) {
956
1000
  let testSuiteError = null
957
1001
  if (!testSuiteFinishCh.hasSubscribers) {
958
1002
  return startTests.apply(this, arguments)
@@ -1166,7 +1210,20 @@ addHook({
1166
1210
  })
1167
1211
 
1168
1212
  return startTestsResponse
1169
- })
1213
+ }
1214
+ }
1170
1215
 
1216
+ function wrapStartTests (vitestPackage, frameworkVersion) {
1217
+ const startTests = findExportByName(vitestPackage, 'startTests')
1218
+ if (startTests) {
1219
+ shimmer.wrap(vitestPackage, startTests.key, getStartTestsWrapper(frameworkVersion))
1220
+ }
1171
1221
  return vitestPackage
1172
- })
1222
+ }
1223
+
1224
+ // test suite start and finish
1225
+ // only relevant for workers
1226
+ addHook({
1227
+ name: '@vitest/runner',
1228
+ versions: ['>=1.6.0'],
1229
+ }, wrapStartTests)