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.
- package/LICENSE-3rdparty.csv +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- 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
|
|
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]
|
|
112
|
+
acc[requireFile].push(...tests)
|
|
109
113
|
} else {
|
|
110
|
-
|
|
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
|
|
140
|
+
} catch {
|
|
136
141
|
try {
|
|
137
142
|
return playwrightRunner._loader.fullConfig()
|
|
138
|
-
} catch
|
|
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
|
-
|
|
241
|
-
channelToPublishTo.publish({ onDone: resolve })
|
|
242
|
-
})
|
|
245
|
+
channelToPublishTo.publish({ onDone: resolve, ...params })
|
|
243
246
|
})
|
|
244
247
|
}
|
|
245
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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.
|
|
420
|
+
this._ddAllTests = testGroups.flatMap(g => g.tests)
|
|
417
421
|
}
|
|
418
|
-
remainingTestsByFile = getTestsBySuiteFromTestGroups(
|
|
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
|
|
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
|
|
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
|
-
|
|
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 (
|
|
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 (
|
|
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
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
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: [
|
|
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: [
|
|
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
|
-
|
|
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
|
|
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
|
|
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:
|
|
48
|
+
this._url = { host: parsed.hostname, port: Number(parsed.port) || 6379 }
|
|
49
49
|
}
|
|
50
|
-
} catch
|
|
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
|
|
134
|
-
const cb = callbackResource.bind(args
|
|
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
|
|
23
|
+
return function (path, ...middlewares) {
|
|
24
|
+
const wrappedMiddlewares = middlewares.map(wrapFn)
|
|
25
25
|
|
|
26
|
-
return method.apply(this, [path]
|
|
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,
|
|
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
|
|
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 (
|
|
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
|
|
54
|
+
return result
|
|
59
55
|
}).catch(function (error) {
|
|
60
56
|
errorChannel.publish({ req, error })
|
|
61
57
|
nextChannel.publish({ req })
|