dd-trace 6.12.0 → 6.14.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.
- package/LICENSE-3rdparty.csv +3 -1
- package/ci/init.js +8 -3
- package/ci/test-optimization-validation/ci-package-scripts.js +2 -2
- package/ci/test-optimization-validation/ci-remediation.js +6 -6
- package/ci/test-optimization-validation/command-blocker.js +7 -5
- package/ci/test-optimization-validation/framework-adapters/cucumber.js +1 -1
- package/ci/test-optimization-validation/framework-adapters/cypress.js +9 -11
- package/ci/test-optimization-validation/framework-adapters/vitest.js +3 -3
- package/ci/test-optimization-validation/package-check.js +1 -1
- package/ci/test-optimization-validation/report-writer.js +7 -5
- package/ci/test-optimization-validation/scenarios/ci-wiring.js +5 -4
- package/ci/vitest-no-worker-init-runner-setup.mjs +8 -0
- package/ci/vitest-no-worker-init-setup.mjs +13 -13
- package/ci/vitest-no-worker-init-v5-setup.mjs +4 -0
- package/index.d.ts +127 -26
- package/package.json +22 -19
- package/packages/datadog-esbuild/index.js +3 -1
- package/packages/datadog-instrumentations/src/bunyan.js +4 -2
- package/packages/datadog-instrumentations/src/cypress-config.js +19 -17
- package/packages/datadog-instrumentations/src/fs.js +24 -20
- package/packages/datadog-instrumentations/src/google-cloud-vertexai.js +2 -2
- package/packages/datadog-instrumentations/src/graphql.js +16 -16
- package/packages/datadog-instrumentations/src/helpers/bunyan.js +12 -3
- package/packages/datadog-instrumentations/src/helpers/graphql-jit-runtime.js +504 -0
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +266 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/compiler.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +95 -30
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/ai.js +0 -25
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql-jit.js +83 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/graphql.js +85 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +1 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/mercurius.js +30 -12
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +13 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +279 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +12 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +562 -27
- package/packages/datadog-instrumentations/src/jest.js +165 -38
- package/packages/datadog-instrumentations/src/knex.js +76 -0
- package/packages/datadog-instrumentations/src/mariadb-bundle.js +1597 -0
- package/packages/datadog-instrumentations/src/mariadb.js +13 -0
- package/packages/datadog-instrumentations/src/mocha/common.js +59 -2
- package/packages/datadog-instrumentations/src/mocha/main.js +25 -15
- package/packages/datadog-instrumentations/src/mocha/utils.js +2 -1
- package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +98 -0
- package/packages/datadog-instrumentations/src/mocha/worker.js +12 -8
- package/packages/datadog-instrumentations/src/net.js +14 -17
- package/packages/datadog-instrumentations/src/next.js +212 -62
- package/packages/datadog-instrumentations/src/openai.js +42 -40
- package/packages/datadog-instrumentations/src/pg.js +15 -0
- package/packages/datadog-instrumentations/src/pino.js +15 -4
- package/packages/datadog-instrumentations/src/playwright.js +137 -27
- package/packages/datadog-instrumentations/src/rum-browser-scripts.js +40 -0
- package/packages/datadog-instrumentations/src/sequelize.js +94 -2
- package/packages/datadog-instrumentations/src/undici.js +53 -4
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +44 -7
- package/packages/datadog-instrumentations/src/vitest-main.js +92 -9
- package/packages/datadog-instrumentations/src/vitest-worker.js +82 -14
- package/packages/datadog-instrumentations/src/webdriverio.js +986 -1
- package/packages/datadog-instrumentations/src/winston.js +6 -3
- package/packages/datadog-plugin-amqp10/src/consumer.js +3 -1
- package/packages/datadog-plugin-amqp10/src/producer.js +3 -1
- package/packages/datadog-plugin-amqp10/src/util.js +2 -1
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +6 -1
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +16 -5
- package/packages/datadog-plugin-cassandra-driver/src/index.js +8 -3
- package/packages/datadog-plugin-cucumber/src/index.js +0 -2
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +262 -48
- package/packages/datadog-plugin-cypress/src/support.js +1 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +4 -1
- package/packages/datadog-plugin-graphql/src/execute.js +998 -196
- package/packages/datadog-plugin-graphql/src/index.js +27 -7
- package/packages/datadog-plugin-graphql/src/jit.js +136 -0
- package/packages/datadog-plugin-graphql/src/request.js +18 -27
- package/packages/datadog-plugin-graphql/src/resolve-error.js +108 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -2
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +45 -3
- package/packages/datadog-plugin-graphql/src/utils.js +208 -120
- package/packages/datadog-plugin-graphql/src/validate.js +10 -23
- package/packages/datadog-plugin-http/src/client.js +2 -15
- package/packages/datadog-plugin-http2/src/client.js +2 -15
- package/packages/datadog-plugin-jest/src/index.js +0 -6
- package/packages/datadog-plugin-langchain/src/tracing.js +7 -0
- package/packages/datadog-plugin-mocha/src/index.js +403 -75
- package/packages/datadog-plugin-mongodb-core/src/query.js +6 -0
- package/packages/datadog-plugin-mysql/src/index.js +41 -15
- package/packages/datadog-plugin-net/src/tcp.js +3 -1
- package/packages/datadog-plugin-next/src/index.js +63 -29
- package/packages/datadog-plugin-openai-agents/src/integration.js +15 -11
- package/packages/datadog-plugin-playwright/src/index.js +176 -28
- package/packages/datadog-plugin-undici/src/index.js +29 -56
- package/packages/datadog-plugin-vitest/src/index.js +6 -12
- package/packages/dd-trace/src/aiguard/evaluation.js +96 -21
- package/packages/dd-trace/src/aiguard/integrations/vercel-ai.js +2 -3
- package/packages/dd-trace/src/aiguard/messages/anthropic.js +29 -10
- package/packages/dd-trace/src/aiguard/messages/openai.js +8 -1
- package/packages/dd-trace/src/aiguard/messages/vercel-ai.js +20 -6
- package/packages/dd-trace/src/aiguard/noop.js +9 -1
- package/packages/dd-trace/src/aiguard/redaction.js +183 -0
- package/packages/dd-trace/src/aiguard/sdk.js +7 -2
- package/packages/dd-trace/src/aiguard/tags.js +2 -0
- package/packages/dd-trace/src/appsec/api_security/index.js +23 -6
- package/packages/dd-trace/src/appsec/api_security/sampler.js +99 -40
- package/packages/dd-trace/src/appsec/graphql.js +6 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -1
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +8 -2
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +11 -36
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/url-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +10 -9
- package/packages/dd-trace/src/appsec/lambda.js +44 -26
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -0
- package/packages/dd-trace/src/ci-visibility/encode/json-encoder.js +32 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +8 -8
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +20 -4
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/request-tracker.js +7 -150
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/agents.js +54 -0
- package/packages/dd-trace/src/ci-visibility/exporters/ci-validation/writer.js +1 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +397 -234
- package/packages/dd-trace/src/ci-visibility/exporters/limits.js +9 -0
- package/packages/dd-trace/src/ci-visibility/exporters/request.js +323 -31
- package/packages/dd-trace/src/ci-visibility/exporters/settings-cache-key.js +42 -0
- package/packages/dd-trace/src/ci-visibility/final-flush.js +21 -0
- package/packages/dd-trace/src/ci-visibility/requests/fs-cache.js +57 -18
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +0 -3
- package/packages/dd-trace/src/ci-visibility/requests/upload-test-screenshot.js +164 -71
- package/packages/dd-trace/src/ci-visibility/requests/video-request.js +176 -0
- package/packages/dd-trace/src/ci-visibility/telemetry.js +10 -7
- package/packages/dd-trace/src/ci-visibility/test-video.js +61 -0
- package/packages/dd-trace/src/config/generated-config-types.d.ts +10 -0
- package/packages/dd-trace/src/config/index.js +75 -14
- package/packages/dd-trace/src/config/parsers.js +11 -1
- package/packages/dd-trace/src/config/stable.js +3 -3
- package/packages/dd-trace/src/config/supported-configurations.json +47 -2
- package/packages/dd-trace/src/crashtracking/crashtracker.js +82 -18
- package/packages/dd-trace/src/debugger/config.js +12 -1
- package/packages/dd-trace/src/debugger/constants.js +1 -0
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +2 -1
- package/packages/dd-trace/src/debugger/devtools_client/request-options.js +33 -0
- package/packages/dd-trace/src/debugger/devtools_client/send.js +7 -39
- package/packages/dd-trace/src/debugger/devtools_client/status.js +11 -6
- package/packages/dd-trace/src/debugger/devtools_client/tags.js +41 -0
- package/packages/dd-trace/src/debugger/index.js +23 -3
- package/packages/dd-trace/src/dogstatsd.js +532 -71
- package/packages/dd-trace/src/encode/0.4-cross-payload.js +170 -0
- package/packages/dd-trace/src/encode/0.4.js +5 -5
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +9 -8
- package/packages/dd-trace/src/evp_proxy/direct.js +27 -23
- package/packages/dd-trace/src/exporters/agent/index.js +24 -3
- package/packages/dd-trace/src/exporters/agent/writer.js +28 -11
- package/packages/dd-trace/src/exporters/agentless/index.js +7 -9
- package/packages/dd-trace/src/exporters/agentless/writer.js +100 -118
- package/packages/dd-trace/src/exporters/common/agents.js +28 -6
- package/packages/dd-trace/src/exporters/common/buffering-exporter.js +2 -2
- package/packages/dd-trace/src/exporters/common/final-flush-request-tracker.js +191 -0
- package/packages/dd-trace/src/exporters/common/request.js +31 -11
- package/packages/dd-trace/src/exporters/common/url.js +40 -1
- package/packages/dd-trace/src/exporters/common/writer.js +31 -7
- package/packages/dd-trace/src/exporters/span-stats/index.js +23 -4
- package/packages/dd-trace/src/external-logger/src/index.js +4 -3
- package/packages/dd-trace/src/flush.js +105 -0
- package/packages/dd-trace/src/id.js +14 -0
- package/packages/dd-trace/src/index.js +5 -2
- package/packages/dd-trace/src/llmobs/experiments/client.js +4 -0
- package/packages/dd-trace/src/llmobs/experiments/dataset.js +52 -2
- package/packages/dd-trace/src/llmobs/experiments/experiment.js +420 -105
- package/packages/dd-trace/src/llmobs/experiments/index.js +54 -42
- package/packages/dd-trace/src/llmobs/experiments/noop.js +39 -8
- package/packages/dd-trace/src/llmobs/experiments/result.js +1 -0
- package/packages/dd-trace/src/llmobs/experiments/util.js +21 -0
- package/packages/dd-trace/src/llmobs/index.js +111 -48
- package/packages/dd-trace/src/llmobs/noop.js +2 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/ddTelemetry.js +22 -71
- package/packages/dd-trace/src/llmobs/plugins/ai/vercelTelemetry.js +23 -13
- package/packages/dd-trace/src/llmobs/plugins/anthropic/util.js +8 -4
- package/packages/dd-trace/src/llmobs/plugins/claude-agent-sdk/index.js +6 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +7 -0
- package/packages/dd-trace/src/llmobs/plugins/openai/utils.js +13 -6
- package/packages/dd-trace/src/llmobs/plugins/openai-agents/utils.js +5 -7
- package/packages/dd-trace/src/llmobs/util.js +0 -33
- package/packages/dd-trace/src/llmobs/writers/base.js +106 -53
- package/packages/dd-trace/src/log/index.js +7 -1
- package/packages/dd-trace/src/log-submission/log-submission-plugin.js +249 -0
- package/packages/dd-trace/src/noop/span.js +5 -0
- package/packages/dd-trace/src/openfeature/writers/base.js +14 -12
- package/packages/dd-trace/src/openfeature/writers/exposures.js +8 -1
- package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +45 -3
- package/packages/dd-trace/src/opentelemetry/logs/index.js +9 -25
- package/packages/dd-trace/src/opentelemetry/logs/logger_provider.js +7 -4
- package/packages/dd-trace/src/opentelemetry/logs/otlp_http_log_exporter.js +14 -4
- package/packages/dd-trace/src/opentelemetry/metrics/index.js +18 -23
- package/packages/dd-trace/src/opentelemetry/metrics/meter_provider.js +8 -0
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_http_metric_exporter.js +18 -6
- package/packages/dd-trace/src/opentelemetry/metrics/otlp_span_stats_exporter.js +14 -2
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +25 -5
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_http_exporter_base.js +61 -25
- package/packages/dd-trace/src/opentelemetry/otlp/otlp_transformer_base.js +19 -4
- package/packages/dd-trace/src/opentelemetry/resource-attributes.js +55 -0
- package/packages/dd-trace/src/opentelemetry/trace/index.js +6 -1
- package/packages/dd-trace/src/opentelemetry/trace/otlp_http_trace_exporter.js +10 -0
- package/packages/dd-trace/src/opentelemetry/tracer.js +26 -2
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +494 -351
- package/packages/dd-trace/src/opentracing/span.js +28 -0
- package/packages/dd-trace/src/otel-thread-ctx.js +23 -5
- package/packages/dd-trace/src/payload-tagging/index.js +2 -1
- package/packages/dd-trace/src/plugin_manager.js +2 -0
- package/packages/dd-trace/src/plugins/ci_plugin.js +1 -6
- package/packages/dd-trace/src/plugins/tracing.js +12 -10
- package/packages/dd-trace/src/plugins/util/ci.js +3 -1
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +16 -15
- package/packages/dd-trace/src/plugins/util/status-validator.js +98 -0
- package/packages/dd-trace/src/plugins/util/test.js +157 -41
- package/packages/dd-trace/src/plugins/util/url.js +2 -2
- package/packages/dd-trace/src/plugins/util/web.js +6 -74
- package/packages/dd-trace/src/profiling/config.js +1 -0
- package/packages/dd-trace/src/profiling/oom.js +11 -5
- package/packages/dd-trace/src/profiling/profiler.js +30 -13
- package/packages/dd-trace/src/profiling/profilers/events.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/space.js +38 -11
- package/packages/dd-trace/src/profiling/profilers/wall.js +14 -14
- package/packages/dd-trace/src/profiling/webspan-utils.js +7 -4
- package/packages/dd-trace/src/proxy.js +108 -10
- package/packages/dd-trace/src/remote_config/index.js +319 -101
- package/packages/dd-trace/src/remote_config/scheduler.js +37 -12
- package/packages/dd-trace/src/runtime_metrics/client.js +37 -8
- package/packages/dd-trace/src/runtime_metrics/index.js +5 -0
- package/packages/dd-trace/src/runtime_metrics/otlp_runtime_metrics.js +10 -1
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +22 -7
- package/packages/dd-trace/src/sampling_rule.js +36 -9
- package/packages/dd-trace/src/serverless/telemetry-delivery-tracker.js +51 -0
- package/packages/dd-trace/src/serverless/vercel.js +155 -0
- package/packages/dd-trace/src/serverless.js +45 -21
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/span_stats.js +64 -31
- package/packages/dd-trace/src/startup-log.js +3 -2
- package/packages/dd-trace/src/telemetry/agentless-url.js +28 -0
- package/packages/dd-trace/src/telemetry/send-data.js +18 -16
- package/packages/dd-trace/src/telemetry/session-propagation.js +3 -2
- package/packages/dd-trace/src/tracer.js +26 -5
- package/packages/dd-trace/src/tracer_metadata.js +11 -3
- package/packages/dd-trace/src/web-tags-cache.js +67 -13
- package/vendor/dist/@datadog/openfeature-node-server/index.js +1 -1
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/packages/datadog-instrumentations/src/playwright-browser-scripts.js +0 -27
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +0 -53
- package/packages/dd-trace/src/encode/agentless-json.js +0 -209
|
@@ -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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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,10 +1,12 @@
|
|
|
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')
|
|
6
7
|
const { isMainThread, parentPort } = require('node:worker_threads')
|
|
7
8
|
|
|
9
|
+
const { channel } = require('dc-polyfill')
|
|
8
10
|
const shimmer = require('../../datadog-shimmer')
|
|
9
11
|
const log = require('../../dd-trace/src/log')
|
|
10
12
|
const { getEfdRetryCountForDuration } = require('../../dd-trace/src/ci-visibility/efd-retry-policy')
|
|
@@ -40,10 +42,12 @@ const {
|
|
|
40
42
|
} = require('./vitest-util')
|
|
41
43
|
|
|
42
44
|
const EFD_SUITE_ADMISSION_TIMEOUT_MS = 5000
|
|
45
|
+
const logSubmissionFlushCh = channel('ci:log-submission:flush')
|
|
43
46
|
const taskToCtx = new WeakMap()
|
|
44
47
|
const taskToTestProperties = new WeakMap()
|
|
45
48
|
const taskToStatuses = new WeakMap()
|
|
46
49
|
const taskToReportedErrorCount = new WeakMap()
|
|
50
|
+
const runnersWithLogSubmissionCleanup = new WeakSet()
|
|
47
51
|
const attemptToFixTaskToStatuses = new WeakMap()
|
|
48
52
|
const fileToHasConcurrentTests = new WeakMap()
|
|
49
53
|
const fileToEfdSuiteAdmission = new WeakMap()
|
|
@@ -241,7 +245,17 @@ function wrapVitestCoverageRpc () {
|
|
|
241
245
|
if (property !== 'onAfterSuiteRun' || typeof value !== 'function') return value
|
|
242
246
|
|
|
243
247
|
return function (metadata) {
|
|
244
|
-
|
|
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
|
+
}
|
|
245
259
|
return value.apply(this, arguments)
|
|
246
260
|
}
|
|
247
261
|
},
|
|
@@ -888,22 +902,36 @@ function wrapVitestTestRunner (VitestTestRunner) {
|
|
|
888
902
|
}
|
|
889
903
|
|
|
890
904
|
function captureRunnerFunctions (pkg) {
|
|
891
|
-
if (vitestGetFn) return
|
|
892
905
|
const getFnExport = findExportByName(pkg, 'getFn')
|
|
893
906
|
const setFnExport = findExportByName(pkg, 'setFn')
|
|
894
|
-
if (
|
|
907
|
+
if (!vitestGetFn && getFnExport) {
|
|
895
908
|
vitestGetFn = getFnExport.value
|
|
909
|
+
}
|
|
910
|
+
if (!vitestSetFn && setFnExport) {
|
|
896
911
|
vitestSetFn = setFnExport.value
|
|
897
912
|
}
|
|
898
913
|
const getHooksExport = findExportByName(pkg, 'getHooks')
|
|
899
|
-
if (getHooksExport) {
|
|
914
|
+
if (!vitestGetHooks && getHooksExport) {
|
|
900
915
|
vitestGetHooks = getHooksExport.value
|
|
901
916
|
}
|
|
902
917
|
}
|
|
903
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
|
+
|
|
904
932
|
addHook({
|
|
905
933
|
name: 'vitest',
|
|
906
|
-
versions: ['>=4.0.0'],
|
|
934
|
+
versions: ['>=4.0.0 <5.0.0'],
|
|
907
935
|
filePattern: 'dist/chunks/test.*',
|
|
908
936
|
}, (testPackage) => {
|
|
909
937
|
const testRunner = getTestRunnerExport(testPackage)
|
|
@@ -917,6 +945,30 @@ addHook({
|
|
|
917
945
|
return testPackage
|
|
918
946
|
})
|
|
919
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
|
+
|
|
920
972
|
addHook({
|
|
921
973
|
name: '@vitest/runner',
|
|
922
974
|
versions: ['>=1.6.0'],
|
|
@@ -943,17 +995,20 @@ addHook({
|
|
|
943
995
|
return vitestPackage
|
|
944
996
|
})
|
|
945
997
|
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
addHook({
|
|
949
|
-
name: '@vitest/runner',
|
|
950
|
-
versions: ['>=1.6.0'],
|
|
951
|
-
}, (vitestPackage, frameworkVersion) => {
|
|
952
|
-
shimmer.wrap(vitestPackage, 'startTests', startTests => async function (testPaths) {
|
|
998
|
+
function getStartTestsWrapper (frameworkVersion) {
|
|
999
|
+
return startTests => async function (testPaths) {
|
|
953
1000
|
let testSuiteError = null
|
|
954
1001
|
if (!testSuiteFinishCh.hasSubscribers) {
|
|
955
1002
|
return startTests.apply(this, arguments)
|
|
956
1003
|
}
|
|
1004
|
+
const runner = arguments[1]
|
|
1005
|
+
// Vitest 3+ exposes the only awaited worker-shutdown boundary; older versions keep timer/before-exit behavior.
|
|
1006
|
+
if (logSubmissionFlushCh.hasSubscribers &&
|
|
1007
|
+
typeof runner?.onCleanupWorkerContext === 'function' &&
|
|
1008
|
+
!runnersWithLogSubmissionCleanup.has(runner)) {
|
|
1009
|
+
runnersWithLogSubmissionCleanup.add(runner)
|
|
1010
|
+
runner.onCleanupWorkerContext(() => getChannelPromise(logSubmissionFlushCh))
|
|
1011
|
+
}
|
|
957
1012
|
// From >=3.0.1, the first arguments changes from a string to an object containing the filepath
|
|
958
1013
|
const testSuiteAbsolutePath = testPaths[0]?.filepath || testPaths[0]
|
|
959
1014
|
const providedContext = getProvidedContext()
|
|
@@ -1155,7 +1210,20 @@ addHook({
|
|
|
1155
1210
|
})
|
|
1156
1211
|
|
|
1157
1212
|
return startTestsResponse
|
|
1158
|
-
}
|
|
1213
|
+
}
|
|
1214
|
+
}
|
|
1159
1215
|
|
|
1216
|
+
function wrapStartTests (vitestPackage, frameworkVersion) {
|
|
1217
|
+
const startTests = findExportByName(vitestPackage, 'startTests')
|
|
1218
|
+
if (startTests) {
|
|
1219
|
+
shimmer.wrap(vitestPackage, startTests.key, getStartTestsWrapper(frameworkVersion))
|
|
1220
|
+
}
|
|
1160
1221
|
return vitestPackage
|
|
1161
|
-
}
|
|
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)
|