diff --git a/MODULE.bazel b/MODULE.bazel index 07a841f68..513c895e9 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -757,12 +757,17 @@ dev_maven.install( "androidx.annotation:annotation:1.6.0", # https://github.com/bazel-contrib/rules_jvm_external/issues/1409 "com.squareup.okhttp3:okhttp:4.12.0", + # Versioned snapshot pinning support: https://github.com/bazel-contrib/rules_jvm_external/pull/1412 + "com.google.guava:guava:999.0.0-HEAD-jre-SNAPSHOT", + # Non-versioned snapshot pinning support: https://github.com/bazel-contrib/rules_jvm_external/pull/1412 + "org.seleniumhq.selenium:selenium-java:4.34.0-SNAPSHOT", ], generate_compat_repositories = True, lock_file = "//tests/custom_maven_install:regression_testing_gradle_install.json", repositories = [ "https://repo1.maven.org/maven2", "https://maven.google.com", + "https://oss.sonatype.org/content/repositories/snapshots", ], resolver = "gradle", ) diff --git a/private/extensions/download_pinned_deps.bzl b/private/extensions/download_pinned_deps.bzl index a64f321b0..f6951f234 100644 --- a/private/extensions/download_pinned_deps.bzl +++ b/private/extensions/download_pinned_deps.bzl @@ -37,7 +37,9 @@ def download_pinned_deps(mctx, artifacts, http_files, has_m2local): http_file( name = http_file_repository_name, - sha256 = artifact["sha256"], + # sha256 is optional: non-versioned snapshots may not have it + # See: https://github.com/bazel-contrib/rules_jvm_external/pull/1412 + sha256 = artifact.get("sha256"), urls = urls, # https://github.com/bazelbuild/rules_jvm_external/issues/1028 downloaded_file_path = "v1/%s" % artifact["file"] if artifact["file"] else artifact["file"], diff --git a/private/rules/coursier.bzl b/private/rules/coursier.bzl index b40329287..3ea11d9e2 100644 --- a/private/rules/coursier.bzl +++ b/private/rules/coursier.bzl @@ -597,7 +597,9 @@ def _pinned_coursier_fetch_impl(repository_ctx): http_files.extend([ " http_file(", " name = \"%s\"," % http_file_repository_name, - " sha256 = \"%s\"," % artifact["sha256"], + # sha256 is optional: non-versioned snapshots may not have it + # See: https://github.com/bazel-contrib/rules_jvm_external/pull/1412 + " sha256 = \"%s\"," % artifact.get("sha256", None), # repository_ctx should point to external/$repository_ctx.name # The http_file should point to external/$http_file_repository_name # File-path is relative defined from http_file traveling to repository_ctx. diff --git a/private/rules/v2_lock_file.bzl b/private/rules/v2_lock_file.bzl index 5e5eaa0cf..b775486d9 100644 --- a/private/rules/v2_lock_file.bzl +++ b/private/rules/v2_lock_file.bzl @@ -48,10 +48,11 @@ def _compute_lock_file_hash(lock_file_contents): return hash(repr(to_hash)) def _to_m2_path(unpacked): - path = "{group}/{artifact}/{version}/{artifact}-{version}".format( + path = "{group}/{artifact}/{version}/{artifact}-{version_revision}".format( artifact = unpacked["artifact"], group = unpacked["group"].replace(".", "/"), version = unpacked["version"], + version_revision = unpacked.get("version_revision") or unpacked["version"] ) classifier = unpacked.get("classifier", "jar") @@ -138,6 +139,7 @@ def _get_artifacts(lock_file_contents): "group": parts[0], "artifact": parts[1], "version": data["version"], + "version_revision": data.get("version_revision"), } if len(parts) > 2: root_unpacked["packaging"] = parts[2] diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/Coordinates.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/Coordinates.java index c1f6ff5ce..42eb4485d 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/Coordinates.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/Coordinates.java @@ -24,6 +24,7 @@ public class Coordinates implements Comparable { private final String groupId; private final String artifactId; private final String version; + private final String versionRevision; private final String classifier; private final String extension; @@ -59,16 +60,23 @@ public Coordinates(String coordinates) { classifier = "jar".equals(parts[3]) ? "" : parts[3]; version = parts[4]; } + this.versionRevision = null; } public Coordinates( String groupId, String artifactId, String extension, String classifier, String version) { + this(groupId, artifactId, extension, classifier, version, null); + } + + public Coordinates( + String groupId, String artifactId, String extension, String classifier, String version, String versionRevision) { this.groupId = Objects.requireNonNull(groupId, "Group ID"); this.artifactId = Objects.requireNonNull(artifactId, "Artifact ID"); this.extension = extension == null || extension.isEmpty() ? "jar" : extension; this.classifier = classifier == null || classifier.isEmpty() || "jar".equals(classifier) ? "" : classifier; this.version = version == null || version.isEmpty() ? "" : version; + this.versionRevision = versionRevision; } public String getGroupId() { @@ -88,21 +96,29 @@ public String getClassifier() { } public Coordinates setClassifier(String classifier) { - return new Coordinates(getGroupId(), getArtifactId(), getExtension(), classifier, getVersion()); + return new Coordinates(getGroupId(), getArtifactId(), getExtension(), classifier, getVersion(), getVersionRevision()); } public Coordinates setExtension(String extension) { - return new Coordinates(getGroupId(), getArtifactId(), extension, getClassifier(), getVersion()); + return new Coordinates(getGroupId(), getArtifactId(), extension, getClassifier(), getVersion(), getVersionRevision()); } public Coordinates setVersion(String version) { - return new Coordinates(getGroupId(), getArtifactId(), getExtension(), getClassifier(), version); + return new Coordinates(getGroupId(), getArtifactId(), getExtension(), getClassifier(), version, getVersionRevision()); + } + + public Coordinates setVersionRevision(String versionRevision) { + return new Coordinates(getGroupId(), getArtifactId(), getExtension(), getClassifier(), getVersion(), versionRevision); } public String getExtension() { return extension; } + public String getVersionRevision() { + return versionRevision; + } + public String asKey() { StringBuilder coords = new StringBuilder(); coords.append(groupId).append(":").append(artifactId); @@ -133,7 +149,7 @@ public String toRepoPath() { .append("/") .append(getArtifactId()) .append("-") - .append(getVersion()); + .append(isNullOrEmpty(getVersionRevision()) ? getVersion() : getVersionRevision()); String classifier = getClassifier(); @@ -178,6 +194,7 @@ public boolean equals(Object o) { return getGroupId().equals(that.getGroupId()) && getArtifactId().equals(that.getArtifactId()) && Objects.equals(getVersion(), that.getVersion()) + && Objects.equals(getVersionRevision(), that.getVersionRevision()) && Objects.equals(getClassifier(), that.getClassifier()) && Objects.equals(getExtension(), that.getExtension()); } @@ -185,7 +202,7 @@ && getArtifactId().equals(that.getArtifactId()) @Override public int hashCode() { return Objects.hash( - getGroupId(), getArtifactId(), getVersion(), getClassifier(), getExtension()); + getGroupId(), getArtifactId(), getVersion(), getVersionRevision(), getClassifier(), getExtension()); } private boolean isNullOrEmpty(String value) { diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java index 2417ae350..6e7ae5dbc 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java @@ -181,7 +181,8 @@ private ResolutionResult parseDependencies( gradleCoordinates.getArtifactId(), extension, classifier, - gradleCoordinates.getVersion()); + gradleCoordinates.getVersion(), + dependency.getVersionRevision()); addDependency(graph, coordinates, dependency, conflicts, requestedDeps, visited); // if there's a conflict and the conflicting version isn't one that's actually requested // then it's an actual conflict we want to report @@ -275,7 +276,8 @@ private void addDependency( childCoordinates.getArtifactId(), extension, childCoordinates.getClassifier(), - childCoordinates.getVersion()); + childCoordinates.getVersion(), + childInfo.getVersionRevision()); graph.addNode(child); graph.putEdge(parent, child); // if there's a conflict and the conflicting version isn't one that's actually requested diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java index ca537d5b5..91ecd48c5 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java @@ -34,6 +34,10 @@ public interface GradleResolvedDependency { void setVersion(String version); + String getVersionRevision(); + + void setVersionRevision(String versionRevision); + Set getRequestedVersions(); void addRequestedVersion(String requestedVersion); diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java index 95442856a..0764efe52 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java @@ -25,6 +25,7 @@ public class GradleResolvedDependencyImpl implements Serializable, GradleResolve private String group; private String name; private String version; + private String versionRevision; private Set requestedVersions; private boolean conflict; private List children; @@ -61,6 +62,14 @@ public void setVersion(String version) { this.version = version; } + public String getVersionRevision() { + return versionRevision; + } + + public void setVersionRevision(String versionRevision) { + this.versionRevision = versionRevision; + } + public Set getRequestedVersions() { return requestedVersions; } diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java index 10cda7cc7..792136208 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java @@ -268,7 +268,17 @@ private GradleResolvedDependency walkResolvedComponent( info = new GradleResolvedDependencyImpl(); info.setGroup(component.getModuleVersion().getGroup()); info.setName(component.getModuleVersion().getName()); - info.setVersion(component.getModuleVersion().getVersion()); + String version = component.getModuleVersion().getVersion(); + info.setVersion(version); + + // For snapshot dependencies, extract the timestamped version from the component ID + // Note: this is unsafe, is there a better way of obtaining the timestamp for an snapshot? I could not find any + if (component.getId().getClass().getName().contains("MavenUniqueSnapshotComponentIdentifier")) { + String snapshotVersion = version.substring(0, version.length() - "-SNAPSHOT".length()); + // Extract timestamped version from format: group:artifact:version:timestamp-buildnum + String snapshotId = snapshotVersion + "-" + component.getId().toString().split(":")[3]; + info.setVersionRevision(snapshotId); + } } info.addRequestedVersion(info.getVersion()); // add a new version that may have been requested diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java index a519d7207..89e66378c 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/lockfile/V2LockFile.java @@ -216,6 +216,11 @@ public Map render() { Map artifactValue = artifacts.computeIfAbsent(shortKey, k -> new TreeMap<>()); artifactValue.put("version", coords.getVersion()); + + // Add version_revision for reproducible builds when available + if (coords.getVersionRevision() != null && !coords.getVersionRevision().isEmpty()) { + artifactValue.put("version_revision", coords.getVersionRevision()); + } String classifier; if (coords.getClassifier() == null || coords.getClassifier().isEmpty()) { @@ -226,7 +231,15 @@ public Map render() { @SuppressWarnings("unchecked") Map shasums = (Map) artifactValue.computeIfAbsent("shasums", k -> new TreeMap<>()); - info.getSha256().ifPresent(sha -> shasums.put(classifier, sha)); + + // For non-versioned snapshots, their content can change any moment, so we need to avoid storing the SHA256 + boolean isNonVersionedSnapshot = coords.getVersion().endsWith("-SNAPSHOT") && coords.getVersionRevision() == null; + if (isNonVersionedSnapshot) { + // Classifier indicates the files associated to the dependency: store it even if the sha is not present + shasums.put(classifier, null); + } else { + info.getSha256().ifPresent(sha -> shasums.put(classifier, sha)); + } info.getRepositories() .forEach( diff --git a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/remote/Downloader.java b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/remote/Downloader.java index 746b8da33..cab4b37d7 100644 --- a/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/remote/Downloader.java +++ b/private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/remote/Downloader.java @@ -84,11 +84,7 @@ public DownloadResult download(Coordinates coords) { return result; } - // Are we dealing with a packaging dep? Download the `pom.xml` and check - String originalTarget = coords.toRepoPath(); - String pomName = String.format("%s-%s.pom", coords.getArtifactId(), coords.getVersion()); - String pom = Paths.get(originalTarget).getParent().resolve(pomName).toString(); - + String pom = coords.setExtension("pom").toRepoPath(); DownloadResult pomResult = performDownload(coords, pom); if (pomResult == null) { System.out.println( diff --git a/tests/bazel_run_tests.sh b/tests/bazel_run_tests.sh index 200c8ece2..a5982ec97 100755 --- a/tests/bazel_run_tests.sh +++ b/tests/bazel_run_tests.sh @@ -339,6 +339,18 @@ function test_gradle_metadata_is_resolved_correctly_for_jvm_artifact { expect_log "@regression_testing_gradle//:com_squareup_okio_okio_jvm" } +function test_gradle_resolves_correctly_a_versioned_snapshot { + bazel query @regression_testing_gradle//:com_google_guava_guava >> "$TEST_LOG" 2>&1 + + expect_log "@regression_testing_gradle//:com_google_guava_guava" +} + +function test_gradle_resolves_correctly_a_non_versioned_snapshot { + bazel query @regression_testing_gradle//:org_seleniumhq_selenium_selenium_java >> "$TEST_LOG" 2>&1 + + expect_log "@regression_testing_gradle//:org_seleniumhq_selenium_selenium_java" +} + function test_gradle_versions_catalog { # When source files are requested and we have a bug, this will fail bazel build @from_files//:all @@ -367,8 +379,10 @@ TESTS=( "test_transitive_dependency_with_type_of_pom" "test_when_both_pom_and_jar_artifact_are_available_jar_artifact_is_present" "test_when_both_pom_and_jar_artifact_are_dependencies_jar_artifact_is_present" - # "test_gradle_metadata_is_resolved_correctly_for_aar_artifact" + "test_gradle_metadata_is_resolved_correctly_for_aar_artifact" "test_gradle_metadata_is_resolved_correctly_for_jvm_artifact" + "test_gradle_resolves_correctly_a_versioned_snapshot" + "test_gradle_resolves_correctly_a_non_versioned_snapshot" "test_gradle_versions_catalog" ) diff --git a/tests/custom_maven_install/regression_testing_gradle_install.json b/tests/custom_maven_install/regression_testing_gradle_install.json index 44abf4a8e..8fba61163 100644 --- a/tests/custom_maven_install/regression_testing_gradle_install.json +++ b/tests/custom_maven_install/regression_testing_gradle_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": -1648244252, - "__RESOLVED_ARTIFACTS_HASH": -1940227237, + "__INPUT_ARTIFACTS_HASH": -1318542541, + "__RESOLVED_ARTIFACTS_HASH": -470190870, "artifacts": { "androidx.activity:activity-ktx:aar": { "shasums": { @@ -345,11 +345,42 @@ }, "version": "1.1.1" }, + "com.google.auto.service:auto-service-annotations": { + "shasums": { + "jar": "16a76dd00a2650568447f5d6e3a9e2c809d9a42367d56b45215cfb89731f4d24" + }, + "version": "1.1.1" + }, + "com.google.errorprone:error_prone_annotations": { + "shasums": { + "jar": "77440e270b0bc9a249903c5a076c36a722c4886ca4f42675f2903a1c53ed61a5" + }, + "version": "2.36.0" + }, + "com.google.guava:failureaccess": { + "shasums": { + "jar": "cbfc3906b19b8f55dd7cfd6dfe0aa4532e834250d7f080bd8d211a3e246b59cb" + }, + "version": "1.0.3" + }, + "com.google.guava:guava": { + "shasums": { + "jar": "79abe7953803b20d1deb5f36283d4d640c7aacbdb1ddd7601aae369b1633e903" + }, + "version": "999.0.0-HEAD-jre-SNAPSHOT", + "version_revision": "999.0.0-HEAD-jre-20250623.150948-114" + }, "com.google.guava:listenablefuture": { "shasums": { - "jar": "e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069" + "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99" + }, + "version": "9999.0-empty-to-avoid-conflict-with-guava" + }, + "com.google.j2objc:j2objc-annotations": { + "shasums": { + "jar": "88241573467ddca44ffd4d74aa04c2bbfd11bf7c17e0c342c94c9de7a70a7c64" }, - "version": "1.0" + "version": "3.0.0" }, "com.squareup.okhttp3:okhttp": { "shasums": { @@ -369,6 +400,78 @@ }, "version": "3.6.0" }, + "io.opentelemetry:opentelemetry-api": { + "shasums": { + "jar": "2eaaac5f268b135f0e11dd30637d71df5751a0bb7ed6268659be57104d63122b" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-context": { + "shasums": { + "jar": "76f9dfe1a6f74d5081e07bde1f7cb9a06879d317ec0ae0f61dd8fb2be9afad4f" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-exporter-logging": { + "shasums": { + "jar": "2af293cac564d42a98539266255ae4153ec256399f72c88fbef609b3c450e7ce" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk": { + "shasums": { + "jar": "cd55d564a39d04ce57e3899044c3a4a3fe5d5fb59599386a9cb462afa61dcd1f" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-common": { + "shasums": { + "jar": "0a8159a986ba2e84a1e6779adc313951b8c9948506ac3b42649a921c2a367602" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure": { + "shasums": { + "jar": "0c9abb505aef76b5bbed0554339e974b2c367ffd42389ba73c6caf7b63579591" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi": { + "shasums": { + "jar": "5c05e10cbf7a1d86ac21f93586572a3939e3a998b83c2b227b6fa8d5ad5c4923" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-logs": { + "shasums": { + "jar": "3c4913fcffea584b49c0b66cc0ed9ff363145c5d0dddd27587ba5e849c6c5ecc" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-metrics": { + "shasums": { + "jar": "a86121f1478a1d4f3fd290471b83afcd4d9dc5ec66952bc679ce40ace60440f5" + }, + "version": "1.50.0" + }, + "io.opentelemetry:opentelemetry-sdk-trace": { + "shasums": { + "jar": "985c5ce74d6d5544812bdcf0efda0eb00f783c0bdcac72be5be20eb96926dfc3" + }, + "version": "1.50.0" + }, + "net.bytebuddy:byte-buddy": { + "shasums": { + "jar": "71568c9f8396677219f650268fbf6493ded484edcdbdf2dae6129ca5be81e8db" + }, + "version": "1.17.5" + }, + "org.apache.commons:commons-exec": { + "shasums": { + "jar": "f51cf8bee467efe2be76e46fc08078d96afa280a794283364291beda892a67ef" + }, + "version": "1.4.0" + }, "org.jetbrains.kotlin:kotlin-stdlib": { "shasums": { "jar": "55e989c512b80907799f854309f3bc7782c5b3d13932442d0379d5c472711504" @@ -422,6 +525,114 @@ "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478" }, "version": "13.0" + }, + "org.jspecify:jspecify": { + "shasums": { + "jar": "1fad6e6be7557781e4d33729d49ae1cdc8fdda6fe477bb0cc68ce351eafdfbab" + }, + "version": "1.0.0" + }, + "org.seleniumhq.selenium:selenium-api": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-chrome-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-chromium-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-devtools-v135": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-devtools-v136": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-devtools-v137": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-edge-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-firefox-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-http": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-ie-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-java": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-json": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-manager": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-os": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-remote-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-safari-driver": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" + }, + "org.seleniumhq.selenium:selenium-support": { + "shasums": { + "jar": null + }, + "version": "4.34.0-SNAPSHOT" } }, "conflict_resolution": { @@ -668,8 +879,7 @@ "org.jetbrains.kotlinx:kotlinx-coroutines-core" ], "androidx.concurrent:concurrent-futures": [ - "androidx.annotation:annotation", - "com.google.guava:listenablefuture" + "androidx.annotation:annotation" ], "androidx.core:core-ktx:aar": [ "androidx.annotation:annotation", @@ -820,8 +1030,7 @@ "androidx.profileinstaller:profileinstaller:aar": [ "androidx.annotation:annotation", "androidx.concurrent:concurrent-futures", - "androidx.startup:startup-runtime:aar", - "com.google.guava:listenablefuture" + "androidx.startup:startup-runtime:aar" ], "androidx.savedstate:savedstate-ktx:aar": [ "androidx.savedstate:savedstate:aar", @@ -845,6 +1054,13 @@ "androidx.annotation:annotation", "androidx.collection:collection" ], + "com.google.guava:guava": [ + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", + "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", + "org.jspecify:jspecify" + ], "com.squareup.okhttp3:okhttp": [ "com.squareup.okio:okio", "org.jetbrains.kotlin:kotlin-stdlib-jdk8" @@ -856,6 +1072,42 @@ "org.jetbrains.kotlin:kotlin-stdlib-common", "org.jetbrains.kotlin:kotlin-stdlib-jdk8" ], + "io.opentelemetry:opentelemetry-api": [ + "io.opentelemetry:opentelemetry-context" + ], + "io.opentelemetry:opentelemetry-exporter-logging": [ + "io.opentelemetry:opentelemetry-sdk", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi" + ], + "io.opentelemetry:opentelemetry-sdk": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-sdk-common", + "io.opentelemetry:opentelemetry-sdk-logs", + "io.opentelemetry:opentelemetry-sdk-metrics", + "io.opentelemetry:opentelemetry-sdk-trace" + ], + "io.opentelemetry:opentelemetry-sdk-common": [ + "io.opentelemetry:opentelemetry-api" + ], + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure": [ + "io.opentelemetry:opentelemetry-sdk", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi" + ], + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi": [ + "io.opentelemetry:opentelemetry-sdk" + ], + "io.opentelemetry:opentelemetry-sdk-logs": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-sdk-common" + ], + "io.opentelemetry:opentelemetry-sdk-metrics": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-sdk-common" + ], + "io.opentelemetry:opentelemetry-sdk-trace": [ + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-sdk-common" + ], "org.jetbrains.kotlin:kotlin-stdlib": [ "org.jetbrains.kotlin:kotlin-stdlib-common", "org.jetbrains:annotations" @@ -882,6 +1134,122 @@ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [ "org.jetbrains.kotlin:kotlin-stdlib-common", "org.jetbrains.kotlinx:kotlinx-coroutines-bom" + ], + "org.seleniumhq.selenium:selenium-api": [ + "org.jspecify:jspecify" + ], + "org.seleniumhq.selenium:selenium-chrome-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-chromium-driver", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-chromium-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-devtools-v135": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-devtools-v136": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-devtools-v137": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-edge-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-chromium-driver", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-firefox-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-http", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-http": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json" + ], + "org.seleniumhq.selenium:selenium-ie-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-java": [ + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-chrome-driver", + "org.seleniumhq.selenium:selenium-devtools-v135", + "org.seleniumhq.selenium:selenium-devtools-v136", + "org.seleniumhq.selenium:selenium-devtools-v137", + "org.seleniumhq.selenium:selenium-edge-driver", + "org.seleniumhq.selenium:selenium-firefox-driver", + "org.seleniumhq.selenium:selenium-ie-driver", + "org.seleniumhq.selenium:selenium-remote-driver", + "org.seleniumhq.selenium:selenium-safari-driver", + "org.seleniumhq.selenium:selenium-support" + ], + "org.seleniumhq.selenium:selenium-json": [ + "org.seleniumhq.selenium:selenium-api" + ], + "org.seleniumhq.selenium:selenium-manager": [ + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-os" + ], + "org.seleniumhq.selenium:selenium-os": [ + "org.apache.commons:commons-exec", + "org.seleniumhq.selenium:selenium-api" + ], + "org.seleniumhq.selenium:selenium-remote-driver": [ + "com.google.auto.service:auto-service-annotations", + "com.google.guava:guava", + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-context", + "io.opentelemetry:opentelemetry-exporter-logging", + "io.opentelemetry:opentelemetry-sdk", + "io.opentelemetry:opentelemetry-sdk-common", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi", + "io.opentelemetry:opentelemetry-sdk-trace", + "net.bytebuddy:byte-buddy", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-http", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-os" + ], + "org.seleniumhq.selenium:selenium-safari-driver": [ + "com.google.auto.service:auto-service-annotations", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-remote-driver" + ], + "org.seleniumhq.selenium:selenium-support": [ + "com.google.auto.service:auto-service-annotations", + "com.google.guava:guava", + "net.bytebuddy:byte-buddy", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-remote-driver" ] }, "packages": { @@ -901,8 +1269,38 @@ "androidx.lifecycle:lifecycle-common": [ "androidx.lifecycle" ], - "com.google.guava:listenablefuture": [ - "com.google.common.util.concurrent" + "com.google.auto.service:auto-service-annotations": [ + "com.google.auto.service" + ], + "com.google.errorprone:error_prone_annotations": [ + "com.google.errorprone.annotations", + "com.google.errorprone.annotations.concurrent" + ], + "com.google.guava:failureaccess": [ + "com.google.common.util.concurrent.internal" + ], + "com.google.guava:guava": [ + "com.google.common.annotations", + "com.google.common.base", + "com.google.common.base.internal", + "com.google.common.cache", + "com.google.common.collect", + "com.google.common.escape", + "com.google.common.eventbus", + "com.google.common.graph", + "com.google.common.hash", + "com.google.common.html", + "com.google.common.io", + "com.google.common.math", + "com.google.common.net", + "com.google.common.primitives", + "com.google.common.reflect", + "com.google.common.util.concurrent", + "com.google.common.xml", + "com.google.thirdparty.publicsuffix" + ], + "com.google.j2objc:j2objc-annotations": [ + "com.google.j2objc.annotations" ], "com.squareup.okhttp3:okhttp": [ "okhttp3", @@ -927,6 +1325,132 @@ "okio", "okio.internal" ], + "io.opentelemetry:opentelemetry-api": [ + "io.opentelemetry.api", + "io.opentelemetry.api.baggage", + "io.opentelemetry.api.baggage.propagation", + "io.opentelemetry.api.common", + "io.opentelemetry.api.internal", + "io.opentelemetry.api.logs", + "io.opentelemetry.api.metrics", + "io.opentelemetry.api.trace", + "io.opentelemetry.api.trace.propagation", + "io.opentelemetry.api.trace.propagation.internal" + ], + "io.opentelemetry:opentelemetry-context": [ + "io.opentelemetry.context", + "io.opentelemetry.context.internal.shaded", + "io.opentelemetry.context.propagation", + "io.opentelemetry.context.propagation.internal" + ], + "io.opentelemetry:opentelemetry-exporter-logging": [ + "io.opentelemetry.exporter.logging", + "io.opentelemetry.exporter.logging.internal" + ], + "io.opentelemetry:opentelemetry-sdk": [ + "io.opentelemetry.sdk" + ], + "io.opentelemetry:opentelemetry-sdk-common": [ + "io.opentelemetry.sdk.common", + "io.opentelemetry.sdk.common.export", + "io.opentelemetry.sdk.common.internal", + "io.opentelemetry.sdk.internal", + "io.opentelemetry.sdk.resources" + ], + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure": [ + "io.opentelemetry.sdk.autoconfigure", + "io.opentelemetry.sdk.autoconfigure.internal" + ], + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi": [ + "io.opentelemetry.sdk.autoconfigure.spi", + "io.opentelemetry.sdk.autoconfigure.spi.internal", + "io.opentelemetry.sdk.autoconfigure.spi.logs", + "io.opentelemetry.sdk.autoconfigure.spi.metrics", + "io.opentelemetry.sdk.autoconfigure.spi.traces" + ], + "io.opentelemetry:opentelemetry-sdk-logs": [ + "io.opentelemetry.sdk.logs", + "io.opentelemetry.sdk.logs.data", + "io.opentelemetry.sdk.logs.data.internal", + "io.opentelemetry.sdk.logs.export", + "io.opentelemetry.sdk.logs.internal" + ], + "io.opentelemetry:opentelemetry-sdk-metrics": [ + "io.opentelemetry.sdk.metrics", + "io.opentelemetry.sdk.metrics.data", + "io.opentelemetry.sdk.metrics.export", + "io.opentelemetry.sdk.metrics.internal", + "io.opentelemetry.sdk.metrics.internal.aggregator", + "io.opentelemetry.sdk.metrics.internal.concurrent", + "io.opentelemetry.sdk.metrics.internal.data", + "io.opentelemetry.sdk.metrics.internal.debug", + "io.opentelemetry.sdk.metrics.internal.descriptor", + "io.opentelemetry.sdk.metrics.internal.exemplar", + "io.opentelemetry.sdk.metrics.internal.export", + "io.opentelemetry.sdk.metrics.internal.state", + "io.opentelemetry.sdk.metrics.internal.view" + ], + "io.opentelemetry:opentelemetry-sdk-trace": [ + "io.opentelemetry.internal.shaded.jctools.counters", + "io.opentelemetry.internal.shaded.jctools.maps", + "io.opentelemetry.internal.shaded.jctools.queues", + "io.opentelemetry.internal.shaded.jctools.queues.atomic", + "io.opentelemetry.internal.shaded.jctools.queues.atomic.unpadded", + "io.opentelemetry.internal.shaded.jctools.queues.unpadded", + "io.opentelemetry.internal.shaded.jctools.util", + "io.opentelemetry.sdk.trace", + "io.opentelemetry.sdk.trace.data", + "io.opentelemetry.sdk.trace.export", + "io.opentelemetry.sdk.trace.internal", + "io.opentelemetry.sdk.trace.samplers" + ], + "net.bytebuddy:byte-buddy": [ + "net.bytebuddy", + "net.bytebuddy.agent.builder", + "net.bytebuddy.asm", + "net.bytebuddy.build", + "net.bytebuddy.description", + "net.bytebuddy.description.annotation", + "net.bytebuddy.description.enumeration", + "net.bytebuddy.description.field", + "net.bytebuddy.description.method", + "net.bytebuddy.description.modifier", + "net.bytebuddy.description.type", + "net.bytebuddy.dynamic", + "net.bytebuddy.dynamic.loading", + "net.bytebuddy.dynamic.scaffold", + "net.bytebuddy.dynamic.scaffold.inline", + "net.bytebuddy.dynamic.scaffold.subclass", + "net.bytebuddy.implementation", + "net.bytebuddy.implementation.attribute", + "net.bytebuddy.implementation.auxiliary", + "net.bytebuddy.implementation.bind", + "net.bytebuddy.implementation.bind.annotation", + "net.bytebuddy.implementation.bytecode", + "net.bytebuddy.implementation.bytecode.assign", + "net.bytebuddy.implementation.bytecode.assign.primitive", + "net.bytebuddy.implementation.bytecode.assign.reference", + "net.bytebuddy.implementation.bytecode.collection", + "net.bytebuddy.implementation.bytecode.constant", + "net.bytebuddy.implementation.bytecode.member", + "net.bytebuddy.jar.asm", + "net.bytebuddy.jar.asm.commons", + "net.bytebuddy.jar.asm.signature", + "net.bytebuddy.jar.asmjdkbridge", + "net.bytebuddy.matcher", + "net.bytebuddy.pool", + "net.bytebuddy.utility", + "net.bytebuddy.utility.dispatcher", + "net.bytebuddy.utility.nullability", + "net.bytebuddy.utility.privilege", + "net.bytebuddy.utility.visitor" + ], + "org.apache.commons:commons-exec": [ + "org.apache.commons.exec", + "org.apache.commons.exec.environment", + "org.apache.commons.exec.launcher", + "org.apache.commons.exec.util" + ], "org.jetbrains.kotlin:kotlin-stdlib": [ "kotlin", "kotlin.annotation", @@ -991,6 +1515,412 @@ "org.jetbrains:annotations": [ "org.intellij.lang.annotations", "org.jetbrains.annotations" + ], + "org.jspecify:jspecify": [ + "org.jspecify.annotations" + ], + "org.seleniumhq.selenium:selenium-api": [ + "org.openqa.selenium", + "org.openqa.selenium.federatedcredentialmanagement", + "org.openqa.selenium.html5", + "org.openqa.selenium.interactions", + "org.openqa.selenium.internal", + "org.openqa.selenium.logging", + "org.openqa.selenium.logging.profiler", + "org.openqa.selenium.net", + "org.openqa.selenium.print", + "org.openqa.selenium.virtualauthenticator" + ], + "org.seleniumhq.selenium:selenium-chrome-driver": [ + "org.openqa.selenium.chrome" + ], + "org.seleniumhq.selenium:selenium-chromium-driver": [ + "org.openqa.selenium.chromium" + ], + "org.seleniumhq.selenium:selenium-devtools-v135": [ + "org.openqa.selenium.devtools.v135", + "org.openqa.selenium.devtools.v135.accessibility", + "org.openqa.selenium.devtools.v135.accessibility.model", + "org.openqa.selenium.devtools.v135.animation", + "org.openqa.selenium.devtools.v135.animation.model", + "org.openqa.selenium.devtools.v135.audits", + "org.openqa.selenium.devtools.v135.audits.model", + "org.openqa.selenium.devtools.v135.autofill", + "org.openqa.selenium.devtools.v135.autofill.model", + "org.openqa.selenium.devtools.v135.backgroundservice", + "org.openqa.selenium.devtools.v135.backgroundservice.model", + "org.openqa.selenium.devtools.v135.bluetoothemulation", + "org.openqa.selenium.devtools.v135.bluetoothemulation.model", + "org.openqa.selenium.devtools.v135.browser", + "org.openqa.selenium.devtools.v135.browser.model", + "org.openqa.selenium.devtools.v135.cachestorage", + "org.openqa.selenium.devtools.v135.cachestorage.model", + "org.openqa.selenium.devtools.v135.cast", + "org.openqa.selenium.devtools.v135.cast.model", + "org.openqa.selenium.devtools.v135.console", + "org.openqa.selenium.devtools.v135.console.model", + "org.openqa.selenium.devtools.v135.css", + "org.openqa.selenium.devtools.v135.css.model", + "org.openqa.selenium.devtools.v135.debugger", + "org.openqa.selenium.devtools.v135.debugger.model", + "org.openqa.selenium.devtools.v135.deviceaccess", + "org.openqa.selenium.devtools.v135.deviceaccess.model", + "org.openqa.selenium.devtools.v135.deviceorientation", + "org.openqa.selenium.devtools.v135.dom", + "org.openqa.selenium.devtools.v135.dom.model", + "org.openqa.selenium.devtools.v135.domdebugger", + "org.openqa.selenium.devtools.v135.domdebugger.model", + "org.openqa.selenium.devtools.v135.domsnapshot", + "org.openqa.selenium.devtools.v135.domsnapshot.model", + "org.openqa.selenium.devtools.v135.domstorage", + "org.openqa.selenium.devtools.v135.domstorage.model", + "org.openqa.selenium.devtools.v135.emulation", + "org.openqa.selenium.devtools.v135.emulation.model", + "org.openqa.selenium.devtools.v135.eventbreakpoints", + "org.openqa.selenium.devtools.v135.extensions", + "org.openqa.selenium.devtools.v135.extensions.model", + "org.openqa.selenium.devtools.v135.fedcm", + "org.openqa.selenium.devtools.v135.fedcm.model", + "org.openqa.selenium.devtools.v135.fetch", + "org.openqa.selenium.devtools.v135.fetch.model", + "org.openqa.selenium.devtools.v135.filesystem", + "org.openqa.selenium.devtools.v135.filesystem.model", + "org.openqa.selenium.devtools.v135.headlessexperimental", + "org.openqa.selenium.devtools.v135.headlessexperimental.model", + "org.openqa.selenium.devtools.v135.heapprofiler", + "org.openqa.selenium.devtools.v135.heapprofiler.model", + "org.openqa.selenium.devtools.v135.indexeddb", + "org.openqa.selenium.devtools.v135.indexeddb.model", + "org.openqa.selenium.devtools.v135.input", + "org.openqa.selenium.devtools.v135.input.model", + "org.openqa.selenium.devtools.v135.inspector", + "org.openqa.selenium.devtools.v135.io", + "org.openqa.selenium.devtools.v135.io.model", + "org.openqa.selenium.devtools.v135.layertree", + "org.openqa.selenium.devtools.v135.layertree.model", + "org.openqa.selenium.devtools.v135.log", + "org.openqa.selenium.devtools.v135.log.model", + "org.openqa.selenium.devtools.v135.media", + "org.openqa.selenium.devtools.v135.media.model", + "org.openqa.selenium.devtools.v135.memory", + "org.openqa.selenium.devtools.v135.memory.model", + "org.openqa.selenium.devtools.v135.network", + "org.openqa.selenium.devtools.v135.network.model", + "org.openqa.selenium.devtools.v135.overlay", + "org.openqa.selenium.devtools.v135.overlay.model", + "org.openqa.selenium.devtools.v135.page", + "org.openqa.selenium.devtools.v135.page.model", + "org.openqa.selenium.devtools.v135.performance", + "org.openqa.selenium.devtools.v135.performance.model", + "org.openqa.selenium.devtools.v135.performancetimeline", + "org.openqa.selenium.devtools.v135.performancetimeline.model", + "org.openqa.selenium.devtools.v135.preload", + "org.openqa.selenium.devtools.v135.preload.model", + "org.openqa.selenium.devtools.v135.profiler", + "org.openqa.selenium.devtools.v135.profiler.model", + "org.openqa.selenium.devtools.v135.pwa", + "org.openqa.selenium.devtools.v135.pwa.model", + "org.openqa.selenium.devtools.v135.runtime", + "org.openqa.selenium.devtools.v135.runtime.model", + "org.openqa.selenium.devtools.v135.schema", + "org.openqa.selenium.devtools.v135.schema.model", + "org.openqa.selenium.devtools.v135.security", + "org.openqa.selenium.devtools.v135.security.model", + "org.openqa.selenium.devtools.v135.serviceworker", + "org.openqa.selenium.devtools.v135.serviceworker.model", + "org.openqa.selenium.devtools.v135.storage", + "org.openqa.selenium.devtools.v135.storage.model", + "org.openqa.selenium.devtools.v135.systeminfo", + "org.openqa.selenium.devtools.v135.systeminfo.model", + "org.openqa.selenium.devtools.v135.target", + "org.openqa.selenium.devtools.v135.target.model", + "org.openqa.selenium.devtools.v135.tethering", + "org.openqa.selenium.devtools.v135.tethering.model", + "org.openqa.selenium.devtools.v135.tracing", + "org.openqa.selenium.devtools.v135.tracing.model", + "org.openqa.selenium.devtools.v135.webaudio", + "org.openqa.selenium.devtools.v135.webaudio.model", + "org.openqa.selenium.devtools.v135.webauthn", + "org.openqa.selenium.devtools.v135.webauthn.model" + ], + "org.seleniumhq.selenium:selenium-devtools-v136": [ + "org.openqa.selenium.devtools.v136", + "org.openqa.selenium.devtools.v136.accessibility", + "org.openqa.selenium.devtools.v136.accessibility.model", + "org.openqa.selenium.devtools.v136.animation", + "org.openqa.selenium.devtools.v136.animation.model", + "org.openqa.selenium.devtools.v136.audits", + "org.openqa.selenium.devtools.v136.audits.model", + "org.openqa.selenium.devtools.v136.autofill", + "org.openqa.selenium.devtools.v136.autofill.model", + "org.openqa.selenium.devtools.v136.backgroundservice", + "org.openqa.selenium.devtools.v136.backgroundservice.model", + "org.openqa.selenium.devtools.v136.bluetoothemulation", + "org.openqa.selenium.devtools.v136.bluetoothemulation.model", + "org.openqa.selenium.devtools.v136.browser", + "org.openqa.selenium.devtools.v136.browser.model", + "org.openqa.selenium.devtools.v136.cachestorage", + "org.openqa.selenium.devtools.v136.cachestorage.model", + "org.openqa.selenium.devtools.v136.cast", + "org.openqa.selenium.devtools.v136.cast.model", + "org.openqa.selenium.devtools.v136.console", + "org.openqa.selenium.devtools.v136.console.model", + "org.openqa.selenium.devtools.v136.css", + "org.openqa.selenium.devtools.v136.css.model", + "org.openqa.selenium.devtools.v136.debugger", + "org.openqa.selenium.devtools.v136.debugger.model", + "org.openqa.selenium.devtools.v136.deviceaccess", + "org.openqa.selenium.devtools.v136.deviceaccess.model", + "org.openqa.selenium.devtools.v136.deviceorientation", + "org.openqa.selenium.devtools.v136.dom", + "org.openqa.selenium.devtools.v136.dom.model", + "org.openqa.selenium.devtools.v136.domdebugger", + "org.openqa.selenium.devtools.v136.domdebugger.model", + "org.openqa.selenium.devtools.v136.domsnapshot", + "org.openqa.selenium.devtools.v136.domsnapshot.model", + "org.openqa.selenium.devtools.v136.domstorage", + "org.openqa.selenium.devtools.v136.domstorage.model", + "org.openqa.selenium.devtools.v136.emulation", + "org.openqa.selenium.devtools.v136.emulation.model", + "org.openqa.selenium.devtools.v136.eventbreakpoints", + "org.openqa.selenium.devtools.v136.extensions", + "org.openqa.selenium.devtools.v136.extensions.model", + "org.openqa.selenium.devtools.v136.fedcm", + "org.openqa.selenium.devtools.v136.fedcm.model", + "org.openqa.selenium.devtools.v136.fetch", + "org.openqa.selenium.devtools.v136.fetch.model", + "org.openqa.selenium.devtools.v136.filesystem", + "org.openqa.selenium.devtools.v136.filesystem.model", + "org.openqa.selenium.devtools.v136.headlessexperimental", + "org.openqa.selenium.devtools.v136.headlessexperimental.model", + "org.openqa.selenium.devtools.v136.heapprofiler", + "org.openqa.selenium.devtools.v136.heapprofiler.model", + "org.openqa.selenium.devtools.v136.indexeddb", + "org.openqa.selenium.devtools.v136.indexeddb.model", + "org.openqa.selenium.devtools.v136.input", + "org.openqa.selenium.devtools.v136.input.model", + "org.openqa.selenium.devtools.v136.inspector", + "org.openqa.selenium.devtools.v136.io", + "org.openqa.selenium.devtools.v136.io.model", + "org.openqa.selenium.devtools.v136.layertree", + "org.openqa.selenium.devtools.v136.layertree.model", + "org.openqa.selenium.devtools.v136.log", + "org.openqa.selenium.devtools.v136.log.model", + "org.openqa.selenium.devtools.v136.media", + "org.openqa.selenium.devtools.v136.media.model", + "org.openqa.selenium.devtools.v136.memory", + "org.openqa.selenium.devtools.v136.memory.model", + "org.openqa.selenium.devtools.v136.network", + "org.openqa.selenium.devtools.v136.network.model", + "org.openqa.selenium.devtools.v136.overlay", + "org.openqa.selenium.devtools.v136.overlay.model", + "org.openqa.selenium.devtools.v136.page", + "org.openqa.selenium.devtools.v136.page.model", + "org.openqa.selenium.devtools.v136.performance", + "org.openqa.selenium.devtools.v136.performance.model", + "org.openqa.selenium.devtools.v136.performancetimeline", + "org.openqa.selenium.devtools.v136.performancetimeline.model", + "org.openqa.selenium.devtools.v136.preload", + "org.openqa.selenium.devtools.v136.preload.model", + "org.openqa.selenium.devtools.v136.profiler", + "org.openqa.selenium.devtools.v136.profiler.model", + "org.openqa.selenium.devtools.v136.pwa", + "org.openqa.selenium.devtools.v136.pwa.model", + "org.openqa.selenium.devtools.v136.runtime", + "org.openqa.selenium.devtools.v136.runtime.model", + "org.openqa.selenium.devtools.v136.schema", + "org.openqa.selenium.devtools.v136.schema.model", + "org.openqa.selenium.devtools.v136.security", + "org.openqa.selenium.devtools.v136.security.model", + "org.openqa.selenium.devtools.v136.serviceworker", + "org.openqa.selenium.devtools.v136.serviceworker.model", + "org.openqa.selenium.devtools.v136.storage", + "org.openqa.selenium.devtools.v136.storage.model", + "org.openqa.selenium.devtools.v136.systeminfo", + "org.openqa.selenium.devtools.v136.systeminfo.model", + "org.openqa.selenium.devtools.v136.target", + "org.openqa.selenium.devtools.v136.target.model", + "org.openqa.selenium.devtools.v136.tethering", + "org.openqa.selenium.devtools.v136.tethering.model", + "org.openqa.selenium.devtools.v136.tracing", + "org.openqa.selenium.devtools.v136.tracing.model", + "org.openqa.selenium.devtools.v136.webaudio", + "org.openqa.selenium.devtools.v136.webaudio.model", + "org.openqa.selenium.devtools.v136.webauthn", + "org.openqa.selenium.devtools.v136.webauthn.model" + ], + "org.seleniumhq.selenium:selenium-devtools-v137": [ + "org.openqa.selenium.devtools.v137", + "org.openqa.selenium.devtools.v137.accessibility", + "org.openqa.selenium.devtools.v137.accessibility.model", + "org.openqa.selenium.devtools.v137.animation", + "org.openqa.selenium.devtools.v137.animation.model", + "org.openqa.selenium.devtools.v137.audits", + "org.openqa.selenium.devtools.v137.audits.model", + "org.openqa.selenium.devtools.v137.autofill", + "org.openqa.selenium.devtools.v137.autofill.model", + "org.openqa.selenium.devtools.v137.backgroundservice", + "org.openqa.selenium.devtools.v137.backgroundservice.model", + "org.openqa.selenium.devtools.v137.bluetoothemulation", + "org.openqa.selenium.devtools.v137.bluetoothemulation.model", + "org.openqa.selenium.devtools.v137.browser", + "org.openqa.selenium.devtools.v137.browser.model", + "org.openqa.selenium.devtools.v137.cachestorage", + "org.openqa.selenium.devtools.v137.cachestorage.model", + "org.openqa.selenium.devtools.v137.cast", + "org.openqa.selenium.devtools.v137.cast.model", + "org.openqa.selenium.devtools.v137.console", + "org.openqa.selenium.devtools.v137.console.model", + "org.openqa.selenium.devtools.v137.css", + "org.openqa.selenium.devtools.v137.css.model", + "org.openqa.selenium.devtools.v137.debugger", + "org.openqa.selenium.devtools.v137.debugger.model", + "org.openqa.selenium.devtools.v137.deviceaccess", + "org.openqa.selenium.devtools.v137.deviceaccess.model", + "org.openqa.selenium.devtools.v137.deviceorientation", + "org.openqa.selenium.devtools.v137.dom", + "org.openqa.selenium.devtools.v137.dom.model", + "org.openqa.selenium.devtools.v137.domdebugger", + "org.openqa.selenium.devtools.v137.domdebugger.model", + "org.openqa.selenium.devtools.v137.domsnapshot", + "org.openqa.selenium.devtools.v137.domsnapshot.model", + "org.openqa.selenium.devtools.v137.domstorage", + "org.openqa.selenium.devtools.v137.domstorage.model", + "org.openqa.selenium.devtools.v137.emulation", + "org.openqa.selenium.devtools.v137.emulation.model", + "org.openqa.selenium.devtools.v137.eventbreakpoints", + "org.openqa.selenium.devtools.v137.extensions", + "org.openqa.selenium.devtools.v137.extensions.model", + "org.openqa.selenium.devtools.v137.fedcm", + "org.openqa.selenium.devtools.v137.fedcm.model", + "org.openqa.selenium.devtools.v137.fetch", + "org.openqa.selenium.devtools.v137.fetch.model", + "org.openqa.selenium.devtools.v137.filesystem", + "org.openqa.selenium.devtools.v137.filesystem.model", + "org.openqa.selenium.devtools.v137.headlessexperimental", + "org.openqa.selenium.devtools.v137.headlessexperimental.model", + "org.openqa.selenium.devtools.v137.heapprofiler", + "org.openqa.selenium.devtools.v137.heapprofiler.model", + "org.openqa.selenium.devtools.v137.indexeddb", + "org.openqa.selenium.devtools.v137.indexeddb.model", + "org.openqa.selenium.devtools.v137.input", + "org.openqa.selenium.devtools.v137.input.model", + "org.openqa.selenium.devtools.v137.inspector", + "org.openqa.selenium.devtools.v137.io", + "org.openqa.selenium.devtools.v137.io.model", + "org.openqa.selenium.devtools.v137.layertree", + "org.openqa.selenium.devtools.v137.layertree.model", + "org.openqa.selenium.devtools.v137.log", + "org.openqa.selenium.devtools.v137.log.model", + "org.openqa.selenium.devtools.v137.media", + "org.openqa.selenium.devtools.v137.media.model", + "org.openqa.selenium.devtools.v137.memory", + "org.openqa.selenium.devtools.v137.memory.model", + "org.openqa.selenium.devtools.v137.network", + "org.openqa.selenium.devtools.v137.network.model", + "org.openqa.selenium.devtools.v137.overlay", + "org.openqa.selenium.devtools.v137.overlay.model", + "org.openqa.selenium.devtools.v137.page", + "org.openqa.selenium.devtools.v137.page.model", + "org.openqa.selenium.devtools.v137.performance", + "org.openqa.selenium.devtools.v137.performance.model", + "org.openqa.selenium.devtools.v137.performancetimeline", + "org.openqa.selenium.devtools.v137.performancetimeline.model", + "org.openqa.selenium.devtools.v137.preload", + "org.openqa.selenium.devtools.v137.preload.model", + "org.openqa.selenium.devtools.v137.profiler", + "org.openqa.selenium.devtools.v137.profiler.model", + "org.openqa.selenium.devtools.v137.pwa", + "org.openqa.selenium.devtools.v137.pwa.model", + "org.openqa.selenium.devtools.v137.runtime", + "org.openqa.selenium.devtools.v137.runtime.model", + "org.openqa.selenium.devtools.v137.schema", + "org.openqa.selenium.devtools.v137.schema.model", + "org.openqa.selenium.devtools.v137.security", + "org.openqa.selenium.devtools.v137.security.model", + "org.openqa.selenium.devtools.v137.serviceworker", + "org.openqa.selenium.devtools.v137.serviceworker.model", + "org.openqa.selenium.devtools.v137.storage", + "org.openqa.selenium.devtools.v137.storage.model", + "org.openqa.selenium.devtools.v137.systeminfo", + "org.openqa.selenium.devtools.v137.systeminfo.model", + "org.openqa.selenium.devtools.v137.target", + "org.openqa.selenium.devtools.v137.target.model", + "org.openqa.selenium.devtools.v137.tethering", + "org.openqa.selenium.devtools.v137.tethering.model", + "org.openqa.selenium.devtools.v137.tracing", + "org.openqa.selenium.devtools.v137.tracing.model", + "org.openqa.selenium.devtools.v137.webaudio", + "org.openqa.selenium.devtools.v137.webaudio.model", + "org.openqa.selenium.devtools.v137.webauthn", + "org.openqa.selenium.devtools.v137.webauthn.model" + ], + "org.seleniumhq.selenium:selenium-edge-driver": [ + "org.openqa.selenium.edge" + ], + "org.seleniumhq.selenium:selenium-firefox-driver": [ + "org.openqa.selenium.firefox" + ], + "org.seleniumhq.selenium:selenium-http": [ + "org.openqa.selenium.remote.http", + "org.openqa.selenium.remote.http.jdk" + ], + "org.seleniumhq.selenium:selenium-ie-driver": [ + "org.openqa.selenium.ie" + ], + "org.seleniumhq.selenium:selenium-json": [ + "org.openqa.selenium.json" + ], + "org.seleniumhq.selenium:selenium-manager": [ + "org.openqa.selenium.manager" + ], + "org.seleniumhq.selenium:selenium-os": [ + "org.openqa.selenium.io", + "org.openqa.selenium.os" + ], + "org.seleniumhq.selenium:selenium-remote-driver": [ + "org.openqa.selenium.bidi", + "org.openqa.selenium.bidi.browser", + "org.openqa.selenium.bidi.browsingcontext", + "org.openqa.selenium.bidi.log", + "org.openqa.selenium.bidi.module", + "org.openqa.selenium.bidi.network", + "org.openqa.selenium.bidi.permissions", + "org.openqa.selenium.bidi.script", + "org.openqa.selenium.bidi.storage", + "org.openqa.selenium.concurrent", + "org.openqa.selenium.devtools", + "org.openqa.selenium.devtools.events", + "org.openqa.selenium.devtools.idealized", + "org.openqa.selenium.devtools.idealized.browser.model", + "org.openqa.selenium.devtools.idealized.log", + "org.openqa.selenium.devtools.idealized.log.model", + "org.openqa.selenium.devtools.idealized.runtime.model", + "org.openqa.selenium.devtools.idealized.target", + "org.openqa.selenium.devtools.idealized.target.model", + "org.openqa.selenium.devtools.noop", + "org.openqa.selenium.remote", + "org.openqa.selenium.remote.codec", + "org.openqa.selenium.remote.codec.w3c", + "org.openqa.selenium.remote.html5", + "org.openqa.selenium.remote.internal", + "org.openqa.selenium.remote.locators", + "org.openqa.selenium.remote.service", + "org.openqa.selenium.remote.tracing", + "org.openqa.selenium.remote.tracing.empty", + "org.openqa.selenium.remote.tracing.opentelemetry", + "org.openqa.selenium.support.decorators" + ], + "org.seleniumhq.selenium:selenium-safari-driver": [ + "org.openqa.selenium.safari" + ], + "org.seleniumhq.selenium:selenium-support": [ + "org.openqa.selenium.support", + "org.openqa.selenium.support.events", + "org.openqa.selenium.support.locators", + "org.openqa.selenium.support.pagefactory", + "org.openqa.selenium.support.pagefactory.internal", + "org.openqa.selenium.support.ui" ] }, "repositories": { @@ -1053,11 +1983,47 @@ "androidx.tracing:tracing:aar", "androidx.versionedparcelable:versionedparcelable:aar" ], + "https://oss.sonatype.org/content/repositories/snapshots/": [ + "com.google.guava:guava", + "org.seleniumhq.selenium:selenium-api", + "org.seleniumhq.selenium:selenium-chrome-driver", + "org.seleniumhq.selenium:selenium-chromium-driver", + "org.seleniumhq.selenium:selenium-devtools-v135", + "org.seleniumhq.selenium:selenium-devtools-v136", + "org.seleniumhq.selenium:selenium-devtools-v137", + "org.seleniumhq.selenium:selenium-edge-driver", + "org.seleniumhq.selenium:selenium-firefox-driver", + "org.seleniumhq.selenium:selenium-http", + "org.seleniumhq.selenium:selenium-ie-driver", + "org.seleniumhq.selenium:selenium-java", + "org.seleniumhq.selenium:selenium-json", + "org.seleniumhq.selenium:selenium-manager", + "org.seleniumhq.selenium:selenium-os", + "org.seleniumhq.selenium:selenium-remote-driver", + "org.seleniumhq.selenium:selenium-safari-driver", + "org.seleniumhq.selenium:selenium-support" + ], "https://repo1.maven.org/maven2/": [ + "com.google.auto.service:auto-service-annotations", + "com.google.errorprone:error_prone_annotations", + "com.google.guava:failureaccess", "com.google.guava:listenablefuture", + "com.google.j2objc:j2objc-annotations", "com.squareup.okhttp3:okhttp", "com.squareup.okio:okio", "com.squareup.okio:okio-jvm", + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-context", + "io.opentelemetry:opentelemetry-exporter-logging", + "io.opentelemetry:opentelemetry-sdk", + "io.opentelemetry:opentelemetry-sdk-common", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi", + "io.opentelemetry:opentelemetry-sdk-logs", + "io.opentelemetry:opentelemetry-sdk-metrics", + "io.opentelemetry:opentelemetry-sdk-trace", + "net.bytebuddy:byte-buddy", + "org.apache.commons:commons-exec", "org.jetbrains.kotlin:kotlin-stdlib", "org.jetbrains.kotlin:kotlin-stdlib-common", "org.jetbrains.kotlin:kotlin-stdlib-jdk7", @@ -1066,10 +2032,35 @@ "org.jetbrains.kotlinx:kotlinx-coroutines-bom", "org.jetbrains.kotlinx:kotlinx-coroutines-core", "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", - "org.jetbrains:annotations" + "org.jetbrains:annotations", + "org.jspecify:jspecify" ] }, "services": { + "io.opentelemetry:opentelemetry-exporter-logging": { + "io.opentelemetry.sdk.autoconfigure.spi.internal.ComponentProvider": [ + "io.opentelemetry.exporter.logging.internal.ConsoleLogRecordExporterComponentProvider", + "io.opentelemetry.exporter.logging.internal.ConsoleMetricExporterComponentProvider", + "io.opentelemetry.exporter.logging.internal.ConsoleSpanExporterComponentProvider" + ], + "io.opentelemetry.sdk.autoconfigure.spi.logs.ConfigurableLogRecordExporterProvider": [ + "io.opentelemetry.exporter.logging.internal.ConsoleLogRecordExporterProvider", + "io.opentelemetry.exporter.logging.internal.LoggingLogRecordExporterProvider" + ], + "io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider": [ + "io.opentelemetry.exporter.logging.internal.ConsoleMetricExporterProvider", + "io.opentelemetry.exporter.logging.internal.LoggingMetricExporterProvider" + ], + "io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider": [ + "io.opentelemetry.exporter.logging.internal.ConsoleSpanExporterProvider", + "io.opentelemetry.exporter.logging.internal.LoggingSpanExporterProvider" + ] + }, + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure": { + "io.opentelemetry.sdk.autoconfigure.spi.ResourceProvider": [ + "io.opentelemetry.sdk.autoconfigure.EnvironmentResourceProvider" + ] + }, "org.jetbrains.kotlinx:kotlinx-coroutines-android": { "kotlinx.coroutines.CoroutineExceptionHandler": [ "kotlinx.coroutines.android.AndroidExceptionPreHandler" @@ -1077,6 +2068,125 @@ "kotlinx.coroutines.internal.MainDispatcherFactory": [ "kotlinx.coroutines.android.AndroidDispatcherFactory" ] + }, + "org.seleniumhq.selenium:selenium-chrome-driver": { + "org.openqa.selenium.WebDriverInfo": [ + "org.openqa.selenium.chrome.ChromeDriverInfo" + ], + "org.openqa.selenium.remote.AdditionalHttpCommands": [ + "org.openqa.selenium.chrome.AddHasCasting", + "org.openqa.selenium.chrome.AddHasCdp" + ], + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.chrome.AddHasCasting", + "org.openqa.selenium.chrome.AddHasCdp" + ], + "org.openqa.selenium.remote.service.DriverService$Builder": [ + "org.openqa.selenium.chrome.ChromeDriverService$Builder" + ] + }, + "org.seleniumhq.selenium:selenium-chromium-driver": { + "org.openqa.selenium.remote.AdditionalHttpCommands": [ + "org.openqa.selenium.chromium.AddHasLaunchApp", + "org.openqa.selenium.chromium.AddHasNetworkConditions", + "org.openqa.selenium.chromium.AddHasPermissions" + ], + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.chromium.AddHasLaunchApp", + "org.openqa.selenium.chromium.AddHasNetworkConditions", + "org.openqa.selenium.chromium.AddHasPermissions" + ] + }, + "org.seleniumhq.selenium:selenium-devtools-v135": { + "org.openqa.selenium.devtools.CdpInfo": [ + "org.openqa.selenium.devtools.v135.v135CdpInfo" + ] + }, + "org.seleniumhq.selenium:selenium-devtools-v136": { + "org.openqa.selenium.devtools.CdpInfo": [ + "org.openqa.selenium.devtools.v136.v136CdpInfo" + ] + }, + "org.seleniumhq.selenium:selenium-devtools-v137": { + "org.openqa.selenium.devtools.CdpInfo": [ + "org.openqa.selenium.devtools.v137.v137CdpInfo" + ] + }, + "org.seleniumhq.selenium:selenium-edge-driver": { + "org.openqa.selenium.WebDriverInfo": [ + "org.openqa.selenium.edge.EdgeDriverInfo" + ], + "org.openqa.selenium.remote.AdditionalHttpCommands": [ + "org.openqa.selenium.edge.AddHasCasting", + "org.openqa.selenium.edge.AddHasCdp" + ], + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.edge.AddHasCasting", + "org.openqa.selenium.edge.AddHasCdp" + ], + "org.openqa.selenium.remote.service.DriverService$Builder": [ + "org.openqa.selenium.edge.EdgeDriverService$Builder" + ] + }, + "org.seleniumhq.selenium:selenium-firefox-driver": { + "org.openqa.selenium.WebDriverInfo": [ + "org.openqa.selenium.firefox.GeckoDriverInfo" + ], + "org.openqa.selenium.remote.AdditionalHttpCommands": [ + "org.openqa.selenium.firefox.AddHasContext", + "org.openqa.selenium.firefox.AddHasExtensions", + "org.openqa.selenium.firefox.AddHasFullPageScreenshot" + ], + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.firefox.AddHasContext", + "org.openqa.selenium.firefox.AddHasExtensions", + "org.openqa.selenium.firefox.AddHasFullPageScreenshot" + ], + "org.openqa.selenium.remote.service.DriverService$Builder": [ + "org.openqa.selenium.firefox.GeckoDriverService$Builder" + ] + }, + "org.seleniumhq.selenium:selenium-http": { + "org.openqa.selenium.remote.http.HttpClient$Factory": [ + "org.openqa.selenium.remote.http.jdk.JdkHttpClient$Factory" + ] + }, + "org.seleniumhq.selenium:selenium-ie-driver": { + "org.openqa.selenium.WebDriverInfo": [ + "org.openqa.selenium.ie.InternetExplorerDriverInfo" + ], + "org.openqa.selenium.remote.service.DriverService$Builder": [ + "org.openqa.selenium.ie.InternetExplorerDriverService$Builder" + ] + }, + "org.seleniumhq.selenium:selenium-remote-driver": { + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.bidi.BiDiProvider", + "org.openqa.selenium.devtools.DevToolsProvider" + ] + }, + "org.seleniumhq.selenium:selenium-safari-driver": { + "org.openqa.selenium.WebDriverInfo": [ + "org.openqa.selenium.safari.SafariDriverInfo", + "org.openqa.selenium.safari.SafariTechPreviewDriverInfo" + ], + "org.openqa.selenium.remote.AdditionalHttpCommands": [ + "org.openqa.selenium.safari.AddHasDebugger", + "org.openqa.selenium.safari.AddHasPermissions" + ], + "org.openqa.selenium.remote.AugmenterProvider": [ + "org.openqa.selenium.safari.AddHasDebugger", + "org.openqa.selenium.safari.AddHasPermissions" + ], + "org.openqa.selenium.remote.service.DriverService$Builder": [ + "org.openqa.selenium.safari.SafariDriverService$Builder", + "org.openqa.selenium.safari.SafariTechPreviewDriverService$Builder" + ] + }, + "org.seleniumhq.selenium:selenium-support": { + "org.openqa.selenium.remote.locators.CustomLocator": [ + "org.openqa.selenium.support.locators.RelativeLocatorServerSide" + ] } }, "skipped": [