From b0851bfea9c3c8dfbe741d512ac4092264766dfa Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Mon, 3 Jun 2024 16:57:36 +0200 Subject: [PATCH 001/176] [rust] Display driver path in error trace when driver is unavailable --- rust/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/src/main.rs b/rust/src/main.rs index f47b8c83854c6..4347cf9900a94 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -283,7 +283,7 @@ fn log_driver_and_browser_path( if driver_path.exists() { log.info(format!("{}{}", DRIVER_PATH, driver_path.display())); } else { - log.error(format!("Driver unavailable: {}", DRIVER_PATH)); + log.error(format!("Driver unavailable: {}", driver_path.display())); flush_and_exit(UNAVAILABLE, log, None); } if !browser_path.is_empty() { From 2ad5abdabc5697a0d484c6af16aa39b38ef6e8f4 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Mon, 3 Jun 2024 16:58:47 +0200 Subject: [PATCH 002/176] [rust] Include cache paths with non-ascii characters in test (#14066) --- rust/tests/cache_tests.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/rust/tests/cache_tests.rs b/rust/tests/cache_tests.rs index 66dbc5293d13b..11b46d33b3f84 100644 --- a/rust/tests/cache_tests.rs +++ b/rust/tests/cache_tests.rs @@ -17,20 +17,23 @@ use crate::common::get_driver_path; use assert_cmd::Command; +use rstest::rstest; use std::fs; use std::path::Path; mod common; -#[test] -fn cache_path_test() { +#[rstest] +#[case("../tmp")] +#[case("../áèîö")] +#[case("../テスト")] +fn cache_path_test(#[case] tmp_cache_folder_name: String) { let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); - let tmp_cache_folder_name = "../tmp"; cmd.args([ "--browser", "chrome", "--cache-path", - tmp_cache_folder_name, + &tmp_cache_folder_name, "--output", "json", ]) @@ -42,7 +45,7 @@ fn cache_path_test() { println!("*** Custom cache path: {}", driver_path); assert!(!driver_path.contains(r"cache\selenium")); - let tmp_cache_path = Path::new(tmp_cache_folder_name); + let tmp_cache_path = Path::new(&tmp_cache_folder_name); fs::remove_dir_all(tmp_cache_path).unwrap(); assert!(!tmp_cache_path.exists()); } From 53ed43c3c7fa388e29726370fc47d3b8ce6fc7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Mon, 3 Jun 2024 17:41:46 +0200 Subject: [PATCH 003/176] [java] let TracedCommandExecutor delegate NeedsLocalLogs calls --- .../org/openqa/selenium/remote/RemoteWebDriver.java | 6 +++--- .../openqa/selenium/remote/TracedCommandExecutor.java | 11 ++++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/java/src/org/openqa/selenium/remote/RemoteWebDriver.java b/java/src/org/openqa/selenium/remote/RemoteWebDriver.java index 9e518401b8dab..3462231c7f17b 100644 --- a/java/src/org/openqa/selenium/remote/RemoteWebDriver.java +++ b/java/src/org/openqa/selenium/remote/RemoteWebDriver.java @@ -206,11 +206,11 @@ private Capabilities init(Capabilities capabilities) { converter = new JsonToWebElementConverter(this); executeMethod = new RemoteExecuteMethod(this); - Set logTypesToInclude = Set.of(); + Set logTypesToIgnore = Set.of(); - LocalLogs performanceLogger = LocalLogs.getStoringLoggerInstance(logTypesToInclude); + LocalLogs performanceLogger = LocalLogs.getStoringLoggerInstance(logTypesToIgnore); LocalLogs clientLogs = - LocalLogs.getHandlerBasedLoggerInstance(LoggingHandler.getInstance(), logTypesToInclude); + LocalLogs.getHandlerBasedLoggerInstance(LoggingHandler.getInstance(), logTypesToIgnore); localLogs = LocalLogs.getCombinedLogsHolder(clientLogs, performanceLogger); remoteLogs = new RemoteLogs(executeMethod, localLogs); diff --git a/java/src/org/openqa/selenium/remote/TracedCommandExecutor.java b/java/src/org/openqa/selenium/remote/TracedCommandExecutor.java index d09c41715b9f6..a8d0b220ea678 100644 --- a/java/src/org/openqa/selenium/remote/TracedCommandExecutor.java +++ b/java/src/org/openqa/selenium/remote/TracedCommandExecutor.java @@ -20,10 +20,12 @@ import java.io.IOException; import java.util.Map; import java.util.Objects; +import org.openqa.selenium.logging.LocalLogs; +import org.openqa.selenium.logging.NeedsLocalLogs; import org.openqa.selenium.remote.tracing.Span; import org.openqa.selenium.remote.tracing.Tracer; -public class TracedCommandExecutor implements CommandExecutor { +public class TracedCommandExecutor implements CommandExecutor, NeedsLocalLogs { private final CommandExecutor delegate; private final Tracer tracer; @@ -51,4 +53,11 @@ public Response execute(Command command) throws IOException { return delegate.execute(command); } } + + @Override + public void setLocalLogs(LocalLogs logs) { + if (delegate instanceof NeedsLocalLogs) { + ((NeedsLocalLogs) delegate).setLocalLogs(logs); + } + } } From cab1dd1e7065614ae903e3ebf42b861b6fc8a80f Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Mon, 3 Jun 2024 23:10:25 -0500 Subject: [PATCH 004/176] [rb] manage bidi instance on the bridge not the driver (#14071) * [rb] manage bidi instance on the bridge not the driver * restore null safety checks --- rb/lib/selenium/webdriver/common/driver.rb | 9 ++------- .../webdriver/common/driver_extensions/has_bidi.rb | 2 +- rb/lib/selenium/webdriver/remote/bridge.rb | 11 ++++++++++- rb/sig/lib/selenium/webdriver/common/driver.rbs | 1 - rb/sig/lib/selenium/webdriver/remote/bridge.rbs | 1 + 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/rb/lib/selenium/webdriver/common/driver.rb b/rb/lib/selenium/webdriver/common/driver.rb index 6a816cb67b301..0a02916c5afe2 100644 --- a/rb/lib/selenium/webdriver/common/driver.rb +++ b/rb/lib/selenium/webdriver/common/driver.rb @@ -70,10 +70,9 @@ def for(browser, opts = {}) def initialize(bridge: nil, listener: nil, **opts) @devtools = nil - @bidi = nil bridge ||= create_bridge(**opts) - add_extensions(bridge.browser) @bridge = listener ? Support::EventFiringBridge.new(bridge, listener) : bridge + add_extensions(@bridge.browser) end def inspect @@ -174,7 +173,6 @@ def quit ensure @service_manager&.stop @devtools&.close - @bidi&.close end # @@ -182,10 +180,7 @@ def quit # def close - # If no top-level browsing contexts are open after calling close, - # it indicates that the WebDriver session is closed. - # If the WebDriver session is closed, the BiDi session also needs to be closed. - bridge.close.tap { |handles| @bidi&.close if handles&.empty? } + bridge&.close end # diff --git a/rb/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb b/rb/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb index b0e435d4b6665..859e44737e705 100644 --- a/rb/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb +++ b/rb/lib/selenium/webdriver/common/driver_extensions/has_bidi.rb @@ -28,7 +28,7 @@ module HasBiDi # def bidi - @bidi ||= Selenium::WebDriver::BiDi.new(url: capabilities[:web_socket_url]) + @bridge.bidi end end # HasBiDi end # DriverExtensions diff --git a/rb/lib/selenium/webdriver/remote/bridge.rb b/rb/lib/selenium/webdriver/remote/bridge.rb index 773d3ef37d778..eb0b748b3702c 100644 --- a/rb/lib/selenium/webdriver/remote/bridge.rb +++ b/rb/lib/selenium/webdriver/remote/bridge.rb @@ -213,10 +213,12 @@ def quit http.close rescue *QUIT_ERRORS nil + ensure + @bidi&.close end def close - execute :close_window + execute(:close_window).tap { |handles| @bidi&.close if handles.empty? } end def refresh @@ -602,6 +604,13 @@ def user_verified(verified, authenticator_id) execute :set_user_verified, {authenticatorId: authenticator_id}, {isUserVerified: verified} end + def bidi + msg = 'this operation requires enabling BiDi by setting #web_socket_url to true in options class' + raise(WebDriver::Error::WebDriverError, msg) unless capabilities.web_socket_url + + @bidi ||= Selenium::WebDriver::BiDi.new(url: capabilities[:web_socket_url]) + end + def command_list COMMANDS end diff --git a/rb/sig/lib/selenium/webdriver/common/driver.rbs b/rb/sig/lib/selenium/webdriver/common/driver.rbs index 67f2a9017680f..102ad2c526dd2 100644 --- a/rb/sig/lib/selenium/webdriver/common/driver.rbs +++ b/rb/sig/lib/selenium/webdriver/common/driver.rbs @@ -5,7 +5,6 @@ module Selenium include TakesScreenshot - @bidi: untyped @devtools: untyped @navigate: untyped diff --git a/rb/sig/lib/selenium/webdriver/remote/bridge.rbs b/rb/sig/lib/selenium/webdriver/remote/bridge.rbs index a303ec5316006..32aaa1a21b8ef 100644 --- a/rb/sig/lib/selenium/webdriver/remote/bridge.rbs +++ b/rb/sig/lib/selenium/webdriver/remote/bridge.rbs @@ -5,6 +5,7 @@ module Selenium include _CommandList include _Features + @bidi: WebDriver::BiDi @http: untyped @file_detector: untyped From 635f7e22f566d63ecf68c18607a17623cfc2dd11 Mon Sep 17 00:00:00 2001 From: Alexander Millin Date: Tue, 4 Jun 2024 15:35:16 +0300 Subject: [PATCH 005/176] Fix EOFError when calling the Remote WebDriver download_file method (#14031) --- py/selenium/webdriver/remote/webdriver.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index c1fa5110898b7..ccb6b0b5e1830 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -20,6 +20,7 @@ import copy import os import pkgutil +import tempfile import types import typing import warnings @@ -1147,12 +1148,13 @@ def download_file(self, file_name: str, target_directory: str) -> None: contents = self.execute(Command.DOWNLOAD_FILE, {"name": file_name})["value"]["contents"] - target_file = os.path.join(target_directory, file_name) - with open(target_file, "wb") as file: - file.write(base64.b64decode(contents)) + with tempfile.TemporaryDirectory() as tmp_dir: + zip_file = os.path.join(tmp_dir, file_name + ".zip") + with open(zip_file, "wb") as file: + file.write(base64.b64decode(contents)) - with zipfile.ZipFile(target_file, "r") as zip_ref: - zip_ref.extractall(target_directory) + with zipfile.ZipFile(zip_file, "r") as zip_ref: + zip_ref.extractall(target_directory) def delete_downloadable_files(self) -> None: """Deletes all downloadable files.""" From e67210469f33d52ba6385f56cc230df1c5e51560 Mon Sep 17 00:00:00 2001 From: Agustin Pequeno <33221555+aguspe@users.noreply.github.com> Date: Tue, 4 Jun 2024 18:56:56 +0200 Subject: [PATCH 006/176] [rb] Expand RBS typing support by replacing untypes with precise typing (#13709) * Update atoms.rb signature types * Start adding bidi types * Extended types of devtools and edge * Added firefox and safari types and removed unused signature * Update chrome features with type and remove Safari error * Update server and remove unused signature * Expand Server type signature * expanding type support on options * Expand options types * add extra options support * Expand options support --------- Co-authored-by: aguspe --- rb/sig/lib/selenium/server.rbs | 24 ++++++------- rb/sig/lib/selenium/webdriver/atoms.rbs | 4 +-- rb/sig/lib/selenium/webdriver/bidi.rbs | 14 ++++---- .../selenium/webdriver/chrome/features.rbs | 6 ++-- .../lib/selenium/webdriver/common/options.rbs | 35 ++++++++++--------- .../webdriver/common/target_locator.rbs | 4 +-- rb/sig/lib/selenium/webdriver/devtools.rbs | 4 +-- rb/sig/lib/selenium/webdriver/edge.rbs | 6 ++-- rb/sig/lib/selenium/webdriver/firefox.rbs | 6 ++-- rb/sig/lib/selenium/webdriver/safari.rbs | 15 ++++---- rb/sig/lib/selenium/webdriver/support.rbs | 0 rb/sig/lib/selenium_webdriver.rbs | 0 12 files changed, 59 insertions(+), 59 deletions(-) delete mode 100644 rb/sig/lib/selenium/webdriver/support.rbs delete mode 100644 rb/sig/lib/selenium_webdriver.rbs diff --git a/rb/sig/lib/selenium/server.rbs b/rb/sig/lib/selenium/server.rbs index 4ae361debc94b..10020d85851f0 100644 --- a/rb/sig/lib/selenium/server.rbs +++ b/rb/sig/lib/selenium/server.rbs @@ -4,36 +4,36 @@ module Selenium self.@available_assets: untyped - @jar: untyped + @jar: String - @host: untyped + @host: String - @role: untyped + @role: String - @port: untyped + @port: Integer - @timeout: untyped + @timeout: Integer - @background: untyped + @background: bool - @additional_args: untyped + @additional_args: Integer | bool | Array[untyped] - @log: untyped + @log: String | bool @log_file: untyped @process: untyped - @socket: untyped + @socket: WebDriver::SocketPoller class Error < StandardError end CL_RESET: untyped - def self.get: (?Symbol required_version, ?Hash[untyped, untyped] opts) -> untyped + def self.get: (Symbol | String required_version, ?Hash[untyped, untyped] opts) -> Server - def self.download: (?Symbol required_version) -> untyped + def self.download: (Symbol | String required_version) -> String def self.latest: () -> untyped @@ -55,7 +55,7 @@ module Selenium attr_accessor log: untyped - def initialize: (untyped jar, ?Hash[untyped, untyped] opts) -> void + def initialize: (String jar, ?Hash[String | Symbol, Integer | bool] opts) -> void def start: () -> untyped diff --git a/rb/sig/lib/selenium/webdriver/atoms.rbs b/rb/sig/lib/selenium/webdriver/atoms.rbs index eacbd40132411..e825969f918c5 100644 --- a/rb/sig/lib/selenium/webdriver/atoms.rbs +++ b/rb/sig/lib/selenium/webdriver/atoms.rbs @@ -4,13 +4,13 @@ module Selenium include _Bridge include _ExecuteScript - def atom_script: (untyped) -> untyped + def atom_script: (Symbol) -> String private def read_atom: (Symbol function) -> String - def execute_atom: (Symbol function_name, *untyped arguments) -> untyped + def execute_atom: (Symbol function_name, [Element | String | Symbol] arguments) -> [Element | Integer | Float | bool | nil | String | Array[untyped]] end end end diff --git a/rb/sig/lib/selenium/webdriver/bidi.rbs b/rb/sig/lib/selenium/webdriver/bidi.rbs index e37040f4d9061..109b658bca24b 100644 --- a/rb/sig/lib/selenium/webdriver/bidi.rbs +++ b/rb/sig/lib/selenium/webdriver/bidi.rbs @@ -1,21 +1,21 @@ module Selenium module WebDriver class BiDi - @ws: untyped + @ws: WebSocketConnection - @session: untyped + @session: Session - def initialize: (url: untyped) -> void + def initialize: (url: String) -> void - def close: () -> untyped + def close: () -> nil - def callbacks: () -> untyped + def callbacks: () -> Hash[untyped, untyped] - def session: () -> untyped + def session: () -> Session def send_cmd: (untyped method, **untyped params) -> untyped - def error_message: (untyped message) -> ::String + def error_message: (Hash[String,String] message) -> String end end end diff --git a/rb/sig/lib/selenium/webdriver/chrome/features.rbs b/rb/sig/lib/selenium/webdriver/chrome/features.rbs index a4523edc32d4b..ab3e9c85707e4 100644 --- a/rb/sig/lib/selenium/webdriver/chrome/features.rbs +++ b/rb/sig/lib/selenium/webdriver/chrome/features.rbs @@ -4,10 +4,10 @@ module Selenium module Features include WebDriver::Chromium::Features - CHROME_COMMANDS: untyped - COMMANDS: Array[Symbol | String] + CHROME_COMMANDS: Hash[Symbol, Array[Symbol | String]] + COMMANDS: Hash[Symbol, Array[Symbol | String]] - def command_list: -> untyped + def command_list: -> Hash[Symbol, Array[Symbol | String]] def commands: (Symbol command) -> Array[Symbol | String] end diff --git a/rb/sig/lib/selenium/webdriver/common/options.rbs b/rb/sig/lib/selenium/webdriver/common/options.rbs index ccb419b4f7902..adf1b2bb473c7 100644 --- a/rb/sig/lib/selenium/webdriver/common/options.rbs +++ b/rb/sig/lib/selenium/webdriver/common/options.rbs @@ -1,43 +1,43 @@ module Selenium module WebDriver class Options - @options: untyped + @options: Hash[String | Symbol, String | Numeric | bool?] W3C_OPTIONS: Array[Symbol] GRID_OPTIONS: Array[Symbol] - BROWSER: untyped + BROWSER: Symbol KEY: untyped - CAPABILITIES: Hash[Symbol, String] + CAPABILITIES: Hash[String | Symbol, String | Numeric | bool?] - attr_reader self.driver_path: untyped + attr_reader self.driver_path: String - def self.chrome: (**untyped opts) -> untyped + def self.chrome: (**String | Symbol | Integer | bool opts) -> Chrome::Options - def self.firefox: (**untyped opts) -> untyped + def self.firefox: (**String | Symbol | Integer | bool opts) -> Firefox::Options - def self.ie: (**untyped opts) -> untyped + def self.ie: (**String | Symbol | Integer | bool opts) -> IE::Options alias self.internet_explorer self.ie - def self.edge: (**untyped opts) -> untyped + def self.edge: (**String | Symbol | Integer | bool opts) -> Edge::Options alias self.microsoftedge self.edge - def self.safari: (**untyped opts) -> untyped + def self.safari: (**String | Symbol | Integer | bool opts) -> Safari::Options def self.set_capabilities: () -> untyped - attr_accessor options: untyped + attr_accessor options: Hash[String | Symbol, String | Numeric | bool?] - def initialize: (**untyped opts) -> void + def initialize: (Hash[String | Symbol, String | Numeric | bool] opts) -> void - def add_option: (untyped name, ?untyped? value) -> untyped + def add_option: (String | Symbol name, String | Numeric | bool? value) -> (String | Numeric | bool)? - def ==: (untyped other) -> (false | untyped) + def ==: (untyped other) -> bool alias eql? == @@ -53,13 +53,14 @@ module Selenium def camelize?: (untyped _key) -> true - def generate_as_json: (untyped value, ?camelize_keys: bool) -> untyped + def generate_as_json: (Array[untyped] | Hash[untyped, untyped] | String | Symbol value, ?camelize_keys: bool) + -> (Array[untyped] | Hash[untyped, untyped] | String | Symbol) - def process_json_hash: (untyped value, untyped camelize_keys) -> untyped + def process_json_hash: (Hash[untyped, untyped] value, bool camelize_keys) -> Hash[untyped, untyped] - def convert_json_key: (untyped key, ?camelize: bool) -> untyped + def convert_json_key: (String | Symbol key, camelize: bool) -> String - def camel_case: (untyped str) -> untyped + def camel_case: (String str) -> String end end end diff --git a/rb/sig/lib/selenium/webdriver/common/target_locator.rbs b/rb/sig/lib/selenium/webdriver/common/target_locator.rbs index 609989c2ca3d8..2e650495a40ff 100644 --- a/rb/sig/lib/selenium/webdriver/common/target_locator.rbs +++ b/rb/sig/lib/selenium/webdriver/common/target_locator.rbs @@ -7,9 +7,9 @@ module Selenium def parent_frame: () -> void - def new_window: (?::Symbol `type`) { (untyped) -> untyped } -> untyped + def new_window: (Symbol type) { (untyped) -> untyped } -> untyped - def window: (untyped id) ?{ () -> untyped } -> untyped + def window: (Integer id) ?{ () -> untyped } -> untyped def active_element: () -> Element diff --git a/rb/sig/lib/selenium/webdriver/devtools.rbs b/rb/sig/lib/selenium/webdriver/devtools.rbs index 44db3c460745f..892e89bc4c8dd 100644 --- a/rb/sig/lib/selenium/webdriver/devtools.rbs +++ b/rb/sig/lib/selenium/webdriver/devtools.rbs @@ -10,7 +10,7 @@ module Selenium def initialize: (url: untyped) -> void - def close: () -> untyped + def close: () -> nil def callbacks: () -> untyped @@ -24,7 +24,7 @@ module Selenium def start_session: () -> untyped - def error_message: (untyped error) -> untyped + def error_message: (Hash[untyped, untyped] error) -> String end end end diff --git a/rb/sig/lib/selenium/webdriver/edge.rbs b/rb/sig/lib/selenium/webdriver/edge.rbs index fea64d68b81e6..e357f141b0061 100644 --- a/rb/sig/lib/selenium/webdriver/edge.rbs +++ b/rb/sig/lib/selenium/webdriver/edge.rbs @@ -1,11 +1,11 @@ module Selenium module WebDriver module Edge - self.@path: untyped + @path: String? - def self.path=: (untyped path) -> untyped + def self.path=: (String path) -> String - def self.path: () -> untyped + def self.path: () -> String? end end end diff --git a/rb/sig/lib/selenium/webdriver/firefox.rbs b/rb/sig/lib/selenium/webdriver/firefox.rbs index 9d25371c0f786..790ac05f42dbd 100644 --- a/rb/sig/lib/selenium/webdriver/firefox.rbs +++ b/rb/sig/lib/selenium/webdriver/firefox.rbs @@ -1,7 +1,7 @@ module Selenium module WebDriver module Firefox - self.@path: untyped + @path: String? DEFAULT_PORT: Integer @@ -13,9 +13,9 @@ module Selenium DEVTOOLS_VERSION: Integer - def self.path=: (untyped path) -> untyped + def self.path=: (String path) -> String - def self.path: () -> untyped + def self.path: () -> String? end end end diff --git a/rb/sig/lib/selenium/webdriver/safari.rbs b/rb/sig/lib/selenium/webdriver/safari.rbs index 80bfbd7a4b4a1..7159df25cc89f 100644 --- a/rb/sig/lib/selenium/webdriver/safari.rbs +++ b/rb/sig/lib/selenium/webdriver/safari.rbs @@ -1,21 +1,20 @@ module Selenium module WebDriver module Safari - self.@use_technology_preview: untyped + @use_technology_preview: bool? + @path: String? - self.@path: untyped - - attr_accessor self.use_technology_preview: untyped + attr_accessor self.use_technology_preview: bool def self.technology_preview: () -> String - def self.technology_preview!: () -> untyped + def self.technology_preview!: () -> bool - def self.technology_preview?: () -> untyped + def self.technology_preview?: () -> bool - def self.path=: (untyped path) -> untyped + def self.path=: (String) -> String - def self.path: () -> untyped + def self.path: () -> String end end end diff --git a/rb/sig/lib/selenium/webdriver/support.rbs b/rb/sig/lib/selenium/webdriver/support.rbs deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/rb/sig/lib/selenium_webdriver.rbs b/rb/sig/lib/selenium_webdriver.rbs deleted file mode 100644 index e69de29bb2d1d..0000000000000 From 8ac19e4470604a73397953195bf6028e0c9fa26c Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Wed, 5 Jun 2024 10:40:18 -0500 Subject: [PATCH 007/176] [rb] Implement High Level Logging API with BiDi (#14073) * add and remove logging handlers with BiDi * use #object_id instead of creating new ids to track callbacks * do not send browsing contexts to subscription if not needed * deprecate Driver#script & LogInspector * error if trying to remove an id that does not exist * do not unsubscribe if never subscribed in the first place * do not deprecate callbacks people don't have to care about getting the id back --- rb/lib/selenium/webdriver/bidi.rb | 10 ++ rb/lib/selenium/webdriver/bidi/log_handler.rb | 63 ++++++++++ .../selenium/webdriver/bidi/log_inspector.rb | 6 +- rb/lib/selenium/webdriver/bidi/session.rb | 14 +-- rb/lib/selenium/webdriver/bidi/struct.rb | 40 ++++++ rb/lib/selenium/webdriver/common.rb | 1 + rb/lib/selenium/webdriver/common/driver.rb | 22 +++- rb/lib/selenium/webdriver/common/script.rb | 45 +++++++ .../webdriver/common/websocket_connection.rb | 12 ++ .../lib/selenium/webdriver/common/driver.rbs | 1 + rb/sig/selenium/web_driver/script.rbs | 20 +++ .../selenium/webdriver/bidi/script_spec.rb | 114 ++++++++++++++++++ .../selenium/webdriver/bidi_spec.rb | 29 +---- .../selenium/webdriver/driver_spec.rb | 11 +- 14 files changed, 350 insertions(+), 38 deletions(-) create mode 100644 rb/lib/selenium/webdriver/bidi/log_handler.rb create mode 100644 rb/lib/selenium/webdriver/bidi/struct.rb create mode 100644 rb/lib/selenium/webdriver/common/script.rb create mode 100644 rb/sig/selenium/web_driver/script.rbs create mode 100644 rb/spec/integration/selenium/webdriver/bidi/script_spec.rb diff --git a/rb/lib/selenium/webdriver/bidi.rb b/rb/lib/selenium/webdriver/bidi.rb index 21a78b0361a4e..0beb1d024578a 100644 --- a/rb/lib/selenium/webdriver/bidi.rb +++ b/rb/lib/selenium/webdriver/bidi.rb @@ -22,7 +22,9 @@ module WebDriver class BiDi autoload :Session, 'selenium/webdriver/bidi/session' autoload :LogInspector, 'selenium/webdriver/bidi/log_inspector' + autoload :LogHandler, 'selenium/webdriver/bidi/log_handler' autoload :BrowsingContext, 'selenium/webdriver/bidi/browsing_context' + autoload :Struct, 'selenium/webdriver/bidi/struct' def initialize(url:) @ws = WebSocketConnection.new(url: url) @@ -36,6 +38,14 @@ def callbacks @ws.callbacks end + def add_callback(event, &block) + @ws.add_callback(event, &block) + end + + def remove_callback(event, id) + @ws.remove_callback(event, id) + end + def session @session ||= Session.new(self) end diff --git a/rb/lib/selenium/webdriver/bidi/log_handler.rb b/rb/lib/selenium/webdriver/bidi/log_handler.rb new file mode 100644 index 0000000000000..5054a28ed416f --- /dev/null +++ b/rb/lib/selenium/webdriver/bidi/log_handler.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module Selenium + module WebDriver + class BiDi + class LogHandler + ConsoleLogEntry = BiDi::Struct.new(:level, :text, :timestamp, :method, :args, :type) + JavaScriptLogEntry = BiDi::Struct.new(:level, :text, :timestamp, :stack_trace, :type) + + def initialize(bidi) + @bidi = bidi + @log_entry_subscribed = false + end + + # @return [int] id of the handler + def add_message_handler(type) + subscribe_log_entry unless @log_entry_subscribed + @bidi.add_callback('log.entryAdded') do |params| + if params['type'] == type + log_entry_klass = type == 'console' ? ConsoleLogEntry : JavaScriptLogEntry + yield(log_entry_klass.new(**params)) + end + end + end + + # @param [int] id of the handler previously added + def remove_message_handler(id) + @bidi.remove_callback('log.entryAdded', id) + unsubscribe_log_entry if @log_entry_subscribed && @bidi.callbacks['log.entryAdded'].empty? + end + + private + + def subscribe_log_entry + @bidi.session.subscribe('log.entryAdded') + @log_entry_subscribed = true + end + + def unsubscribe_log_entry + @bidi.session.unsubscribe('log.entryAdded') + @log_entry_subscribed = false + end + end # LogHandler + end # Bidi + end # WebDriver +end # Selenium diff --git a/rb/lib/selenium/webdriver/bidi/log_inspector.rb b/rb/lib/selenium/webdriver/bidi/log_inspector.rb index 76853d785bf97..133666cec0f01 100644 --- a/rb/lib/selenium/webdriver/bidi/log_inspector.rb +++ b/rb/lib/selenium/webdriver/bidi/log_inspector.rb @@ -41,6 +41,10 @@ class LogInspector }.freeze def initialize(driver, browsing_context_ids = nil) + WebDriver.logger.deprecate('LogInspector class', + 'Script class with driver.script', + id: :log_inspector) + unless driver.capabilities.web_socket_url raise Error::WebDriverError, 'WebDriver instance must support BiDi protocol' @@ -92,7 +96,7 @@ def on_log(filter_by = nil, &block) def on(event, &block) event = EVENTS[event] if event.is_a?(Symbol) - @bidi.callbacks["log.#{event}"] << block + @bidi.add_callback("log.#{event}", &block) end def check_valid_filter(filter_by) diff --git a/rb/lib/selenium/webdriver/bidi/session.rb b/rb/lib/selenium/webdriver/bidi/session.rb index a323868e7714c..d3ae6792c46d9 100644 --- a/rb/lib/selenium/webdriver/bidi/session.rb +++ b/rb/lib/selenium/webdriver/bidi/session.rb @@ -29,21 +29,21 @@ def initialize(bidi) def status status = @bidi.send_cmd('session.status') - Status.new(status['ready'], status['message']) + Status.new(**status) end def subscribe(events, browsing_contexts = nil) - events_list = Array(events) - browsing_contexts_list = browsing_contexts.nil? ? nil : Array(browsing_contexts) + opts = {events: Array(events)} + opts[:browsing_contexts] = Array(browsing_contexts) if browsing_contexts - @bidi.send_cmd('session.subscribe', events: events_list, contexts: browsing_contexts_list) + @bidi.send_cmd('session.subscribe', **opts) end def unsubscribe(events, browsing_contexts = nil) - events_list = Array(events) - browsing_contexts_list = browsing_contexts.nil? ? nil : Array(browsing_contexts) + opts = {events: Array(events)} + opts[:browsing_contexts] = Array(browsing_contexts) if browsing_contexts - @bidi.send_cmd('session.unsubscribe', events: events_list, contexts: browsing_contexts_list) + @bidi.send_cmd('session.unsubscribe', **opts) end end # Session end # BiDi diff --git a/rb/lib/selenium/webdriver/bidi/struct.rb b/rb/lib/selenium/webdriver/bidi/struct.rb new file mode 100644 index 0000000000000..1ce3c562e5862 --- /dev/null +++ b/rb/lib/selenium/webdriver/bidi/struct.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module Selenium + module WebDriver + class BiDi + class Struct < ::Struct + def self.new(*args, &block) + super(*args) do + define_method(:initialize) do |**kwargs| + converted_kwargs = kwargs.transform_keys { |key| camel_to_snake(key.to_s).to_sym } + super(*converted_kwargs.values_at(*self.class.members)) + end + class_eval(&block) if block + end + end + + def camel_to_snake(camel_str) + camel_str.gsub(/([A-Z])/, '_\1').downcase + end + end + end # BiDi + end # WebDriver +end # Selenium diff --git a/rb/lib/selenium/webdriver/common.rb b/rb/lib/selenium/webdriver/common.rb index c684f208b8846..7473825892268 100644 --- a/rb/lib/selenium/webdriver/common.rb +++ b/rb/lib/selenium/webdriver/common.rb @@ -98,3 +98,4 @@ require 'selenium/webdriver/common/shadow_root' require 'selenium/webdriver/common/websocket_connection' require 'selenium/webdriver/common/child_process' +require 'selenium/webdriver/common/script' diff --git a/rb/lib/selenium/webdriver/common/driver.rb b/rb/lib/selenium/webdriver/common/driver.rb index 0a02916c5afe2..41a079017d8ad 100644 --- a/rb/lib/selenium/webdriver/common/driver.rb +++ b/rb/lib/selenium/webdriver/common/driver.rb @@ -99,6 +99,22 @@ def navigate @navigate ||= WebDriver::Navigation.new(bridge) end + # + # @return [Script] + # @see Script + # + + def script(*args) + if args.any? + WebDriver.logger.deprecate('`Driver#script` as an alias for `#execute_script`', + '`Driver#execute_script`', + id: :driver_script) + execute_script(*args) + else + @script ||= WebDriver::Script.new(bridge) + end + end + # # @return [TargetLocator] # @see TargetLocator @@ -262,12 +278,6 @@ def add_virtual_authenticator(options) alias all find_elements - # - # driver.script('function() { ... };') - # - - alias script execute_script - # Get the first element matching the given selector. If given a # String or Symbol, it will be used as the id of the element. # diff --git a/rb/lib/selenium/webdriver/common/script.rb b/rb/lib/selenium/webdriver/common/script.rb new file mode 100644 index 0000000000000..4b58b1bbea2c7 --- /dev/null +++ b/rb/lib/selenium/webdriver/common/script.rb @@ -0,0 +1,45 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module Selenium + module WebDriver + class Script + def initialize(bridge) + @log_handler = BiDi::LogHandler.new(bridge.bidi) + end + + # @return [int] id of the handler + def add_console_message_handler(&block) + @log_handler.add_message_handler('console', &block) + end + + # @return [int] id of the handler + def add_javascript_error_handler(&block) + @log_handler.add_message_handler('javascript', &block) + end + + # @param [int] id of the handler previously added + def remove_console_message_handler(id) + @log_handler.remove_message_handler(id) + end + + alias remove_javascript_error_handler remove_console_message_handler + end # Script + end # WebDriver +end # Selenium diff --git a/rb/lib/selenium/webdriver/common/websocket_connection.rb b/rb/lib/selenium/webdriver/common/websocket_connection.rb index ec0e3d128e3fd..26f02ebc9bf1c 100644 --- a/rb/lib/selenium/webdriver/common/websocket_connection.rb +++ b/rb/lib/selenium/webdriver/common/websocket_connection.rb @@ -52,6 +52,18 @@ def callbacks @callbacks ||= Hash.new { |callbacks, event| callbacks[event] = [] } end + def add_callback(event, &block) + callbacks[event] << block + block.object_id + end + + def remove_callback(event, id) + return if callbacks[event].reject! { |callback| callback.object_id == id } + + ids = callbacks[event]&.map(&:object_id) + raise Error::WebDriverError, "Callback with ID #{id} does not exist for event #{event}: #{ids}" + end + def send_cmd(**payload) id = next_id data = payload.merge(id: id) diff --git a/rb/sig/lib/selenium/webdriver/common/driver.rbs b/rb/sig/lib/selenium/webdriver/common/driver.rbs index 102ad2c526dd2..0bc94a74a8008 100644 --- a/rb/sig/lib/selenium/webdriver/common/driver.rbs +++ b/rb/sig/lib/selenium/webdriver/common/driver.rbs @@ -8,6 +8,7 @@ module Selenium @devtools: untyped @navigate: untyped + @script: untyped @service_manager: untyped def self.for: (untyped browser, Hash[untyped, untyped] opts) -> untyped diff --git a/rb/sig/selenium/web_driver/script.rbs b/rb/sig/selenium/web_driver/script.rbs new file mode 100644 index 0000000000000..f2dc066174df0 --- /dev/null +++ b/rb/sig/selenium/web_driver/script.rbs @@ -0,0 +1,20 @@ +module Selenium + module WebDriver + class Script + @bidi: BiDi + @log_entry_subscribed: bool + + def add_console_message_handler: -> untyped + + def add_javascript_error_handler: -> untyped + + def remove_console_message_handler: -> untyped + + alias remove_javascript_error_handler remove_console_message_handler + + private + + def subscribe_log_entry: -> untyped + end + end +end diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb new file mode 100644 index 0000000000000..e8743217e6af9 --- /dev/null +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -0,0 +1,114 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +require_relative '../spec_helper' + +module Selenium + module WebDriver + describe Script, only: {browser: %i[chrome edge firefox]} do + before { reset_driver!(web_socket_url: true) } + after(:all) { quit_driver } + + it 'errors when bidi not enabled' do + reset_driver! do |driver| + expect { + driver.script + }.to raise_error(WebDriver::Error::WebDriverError, /this operation requires enabling BiDi/) + end + end + + it 'logs console messages' do + driver.navigate.to url_for('bidi/logEntryAdded.html') + + log_entries = [] + driver.script.add_console_message_handler { |log| log_entries << log } + + driver.find_element(id: 'jsException').click + driver.find_element(id: 'consoleLog').click + + wait.until { log_entries.any? } + expect(log_entries.size).to eq(1) + log_entry = log_entries.first + expect(log_entry).to be_a BiDi::LogHandler::ConsoleLogEntry + expect(log_entry.level).to eq 'info' + expect(log_entry.method).to eq 'log' + expect(log_entry.text).to eq 'Hello, world!' + expect(log_entry.type).to eq 'console' + end + + it 'logs multiple console messages' do + driver.navigate.to url_for('bidi/logEntryAdded.html') + + log_entries = [] + driver.script.add_console_message_handler { |log| log_entries << log } + driver.script.add_console_message_handler { |log| log_entries << log } + + driver.find_element(id: 'jsException').click + driver.find_element(id: 'consoleLog').click + + wait.until { log_entries.size > 1 } + expect(log_entries.size).to eq(2) + end + + it 'logs removes console message handler' do + driver.navigate.to url_for('bidi/logEntryAdded.html') + + log_entries = [] + id = driver.script.add_console_message_handler { |log| log_entries << log } + driver.script.add_console_message_handler { |log| log_entries << log } + + driver.find_element(id: 'consoleLog').click + + wait.until { log_entries.size > 1 } + + driver.script.remove_console_message_handler(id) + + driver.find_element(id: 'consoleLog').click + + wait.until { log_entries.size > 2 } + expect(log_entries.size).to eq(3) + end + + it 'logs javascript errors' do + driver.navigate.to url_for('bidi/logEntryAdded.html') + + log_entries = [] + driver.script.add_javascript_error_handler { |log| log_entries << log } + + driver.find_element(id: 'consoleLog').click + driver.find_element(id: 'jsException').click + + wait.until { log_entries.any? } + expect(log_entries.size).to eq(1) + log_entry = log_entries.first + expect(log_entry).to be_a BiDi::LogHandler::JavaScriptLogEntry + expect(log_entry.level).to eq 'error' + expect(log_entry.type).to eq 'javascript' + expect(log_entry.text).to eq 'Error: Not working' + expect(log_entry.stack_trace).not_to be_empty + end + + it 'errors removing non-existent handler' do + expect { + driver.script.remove_console_message_handler(0) + }.to raise_error(Error::WebDriverError, /Callback with ID 0 does not exist/) + end + end + end +end diff --git a/rb/spec/integration/selenium/webdriver/bidi_spec.rb b/rb/spec/integration/selenium/webdriver/bidi_spec.rb index 6b447803b0546..0a26e1009466d 100644 --- a/rb/spec/integration/selenium/webdriver/bidi_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi_spec.rb @@ -30,35 +30,18 @@ module WebDriver # do nothing end + it 'errors when bidi not enabled' do + reset_driver! do |driver| + expect { driver.bidi }.to raise_error(WebDriver::Error::WebDriverError) + end + end + it 'gets session status' do status = driver.bidi.session.status expect(status).to respond_to(:ready) expect(status.message).not_to be_empty end - it 'can navigate and listen to errors' do - log_entries = [] - log_inspector = BiDi::LogInspector.new(driver) - log_inspector.on_javascript_exception { |log| log_entries << log } - - browsing_context = BiDi::BrowsingContext.new(driver: driver, browsing_context_id: driver.window_handle) - info = browsing_context.navigate(url: url_for('/bidi/logEntryAdded.html')) - - expect(browsing_context.id).not_to be_nil - expect(info.navigation_id).not_to be_nil - expect(info.url).to include('/bidi/logEntryAdded.html') - - js_exception = wait.until { driver.find_element(id: 'jsException') } - js_exception.click - - log_entry = wait.until { log_entries.find { _1.text == 'Error: Not working' } } - expect(log_entry).to have_attributes( - text: 'Error: Not working', - type: 'javascript', - level: BiDi::LogInspector::LOG_LEVEL[:ERROR] - ) - end - it 'does not close BiDi session if at least one window is opened' do status = driver.bidi.session.status expect(status.ready).to be false diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index 623303445705c..c63685f4ac3d2 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -243,7 +243,16 @@ module WebDriver end end - describe 'execute script' do + describe '#script' do + it 'executes script with deprecation warning' do + driver.navigate.to url_for('xhtmlTest.html') + expect { + expect(driver.script('return document.title;')).to eq('XHTML Test Page') + }.to have_deprecated(:driver_script) + end + end + + describe '#execute_script' do it 'returns strings' do driver.navigate.to url_for('xhtmlTest.html') expect(driver.execute_script('return document.title;')).to eq('XHTML Test Page') From 987be00dd5e220fecaa78f579e5ae37611bc4685 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 08:11:38 -0500 Subject: [PATCH 008/176] [rb] make new #camel_to_snake a private class method --- rb/lib/selenium/webdriver/bidi/struct.rb | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/rb/lib/selenium/webdriver/bidi/struct.rb b/rb/lib/selenium/webdriver/bidi/struct.rb index 1ce3c562e5862..1ad8cb66390ef 100644 --- a/rb/lib/selenium/webdriver/bidi/struct.rb +++ b/rb/lib/selenium/webdriver/bidi/struct.rb @@ -21,20 +21,26 @@ module Selenium module WebDriver class BiDi class Struct < ::Struct - def self.new(*args, &block) - super(*args) do - define_method(:initialize) do |**kwargs| - converted_kwargs = kwargs.transform_keys { |key| camel_to_snake(key.to_s).to_sym } - super(*converted_kwargs.values_at(*self.class.members)) + class << self + def new(*args, &block) + super(*args) do + define_method(:initialize) do |**kwargs| + converted_kwargs = kwargs.transform_keys { |key| self.class.camel_to_snake(key.to_s).to_sym } + super(*converted_kwargs.values_at(*self.class.members)) + end + class_eval(&block) if block end - class_eval(&block) if block end - end - def camel_to_snake(camel_str) - camel_str.gsub(/([A-Z])/, '_\1').downcase + private + + def camel_to_snake(camel_str) + camel_str.gsub(/([A-Z])/, '_\1').downcase + end end end - end # BiDi + end + + # BiDi end # WebDriver end # Selenium From bf4027c78c87dae1b26f1dabb4133f5d2a6af108 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 11:37:37 -0500 Subject: [PATCH 009/176] [rb] #camel_to_snake as a class method cannot be private when called by constructor --- rb/lib/selenium/webdriver/bidi/struct.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/rb/lib/selenium/webdriver/bidi/struct.rb b/rb/lib/selenium/webdriver/bidi/struct.rb index 1ad8cb66390ef..38d3e08e85221 100644 --- a/rb/lib/selenium/webdriver/bidi/struct.rb +++ b/rb/lib/selenium/webdriver/bidi/struct.rb @@ -32,8 +32,6 @@ def new(*args, &block) end end - private - def camel_to_snake(camel_str) camel_str.gsub(/([A-Z])/, '_\1').downcase end From a9ea73a672200870fc68c146962913b3d07d15ac Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 11:48:34 -0500 Subject: [PATCH 010/176] [ci] stop running safari tests in Ruby suite for now --- .github/workflows/ci-ruby.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/ci-ruby.yml b/.github/workflows/ci-ruby.yml index 653034f947f45..d93d4dc7ad25c 100644 --- a/.github/workflows/ci-ruby.yml +++ b/.github/workflows/ci-ruby.yml @@ -73,7 +73,6 @@ jobs: - chrome - edge - firefox - - safari os: - ubuntu - windows @@ -83,10 +82,6 @@ jobs: os: ubuntu - browser: edge os: macos - - browser: safari - os: ubuntu - - browser: safari - os: windows with: name: Local Tests (${{ matrix.browser }}, ${{ matrix.os }}) browser: ${{ matrix.browser }} @@ -115,8 +110,6 @@ jobs: os: ubuntu - browser: firefox os: ubuntu - - browser: safari - os: macos with: name: Remote Tests (${{ matrix.browser }}, ${{ matrix.os }}) browser: ${{ matrix.browser }} From b519b43f65ad2f073d19957c343146a563a00715 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Wed, 5 Jun 2024 18:49:03 +0200 Subject: [PATCH 011/176] [rb] Add `logger` gem as a runtime dependency (#14082) This is getting the same treatment as the `base64` gem, starting with Ruby 3.4. Also see #13454 Closes #14081 --- rb/Gemfile.lock | 1 + rb/selenium-webdriver.gemspec | 1 + 2 files changed, 2 insertions(+) diff --git a/rb/Gemfile.lock b/rb/Gemfile.lock index da3275587867d..220102ae4b9b0 100644 --- a/rb/Gemfile.lock +++ b/rb/Gemfile.lock @@ -5,6 +5,7 @@ PATH selenium-webdriver (~> 4.2) selenium-webdriver (4.22.0.nightly) base64 (~> 0.2) + logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) diff --git a/rb/selenium-webdriver.gemspec b/rb/selenium-webdriver.gemspec index 5b8fe1df012d4..90e2662aa1e85 100644 --- a/rb/selenium-webdriver.gemspec +++ b/rb/selenium-webdriver.gemspec @@ -48,6 +48,7 @@ Gem::Specification.new do |s| s.require_paths = ['lib'] s.add_runtime_dependency 'base64', ['~> 0.2'] + s.add_runtime_dependency 'logger', ['~> 1.4'] s.add_runtime_dependency 'rexml', ['~> 3.2', '>= 3.2.5'] s.add_runtime_dependency 'rubyzip', ['>= 1.2.2', '< 3.0'] s.add_runtime_dependency 'websocket', ['~> 1.0'] From 16d3905975fc0cbfaf723d9b68c945fc0cfe4f7a Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 15:03:17 -0500 Subject: [PATCH 012/176] [build] need this version to prevent temporary issue with coreutils download --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index ccf0472ab9b5c..c4e8b2e0f5bc7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,7 +1,7 @@ module(name = "selenium") bazel_dep(name = "apple_rules_lint", version = "0.3.2") -bazel_dep(name = "aspect_bazel_lib", version = "2.7.3") +bazel_dep(name = "aspect_bazel_lib", version = "2.7.6") bazel_dep(name = "aspect_rules_esbuild", version = "0.20.0") bazel_dep(name = "aspect_rules_js", version = "1.42.3") bazel_dep(name = "aspect_rules_ts", version = "2.1.0") From 1328661cea82e0cf8cf595faa27f67ea658d9a86 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 4 Jun 2024 15:16:15 -0500 Subject: [PATCH 013/176] [rb] only run bidi tests if web_socket_url is set via environment variable --- .../webdriver/bidi/browsing_context_spec.rb | 5 +- .../webdriver/bidi/log_inspector_spec.rb | 346 ++++++++---------- .../selenium/webdriver/bidi/script_spec.rb | 11 +- .../selenium/webdriver/bidi_spec.rb | 12 +- .../selenium/webdriver/spec_helper.rb | 1 + .../spec_support/test_environment.rb | 3 + 6 files changed, 175 insertions(+), 203 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb index adf462b6af059..1d0a554daa8dd 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb @@ -22,9 +22,8 @@ module Selenium module WebDriver class BiDi - describe BrowsingContext, only: {browser: %i[chrome edge firefox]} do - before { reset_driver!(web_socket_url: true) } - after { quit_driver } + describe BrowsingContext, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + after { reset_driver! } it 'can create a browsing context for given id' do id = driver.window_handle diff --git a/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb index 24da3ede70771..e507fd1b1f9c6 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb @@ -22,20 +22,45 @@ module Selenium module WebDriver class BiDi - describe LogInspector, only: {browser: %i[chrome edge firefox]} do - let(:page) { '/bidi/logEntryAdded.html' } + describe LogInspector, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + let(:page) { 'bidi/logEntryAdded.html' } it 'can listen to console log' do - reset_driver!(web_socket_url: true) do |driver| - log_entries = [] - log_inspector = described_class.new(driver) - log_inspector.on_console_entry { |log| log_entries << log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'consoleLog').click - log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } } + log_entries = [] + log_inspector = described_class.new(driver) + log_inspector.on_console_entry { |log| log_entries << log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'consoleLog').click + log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } } + + expect(log_entry).to have_attributes( + text: 'Hello, world!', + realm: nil, + type: 'console', + level: LogInspector::LOG_LEVEL[:INFO], + method: 'log', + args: [{ + 'type' => 'string', + 'value' => 'Hello, world!' + }] + ) + end - expect(log_entry).to have_attributes( + it 'can listen to console log with different consumers' do + log_entries1 = [] + log_entries2 = [] + log_inspector = described_class.new(driver) + log_inspector.on_console_entry { |log| log_entries1 << log } + log_inspector.on_console_entry { |log| log_entries2 << log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'consoleLog').click + log_entry1 = wait.until { log_entries1.find { _1.text == 'Hello, world!' } } + log_entry2 = wait.until { log_entries2.find { _1.text == 'Hello, world!' } } + + expect([log_entry1, log_entry2]).to all( + have_attributes( text: 'Hello, world!', realm: nil, type: 'console', @@ -46,213 +71,164 @@ class BiDi 'value' => 'Hello, world!' }] ) - end - end - - it 'can listen to console log with different consumers' do - reset_driver!(web_socket_url: true) do |driver| - log_entries1 = [] - log_entries2 = [] - log_inspector = described_class.new(driver) - log_inspector.on_console_entry { |log| log_entries1 << log } - log_inspector.on_console_entry { |log| log_entries2 << log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'consoleLog').click - log_entry1 = wait.until { log_entries1.find { _1.text == 'Hello, world!' } } - log_entry2 = wait.until { log_entries2.find { _1.text == 'Hello, world!' } } - - expect([log_entry1, log_entry2]).to all( - have_attributes( - text: 'Hello, world!', - realm: nil, - type: 'console', - level: LogInspector::LOG_LEVEL[:INFO], - method: 'log', - args: [{ - 'type' => 'string', - 'value' => 'Hello, world!' - }] - ) - ) - end + ) end it 'can filter console info level log' do - reset_driver!(web_socket_url: true) do |driver| - log_entries = [] - log_inspector = described_class.new(driver) - log_inspector.on_console_entry(FilterBy.log_level('info')) { |log| log_entries << log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'consoleLog').click - log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } } - - expect(log_entry).to have_attributes( - text: 'Hello, world!', - realm: nil, - type: 'console', - level: LogInspector::LOG_LEVEL[:INFO], - method: 'log', - args: [{ - 'type' => 'string', - 'value' => 'Hello, world!' - }] - ) - end + log_entries = [] + log_inspector = described_class.new(driver) + log_inspector.on_console_entry(FilterBy.log_level('info')) { |log| log_entries << log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'consoleLog').click + log_entry = wait.until { log_entries.find { _1.text == 'Hello, world!' } } + + expect(log_entry).to have_attributes( + text: 'Hello, world!', + realm: nil, + type: 'console', + level: LogInspector::LOG_LEVEL[:INFO], + method: 'log', + args: [{ + 'type' => 'string', + 'value' => 'Hello, world!' + }] + ) end it 'can filter console log' do - reset_driver!(web_socket_url: true) do |driver| - log_entries = [] - log_inspector = described_class.new(driver) - log_inspector.on_console_entry(FilterBy.log_level('error')) { |log| log_entries << log } - - driver.navigate.to url_for(page) - # Generating info level log but we are filtering by error level - wait.until { driver.find_element(id: 'consoleLog').displayed? } - driver.find_element(id: 'consoleLog').click - - expect(log_entries).to be_empty - end + log_entries = [] + log_inspector = described_class.new(driver) + log_inspector.on_console_entry(FilterBy.log_level('error')) { |log| log_entries << log } + + driver.navigate.to url_for(page) + # Generating info level log but we are filtering by error level + wait.until { driver.find_element(id: 'consoleLog').displayed? } + driver.find_element(id: 'consoleLog').click + + expect(log_entries).to be_empty end it 'can listen to javascript log' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_javascript_log { |log| log_entry = log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'jsException').click - wait.until { !log_entry.nil? } - - expect(log_entry).to have_attributes( - text: 'Error: Not working', - type: 'javascript', - level: LogInspector::LOG_LEVEL[:ERROR] - ) - end + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_javascript_log { |log| log_entry = log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'jsException').click + wait.until { !log_entry.nil? } + + expect(log_entry).to have_attributes( + text: 'Error: Not working', + type: 'javascript', + level: LogInspector::LOG_LEVEL[:ERROR] + ) end it 'can filter javascript log at error level' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_javascript_log(FilterBy.log_level('error')) { |log| log_entry = log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'jsException').click - wait.until { !log_entry.nil? } - - expect(log_entry).to have_attributes( - text: 'Error: Not working', - type: 'javascript', - level: LogInspector::LOG_LEVEL[:ERROR] - ) - end + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_javascript_log(FilterBy.log_level('error')) { |log| log_entry = log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'jsException').click + wait.until { !log_entry.nil? } + + expect(log_entry).to have_attributes( + text: 'Error: Not working', + type: 'javascript', + level: LogInspector::LOG_LEVEL[:ERROR] + ) end it 'can filter javascript log' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_javascript_log(FilterBy.log_level('info')) { |log| log_entry = log } - - driver.navigate.to url_for(page) - # Generating js error level log but we are filtering by info level - wait.until { driver.find_element(id: 'jsException').displayed? } - driver.find_element(id: 'jsException').click - - expect(log_entry).to be_nil - end + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_javascript_log(FilterBy.log_level('info')) { |log| log_entry = log } + + driver.navigate.to url_for(page) + # Generating js error level log but we are filtering by info level + wait.until { driver.find_element(id: 'jsException').displayed? } + driver.find_element(id: 'jsException').click + + expect(log_entry).to be_nil end it 'can listen to javascript error log' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_javascript_exception { |log| log_entry = log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'jsException').click - wait.until { !log_entry.nil? } - - expect(log_entry).to have_attributes( - text: 'Error: Not working', - type: 'javascript', - level: LogInspector::LOG_LEVEL[:ERROR] - ) - end + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_javascript_exception { |log| log_entry = log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'jsException').click + wait.until { !log_entry.nil? } + + expect(log_entry).to have_attributes( + text: 'Error: Not working', + type: 'javascript', + level: LogInspector::LOG_LEVEL[:ERROR] + ) end it 'can listen to any log' do - reset_driver!(web_socket_url: true) do |driver| - log_entries = [] - log_inspector = described_class.new(driver) - log_inspector.on_log { |log| log_entries << log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'consoleError').click - log_entry = wait.until { log_entries.find { _1['text'] == 'I am console error' } } - - expect(log_entry).to include( - 'text' => 'I am console error', - 'type' => 'console', - 'level' => LogInspector::LOG_LEVEL[:ERROR] - ) - end + log_entries = [] + log_inspector = described_class.new(driver) + log_inspector.on_log { |log| log_entries << log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'consoleError').click + log_entry = wait.until { log_entries.find { _1['text'] == 'I am console error' } } + + expect(log_entry).to include( + 'text' => 'I am console error', + 'type' => 'console', + 'level' => LogInspector::LOG_LEVEL[:ERROR] + ) end it 'can filter any log' do - reset_driver!(web_socket_url: true) do |driver| - log_entries = [] - log_inspector = described_class.new(driver) - log_inspector.on_log(FilterBy.log_level('info')) { |log| log_entries << log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'consoleLog').click - log_entry = wait.until { log_entries.find { _1['text'] == 'Hello, world!' } } - - expect(log_entry['text']).to eq('Hello, world!') - expect(log_entry['realm']).to be_nil - expect(log_entry['type']).to eq('console') - expect(log_entry['level']).to eq('info') - expect(log_entry['method']).to eq('log') - expect(log_entry['args'].size).to eq(1) - end + log_entries = [] + log_inspector = described_class.new(driver) + log_inspector.on_log(FilterBy.log_level('info')) { |log| log_entries << log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'consoleLog').click + log_entry = wait.until { log_entries.find { _1['text'] == 'Hello, world!' } } + + expect(log_entry['text']).to eq('Hello, world!') + expect(log_entry['realm']).to be_nil + expect(log_entry['type']).to eq('console') + expect(log_entry['level']).to eq('info') + expect(log_entry['method']).to eq('log') + expect(log_entry['args'].size).to eq(1) end it 'can filter any log at error level' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_log(FilterBy.log_level('error')) { |log| log_entry = log } - - driver.navigate.to url_for(page) - driver.find_element(id: 'jsException').click - wait.until { !log_entry.nil? } - - expect(log_entry['text']).to eq('Error: Not working') - expect(log_entry['type']).to eq('javascript') - expect(log_entry['level']).to eq('error') - end + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_log(FilterBy.log_level('error')) { |log| log_entry = log } + + driver.navigate.to url_for(page) + driver.find_element(id: 'jsException').click + wait.until { !log_entry.nil? } + + expect(log_entry['text']).to eq('Error: Not working') + expect(log_entry['type']).to eq('javascript') + expect(log_entry['level']).to eq('error') end it 'can retrieve stack trace for a log' do - reset_driver!(web_socket_url: true) do |driver| - log_entry = nil - log_inspector = described_class.new(driver) - log_inspector.on_javascript_log { |log| log_entry = log } + log_entry = nil + log_inspector = described_class.new(driver) + log_inspector.on_javascript_log { |log| log_entry = log } - driver.navigate.to url_for(page) - driver.find_element(id: 'jsException').click - wait.until { !log_entry.nil? } + driver.navigate.to url_for(page) + driver.find_element(id: 'jsException').click + wait.until { !log_entry.nil? } - stack_trace = log_entry.stack_trace + stack_trace = log_entry.stack_trace - expect(stack_trace).not_to be_nil - end + expect(stack_trace).not_to be_nil end end end diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb index e8743217e6af9..c080277a5505b 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -21,12 +21,11 @@ module Selenium module WebDriver - describe Script, only: {browser: %i[chrome edge firefox]} do - before { reset_driver!(web_socket_url: true) } - after(:all) { quit_driver } + describe Script, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + after { reset_driver! } it 'errors when bidi not enabled' do - reset_driver! do |driver| + reset_driver!(web_socket_url: false) do |driver| expect { driver.script }.to raise_error(WebDriver::Error::WebDriverError, /this operation requires enabling BiDi/) @@ -106,8 +105,8 @@ module WebDriver it 'errors removing non-existent handler' do expect { - driver.script.remove_console_message_handler(0) - }.to raise_error(Error::WebDriverError, /Callback with ID 0 does not exist/) + driver.script.remove_console_message_handler(12345) + }.to raise_error(Error::WebDriverError, /Callback with ID 12345 does not exist/) end end end diff --git a/rb/spec/integration/selenium/webdriver/bidi_spec.rb b/rb/spec/integration/selenium/webdriver/bidi_spec.rb index 0a26e1009466d..7259cca35ef34 100644 --- a/rb/spec/integration/selenium/webdriver/bidi_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi_spec.rb @@ -21,17 +21,11 @@ module Selenium module WebDriver - describe BiDi, only: {browser: %i[chrome edge firefox]} do - before { reset_driver!(web_socket_url: true) } - - after do - quit_driver - rescue Selenium::WebDriver::Error::InvalidSessionIdError - # do nothing - end + describe BiDi, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + after { reset_driver! } it 'errors when bidi not enabled' do - reset_driver! do |driver| + reset_driver!(web_socket_url: false) do |driver| expect { driver.bidi }.to raise_error(WebDriver::Error::WebDriverError) end end diff --git a/rb/spec/integration/selenium/webdriver/spec_helper.rb b/rb/spec/integration/selenium/webdriver/spec_helper.rb index bf0a507577ef1..e8b9ee7f84ecd 100644 --- a/rb/spec/integration/selenium/webdriver/spec_helper.rb +++ b/rb/spec/integration/selenium/webdriver/spec_helper.rb @@ -56,6 +56,7 @@ guards.add_condition(:ci, WebDriver::Platform.ci) guards.add_condition(:platform, WebDriver::Platform.os) guards.add_condition(:headless, !ENV['HEADLESS'].nil?) + guards.add_condition(:bidi, !ENV['WEBDRIVER_BIDI'].nil?) results = guards.disposition send(*results) if results diff --git a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb index aafa63bcd17bb..c5e7731502215 100644 --- a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb +++ b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb @@ -248,6 +248,7 @@ def safari_preview_driver(**opts) end def chrome_options(args: [], **opts) + opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['CHROME_BINARY'] if ENV.key?('CHROME_BINARY') args << '--headless=chrome' if ENV['HEADLESS'] args << '--no-sandbox' if ENV['NO_SANDBOX'] @@ -256,6 +257,7 @@ def chrome_options(args: [], **opts) end def edge_options(args: [], **opts) + opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['EDGE_BINARY'] if ENV.key?('EDGE_BINARY') args << '--headless=chrome' if ENV['HEADLESS'] args << '--no-sandbox' if ENV['NO_SANDBOX'] @@ -264,6 +266,7 @@ def edge_options(args: [], **opts) end def firefox_options(args: [], **opts) + opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['FIREFOX_BINARY'] if ENV.key?('FIREFOX_BINARY') args << '--headless' if ENV['HEADLESS'] WebDriver::Options.firefox(args: args, **opts) From f3e2256e0320a28ff2fa6d79e4243a5faf28b81c Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 08:11:38 -0500 Subject: [PATCH 014/176] [rb] update after hook in specs to reduce unnecessary browser restarts --- .../selenium/webdriver/bidi/browsing_context_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/bidi/script_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/bidi_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/devtools_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/spec_helper.rb | 2 +- .../selenium/webdriver/spec_support/test_environment.rb | 3 +++ 6 files changed, 8 insertions(+), 5 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb index 1d0a554daa8dd..bdec214b2d987 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb @@ -23,7 +23,7 @@ module Selenium module WebDriver class BiDi describe BrowsingContext, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do - after { reset_driver! } + after { |example| reset_driver!(example: example) } it 'can create a browsing context for given id' do id = driver.window_handle diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb index c080277a5505b..54539ef844273 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver describe Script, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do - after { reset_driver! } + after { |example| reset_driver!(example: example) } it 'errors when bidi not enabled' do reset_driver!(web_socket_url: false) do |driver| diff --git a/rb/spec/integration/selenium/webdriver/bidi_spec.rb b/rb/spec/integration/selenium/webdriver/bidi_spec.rb index 7259cca35ef34..c7a65eda04954 100644 --- a/rb/spec/integration/selenium/webdriver/bidi_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver describe BiDi, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do - after { reset_driver! } + after { |example| reset_driver!(example: example) } it 'errors when bidi not enabled' do reset_driver!(web_socket_url: false) do |driver| diff --git a/rb/spec/integration/selenium/webdriver/devtools_spec.rb b/rb/spec/integration/selenium/webdriver/devtools_spec.rb index ab43c9cfe7bff..9ac7175047a8d 100644 --- a/rb/spec/integration/selenium/webdriver/devtools_spec.rb +++ b/rb/spec/integration/selenium/webdriver/devtools_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver describe DevTools, exclusive: {browser: %i[chrome edge firefox]} do - after { reset_driver! } + after { |example| reset_driver!(example: example) } it 'sends commands' do driver.devtools.page.navigate(url: url_for('xhtmlTest.html')) diff --git a/rb/spec/integration/selenium/webdriver/spec_helper.rb b/rb/spec/integration/selenium/webdriver/spec_helper.rb index e8b9ee7f84ecd..cd93fc5eb0aed 100644 --- a/rb/spec/integration/selenium/webdriver/spec_helper.rb +++ b/rb/spec/integration/selenium/webdriver/spec_helper.rb @@ -64,7 +64,7 @@ c.after do |example| result = example.execution_result - reset_driver! if result.exception || result.pending_exception + reset_driver! if example.exception || result.pending_exception end end diff --git a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb index c5e7731502215..123b889bdbb3c 100644 --- a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb +++ b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb @@ -62,6 +62,9 @@ def driver_instance(...) end def reset_driver!(time: 0, **opts, &block) + # do not reset if the test was marked skipped + return if opts.delete(:example)&.metadata&.fetch(:skip, nil) + quit_driver sleep time driver_instance(**opts, &block) From 02a2bfcb923e4e633ee78dd26ecaec3b3e4ffd12 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 08:12:26 -0500 Subject: [PATCH 015/176] [rb] restrict what tests are run when bidi enabled --- .../integration/selenium/webdriver/action_builder_spec.rb | 2 +- .../selenium/webdriver/bidi/browsing_context_spec.rb | 3 ++- .../selenium/webdriver/bidi/log_inspector_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/bidi/script_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/bidi_spec.rb | 3 ++- .../integration/selenium/webdriver/chrome/driver_spec.rb | 2 +- .../integration/selenium/webdriver/chrome/options_spec.rb | 2 +- .../integration/selenium/webdriver/chrome/profile_spec.rb | 2 +- .../integration/selenium/webdriver/chrome/service_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/devtools_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/driver_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/edge/driver_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/edge/options_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/edge/profile_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/edge/service_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/element_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/error_spec.rb | 2 +- .../integration/selenium/webdriver/firefox/driver_spec.rb | 2 +- .../integration/selenium/webdriver/firefox/profile_spec.rb | 2 +- .../integration/selenium/webdriver/firefox/service_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/guard_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/listener_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/manager_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/navigation_spec.rb | 2 +- .../integration/selenium/webdriver/remote/driver_spec.rb | 2 +- .../integration/selenium/webdriver/remote/element_spec.rb | 6 ++---- .../integration/selenium/webdriver/safari/driver_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/select_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/shadow_root_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/storage_spec.rb | 2 +- .../integration/selenium/webdriver/takes_screenshot_spec.rb | 6 ++---- .../integration/selenium/webdriver/target_locator_spec.rb | 4 ++-- rb/spec/integration/selenium/webdriver/timeout_spec.rb | 2 +- .../selenium/webdriver/virtual_authenticator_spec.rb | 3 ++- rb/spec/integration/selenium/webdriver/window_spec.rb | 2 +- rb/spec/integration/selenium/webdriver/zipper_spec.rb | 6 ++---- 36 files changed, 48 insertions(+), 46 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/action_builder_spec.rb b/rb/spec/integration/selenium/webdriver/action_builder_spec.rb index db187bc696c22..47c2a71c65bb0 100644 --- a/rb/spec/integration/selenium/webdriver/action_builder_spec.rb +++ b/rb/spec/integration/selenium/webdriver/action_builder_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe ActionBuilder do + describe ActionBuilder, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do after { driver.action.clear_all_actions } describe '#send_keys' do diff --git a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb index bdec214b2d987..902a289441652 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/browsing_context_spec.rb @@ -22,7 +22,8 @@ module Selenium module WebDriver class BiDi - describe BrowsingContext, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + describe BrowsingContext, exclusive: {bidi: true, reason: 'only executed when bidi is enabled'}, + only: {browser: %i[chrome edge firefox]} do after { |example| reset_driver!(example: example) } it 'can create a browsing context for given id' do diff --git a/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb index e507fd1b1f9c6..e0d36be936bab 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/log_inspector_spec.rb @@ -22,7 +22,8 @@ module Selenium module WebDriver class BiDi - describe LogInspector, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + describe LogInspector, exclusive: {bidi: true, reason: 'only executed when bidi is enabled'}, + only: {browser: %i[chrome edge firefox]} do let(:page) { 'bidi/logEntryAdded.html' } it 'can listen to console log' do diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb index 54539ef844273..f32aa39118779 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -21,7 +21,8 @@ module Selenium module WebDriver - describe Script, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + describe Script, exclusive: {bidi: true, reason: 'only executed when bidi is enabled'}, + only: {browser: %i[chrome edge firefox]} do after { |example| reset_driver!(example: example) } it 'errors when bidi not enabled' do diff --git a/rb/spec/integration/selenium/webdriver/bidi_spec.rb b/rb/spec/integration/selenium/webdriver/bidi_spec.rb index c7a65eda04954..1444e9ff52277 100644 --- a/rb/spec/integration/selenium/webdriver/bidi_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi_spec.rb @@ -21,7 +21,8 @@ module Selenium module WebDriver - describe BiDi, exclusive: {bidi: true}, only: {browser: %i[chrome edge firefox]} do + describe BiDi, exclusive: {bidi: true, reason: 'only executed when bidi is enabled'}, + only: {browser: %i[chrome edge firefox]} do after { |example| reset_driver!(example: example) } it 'errors when bidi not enabled' do diff --git a/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb index a6fb7da579df3..1e50fce967419 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Chrome - describe Driver, exclusive: {browser: :chrome} do + describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :chrome}] do it 'gets and sets network conditions' do driver.network_conditions = {offline: false, latency: 56, throughput: 789} expect(driver.network_conditions).to eq( diff --git a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb index 19488798e089b..b1919c9a909da 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/options_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Chrome - describe Options, exclusive: {browser: :chrome} do + describe Options, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :chrome}] do it 'passes emulated device correctly' do reset_driver!(emulation: {device_name: 'Nexus 5'}) do |driver| ua = driver.execute_script 'return window.navigator.userAgent' diff --git a/rb/spec/integration/selenium/webdriver/chrome/profile_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/profile_spec.rb index a5ff1d1b469de..45e68e1ba5a70 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/profile_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/profile_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Chrome - describe Profile, exclusive: {browser: :chrome} do + describe Profile, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :chrome}] do let(:profile) { described_class.new } it 'adds an extension' do diff --git a/rb/spec/integration/selenium/webdriver/chrome/service_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/service_spec.rb index fe594c1132eb4..aed6ce922258d 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/service_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/service_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Chrome - describe Service, exclusive: {browser: :chrome} do + describe Service, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :chrome}] do let(:service) { described_class.new } let(:service_manager) { service.launch } diff --git a/rb/spec/integration/selenium/webdriver/devtools_spec.rb b/rb/spec/integration/selenium/webdriver/devtools_spec.rb index 9ac7175047a8d..64e03e0851641 100644 --- a/rb/spec/integration/selenium/webdriver/devtools_spec.rb +++ b/rb/spec/integration/selenium/webdriver/devtools_spec.rb @@ -21,7 +21,8 @@ module Selenium module WebDriver - describe DevTools, exclusive: {browser: %i[chrome edge firefox]} do + describe DevTools, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, + {browser: %i[chrome edge firefox]}] do after { |example| reset_driver!(example: example) } it 'sends commands' do diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index c63685f4ac3d2..8b85148a3e1f8 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Driver do + describe Driver, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do it_behaves_like 'driver that can be started concurrently', exclude: {browser: %i[safari safari_preview]} it 'creates default capabilities', exclude: {browser: %i[safari safari_preview]} do diff --git a/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb b/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb index 232894c01608c..b3f739582a792 100644 --- a/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Edge - describe Driver, exclusive: {browser: :edge} do + describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :edge}] do it 'gets and sets network conditions' do driver.network_conditions = {offline: false, latency: 56, throughput: 789} expect(driver.network_conditions).to eq( diff --git a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb index ebef9d9277e48..a6c6cacbaaeb2 100644 --- a/rb/spec/integration/selenium/webdriver/edge/options_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/options_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Edge - describe Options, exclusive: {browser: :edge} do + describe Options, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :edge}] do it 'passes emulated device correctly' do reset_driver!(emulation: {device_name: 'Nexus 5'}) do |driver| ua = driver.execute_script 'return window.navigator.userAgent' diff --git a/rb/spec/integration/selenium/webdriver/edge/profile_spec.rb b/rb/spec/integration/selenium/webdriver/edge/profile_spec.rb index 4c3269029f0b1..33c933c3d62b9 100644 --- a/rb/spec/integration/selenium/webdriver/edge/profile_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/profile_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Edge - describe Profile, exclusive: {browser: :edge} do + describe Profile, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :edge}] do let(:profile) { described_class.new } it 'adds an extension' do diff --git a/rb/spec/integration/selenium/webdriver/edge/service_spec.rb b/rb/spec/integration/selenium/webdriver/edge/service_spec.rb index cb13efaf4d904..39160cf62bcd0 100644 --- a/rb/spec/integration/selenium/webdriver/edge/service_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/service_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Edge - describe Service, exclusive: {browser: :edge} do + describe Service, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :edge}] do let(:service) { described_class.new } let(:service_manager) { service.launch } diff --git a/rb/spec/integration/selenium/webdriver/element_spec.rb b/rb/spec/integration/selenium/webdriver/element_spec.rb index 4868e202d3070..d5985d64dcf0d 100644 --- a/rb/spec/integration/selenium/webdriver/element_spec.rb +++ b/rb/spec/integration/selenium/webdriver/element_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Element do + describe Element, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do it 'clicks' do driver.navigate.to url_for('formPage.html') expect { driver.find_element(id: 'imageButton').click }.not_to raise_error diff --git a/rb/spec/integration/selenium/webdriver/error_spec.rb b/rb/spec/integration/selenium/webdriver/error_spec.rb index 577df2c64d2d7..ab168263e2b6e 100644 --- a/rb/spec/integration/selenium/webdriver/error_spec.rb +++ b/rb/spec/integration/selenium/webdriver/error_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Error do + describe Error, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do it 'raises an appropriate error' do driver.navigate.to url_for('xhtmlTest.html') diff --git a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb index 9ec85e2479ed8..d522b2d6b3cbf 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Firefox - describe Driver, exclusive: {browser: :firefox} do + describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :firefox}] do let(:extensions) { '../../../../../../common/extensions/' } describe '#print_options' do diff --git a/rb/spec/integration/selenium/webdriver/firefox/profile_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/profile_spec.rb index cb5a488751bf9..9da5a67e957df 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/profile_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/profile_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Firefox - describe Profile, exclusive: {browser: :firefox} do + describe Profile, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :firefox}] do let(:profile) { described_class.new } before do diff --git a/rb/spec/integration/selenium/webdriver/firefox/service_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/service_spec.rb index 74fac7f65e3af..8cd66cc67619c 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/service_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/service_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Firefox - describe Service, exclusive: {browser: :firefox} do + describe Service, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {browser: :firefox}] do let(:service) { described_class.new } let(:service_manager) { service.launch } diff --git a/rb/spec/integration/selenium/webdriver/guard_spec.rb b/rb/spec/integration/selenium/webdriver/guard_spec.rb index d53bacce60665..1353f3bae14b1 100644 --- a/rb/spec/integration/selenium/webdriver/guard_spec.rb +++ b/rb/spec/integration/selenium/webdriver/guard_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Support - describe Guards, exclusive: {driver: :chrome} do + describe Guards, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {driver: :chrome}] do describe '#exclude' do it 'ignores an unrecognized guard parameter', invalid: {browser: :chrome} do # pass diff --git a/rb/spec/integration/selenium/webdriver/listener_spec.rb b/rb/spec/integration/selenium/webdriver/listener_spec.rb index 2b44829345262..2cf960ff00be1 100644 --- a/rb/spec/integration/selenium/webdriver/listener_spec.rb +++ b/rb/spec/integration/selenium/webdriver/listener_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Driver do + describe Driver, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do before { quit_driver } it 'supports listener' do diff --git a/rb/spec/integration/selenium/webdriver/manager_spec.rb b/rb/spec/integration/selenium/webdriver/manager_spec.rb index 600ebc68261c3..f06afd7302cc9 100644 --- a/rb/spec/integration/selenium/webdriver/manager_spec.rb +++ b/rb/spec/integration/selenium/webdriver/manager_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Manager do + describe Manager, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do describe 'cookie management' do before { driver.navigate.to url_for('xhtmlTest.html') } diff --git a/rb/spec/integration/selenium/webdriver/navigation_spec.rb b/rb/spec/integration/selenium/webdriver/navigation_spec.rb index 4b98516c84480..b7586bc1bb9d8 100644 --- a/rb/spec/integration/selenium/webdriver/navigation_spec.rb +++ b/rb/spec/integration/selenium/webdriver/navigation_spec.rb @@ -19,7 +19,7 @@ require_relative 'spec_helper' -describe 'Navigation' do +describe 'Navigation', exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do it 'navigates back and forward' do form_title = 'We Leave From Here' result_title = 'We Arrive Here' diff --git a/rb/spec/integration/selenium/webdriver/remote/driver_spec.rb b/rb/spec/integration/selenium/webdriver/remote/driver_spec.rb index e402fc7d0f1c0..36038859cd303 100644 --- a/rb/spec/integration/selenium/webdriver/remote/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/remote/driver_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Remote - describe Driver, exclusive: {driver: :remote} do + describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, {driver: :remote}] do it 'exposes session_id' do expect(driver.session_id).to be_a(String) end diff --git a/rb/spec/integration/selenium/webdriver/remote/element_spec.rb b/rb/spec/integration/selenium/webdriver/remote/element_spec.rb index fb66a3195f7da..509ba1608c1e8 100644 --- a/rb/spec/integration/selenium/webdriver/remote/element_spec.rb +++ b/rb/spec/integration/selenium/webdriver/remote/element_spec.rb @@ -21,14 +21,12 @@ module Selenium module WebDriver - describe Element do + describe Element, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do before do driver.file_detector = ->(filename) { File.join(__dir__, filename) } end - after do - driver.file_detector = nil - end + after { driver.file_detector = nil } context 'when uploading one file' do it 'uses the provided file detector', exclusive: {driver: :remote}, diff --git a/rb/spec/integration/selenium/webdriver/safari/driver_spec.rb b/rb/spec/integration/selenium/webdriver/safari/driver_spec.rb index 541e35ef4fdb9..520e39792e7b8 100644 --- a/rb/spec/integration/selenium/webdriver/safari/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/safari/driver_spec.rb @@ -22,7 +22,8 @@ module Selenium module WebDriver module Safari - describe Driver, exclusive: {browser: %i[safari safari_preview]} do + describe Driver, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, + {browser: %i[safari safari_preview]}] do it 'gets and sets permissions' do driver.permissions = {'getUserMedia' => false} expect(driver.permissions).to eq('getUserMedia' => false) diff --git a/rb/spec/integration/selenium/webdriver/select_spec.rb b/rb/spec/integration/selenium/webdriver/select_spec.rb index 715dbe5e7ba89..fd14626283c08 100644 --- a/rb/spec/integration/selenium/webdriver/select_spec.rb +++ b/rb/spec/integration/selenium/webdriver/select_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module Support - describe Select do + describe Select, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do let(:select) { described_class.new(driver.find_element(name: 'selectomatic')) } let(:multi_select) { described_class.new(driver.find_element(id: 'multi')) } let(:single_disabled) { described_class.new(driver.find_element(name: 'single_disabled')) } diff --git a/rb/spec/integration/selenium/webdriver/shadow_root_spec.rb b/rb/spec/integration/selenium/webdriver/shadow_root_spec.rb index 91b9f889dccbc..00bada8e87970 100644 --- a/rb/spec/integration/selenium/webdriver/shadow_root_spec.rb +++ b/rb/spec/integration/selenium/webdriver/shadow_root_spec.rb @@ -21,7 +21,8 @@ module Selenium module WebDriver - describe ShadowRoot, only: {browser: %i[chrome firefox edge safari]} do + describe ShadowRoot, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, + {browser: %i[chrome firefox edge safari]}] do before { driver.navigate.to url_for('webComponents.html') } let(:custom_element) { driver.find_element(css: 'custom-checkbox-element') } diff --git a/rb/spec/integration/selenium/webdriver/storage_spec.rb b/rb/spec/integration/selenium/webdriver/storage_spec.rb index 264ea8958e79a..a438984eb9706 100644 --- a/rb/spec/integration/selenium/webdriver/storage_spec.rb +++ b/rb/spec/integration/selenium/webdriver/storage_spec.rb @@ -22,7 +22,7 @@ module Selenium module WebDriver module DriverExtensions - describe HasWebStorage do + describe HasWebStorage, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do shared_examples 'web storage' do before do driver.navigate.to url_for('clicks.html') diff --git a/rb/spec/integration/selenium/webdriver/takes_screenshot_spec.rb b/rb/spec/integration/selenium/webdriver/takes_screenshot_spec.rb index 3cbc87ac970d2..a7082d7f0702b 100644 --- a/rb/spec/integration/selenium/webdriver/takes_screenshot_spec.rb +++ b/rb/spec/integration/selenium/webdriver/takes_screenshot_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe TakesScreenshot do + describe TakesScreenshot, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do before do driver.navigate.to url_for('xhtmlTest.html') end @@ -80,9 +80,7 @@ def save_screenshot_and_assert(source, path) driver.navigate.to url_for('printPage.html') end - after do - FileUtils.rm_rf(path) - end + after { FileUtils.rm_rf(path) } it 'takes viewport screenshot by default' do viewport_width = driver.execute_script('return window.innerWidth;') diff --git a/rb/spec/integration/selenium/webdriver/target_locator_spec.rb b/rb/spec/integration/selenium/webdriver/target_locator_spec.rb index 1f76430b44ec3..5c32083143c5e 100644 --- a/rb/spec/integration/selenium/webdriver/target_locator_spec.rb +++ b/rb/spec/integration/selenium/webdriver/target_locator_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe TargetLocator do + describe TargetLocator, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do before { @original_window = driver.window_handle } after do @@ -325,7 +325,7 @@ module WebDriver end describe 'unhandled alert error' do - after { reset_driver! } + after { |example| reset_driver!(example: example) } it 'raises an UnexpectedAlertOpenError if an alert has not been dealt with' do driver.navigate.to url_for('alerts.html') diff --git a/rb/spec/integration/selenium/webdriver/timeout_spec.rb b/rb/spec/integration/selenium/webdriver/timeout_spec.rb index 843c13d81b2fe..934faafd3bc69 100644 --- a/rb/spec/integration/selenium/webdriver/timeout_spec.rb +++ b/rb/spec/integration/selenium/webdriver/timeout_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Timeouts do + describe Timeouts, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do before do driver.manage.timeouts.implicit_wait = 6 driver.manage.timeouts.page_load = 2 diff --git a/rb/spec/integration/selenium/webdriver/virtual_authenticator_spec.rb b/rb/spec/integration/selenium/webdriver/virtual_authenticator_spec.rb index 594c407a27e77..16c1ce255f5ac 100644 --- a/rb/spec/integration/selenium/webdriver/virtual_authenticator_spec.rb +++ b/rb/spec/integration/selenium/webdriver/virtual_authenticator_spec.rb @@ -21,7 +21,8 @@ module Selenium module WebDriver - describe VirtualAuthenticator, exclusive: {browser: %i[chrome edge]} do + describe VirtualAuthenticator, exclusive: [{bidi: false, reason: 'Not yet implemented with BiDi'}, + {browser: %i[chrome edge]}] do # A pkcs#8 encoded unencrypted EC256 private key as a base64url string. let(:pkcs8_private_key) do 'MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8_zMDQDYAxlU-Q' \ diff --git a/rb/spec/integration/selenium/webdriver/window_spec.rb b/rb/spec/integration/selenium/webdriver/window_spec.rb index 5d01db255da4a..8a5b588dd52ea 100644 --- a/rb/spec/integration/selenium/webdriver/window_spec.rb +++ b/rb/spec/integration/selenium/webdriver/window_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Window do + describe Window, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do after(:all) { reset_driver! } let(:window) { driver.manage.window } diff --git a/rb/spec/integration/selenium/webdriver/zipper_spec.rb b/rb/spec/integration/selenium/webdriver/zipper_spec.rb index 197e1cf5d630d..266c19ed2962b 100644 --- a/rb/spec/integration/selenium/webdriver/zipper_spec.rb +++ b/rb/spec/integration/selenium/webdriver/zipper_spec.rb @@ -21,7 +21,7 @@ module Selenium module WebDriver - describe Zipper do + describe Zipper, exclusive: {bidi: false, reason: 'Not yet implemented with BiDi'} do let(:base_file_name) { 'file.txt' } let(:file_content) { 'content' } let(:zip_file) { File.join(Dir.tmpdir, 'test.zip') } @@ -34,9 +34,7 @@ def create_file filename end - after do - FileUtils.rm_rf zip_file - end + after { FileUtils.rm_rf zip_file } describe '#zip' do it 'a file' do From 40da1a73a76dfefc3e91a7c36c6b24cd75eeb7c9 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 16:24:19 -0500 Subject: [PATCH 016/176] [rb] do not delete the reason message from the guard, we need it later --- rb/lib/selenium/webdriver/support/guards/guard.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rb/lib/selenium/webdriver/support/guards/guard.rb b/rb/lib/selenium/webdriver/support/guards/guard.rb index 877b1028c055a..a9f0acaccfd52 100644 --- a/rb/lib/selenium/webdriver/support/guards/guard.rb +++ b/rb/lib/selenium/webdriver/support/guards/guard.rb @@ -36,7 +36,7 @@ def initialize(guarded, type, guards = nil) @messages[:unknown] = 'TODO: Investigate why this is failing and file a bug report' @type = type - @reason = @guarded.delete(:reason) + @reason = @guarded[:reason] end def message From 199aaee8b960c2d38186c26ff0a98d761507d1da Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 16:25:16 -0500 Subject: [PATCH 017/176] [rb] when test is guarded just output the whole matching guard --- rb/lib/selenium/webdriver/support/guards/guard.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/rb/lib/selenium/webdriver/support/guards/guard.rb b/rb/lib/selenium/webdriver/support/guards/guard.rb index a9f0acaccfd52..6c86483dad555 100644 --- a/rb/lib/selenium/webdriver/support/guards/guard.rb +++ b/rb/lib/selenium/webdriver/support/guards/guard.rb @@ -36,7 +36,7 @@ def initialize(guarded, type, guards = nil) @messages[:unknown] = 'TODO: Investigate why this is failing and file a bug report' @type = type - @reason = @guarded[:reason] + @guarded[:reason] ||= 'No reason given' end def message @@ -45,10 +45,8 @@ def message "Bug Filed: #{@tracker}/#{@reason}" when Symbol @messages[@reason] - when String - @reason else - 'no reason given' + "Guarded by #{guarded};" end case @type From e98cc84f685f4841312a81505b4865755858bf5e Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 5 Jun 2024 18:03:05 -0500 Subject: [PATCH 018/176] [rb] fix the guard tests --- .../selenium/webdriver/support/guards/guard.rb | 13 +++++++------ rb/spec/unit/selenium/webdriver/guard_spec.rb | 17 +++++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/rb/lib/selenium/webdriver/support/guards/guard.rb b/rb/lib/selenium/webdriver/support/guards/guard.rb index 6c86483dad555..2bd46fb4494d1 100644 --- a/rb/lib/selenium/webdriver/support/guards/guard.rb +++ b/rb/lib/selenium/webdriver/support/guards/guard.rb @@ -27,7 +27,7 @@ class Guards # class Guard - attr_reader :guarded, :type, :messages, :reason + attr_reader :guarded, :type, :messages, :reason, :tracker def initialize(guarded, type, guards = nil) @guarded = guarded @@ -36,20 +36,21 @@ def initialize(guarded, type, guards = nil) @messages[:unknown] = 'TODO: Investigate why this is failing and file a bug report' @type = type - @guarded[:reason] ||= 'No reason given' + @reason = @guarded[:reason] || 'No reason given' + @guarded[:reason] = @reason end def message - details = case @reason + details = case reason when Integer - "Bug Filed: #{@tracker}/#{@reason}" + "Bug Filed: #{tracker}/#{reason}" when Symbol - @messages[@reason] + messages[reason] else "Guarded by #{guarded};" end - case @type + case type when :exclude "Test skipped because it breaks test run; #{details}" when :flaky diff --git a/rb/spec/unit/selenium/webdriver/guard_spec.rb b/rb/spec/unit/selenium/webdriver/guard_spec.rb index 08b56ee40ffad..4e24252195b69 100644 --- a/rb/spec/unit/selenium/webdriver/guard_spec.rb +++ b/rb/spec/unit/selenium/webdriver/guard_spec.rb @@ -77,14 +77,14 @@ module Support guards = described_class.new(example) guards.add_condition(:foo, false) - expect(guards.disposition).to eq [:pending, 'Test guarded; no reason given'] + expect(guards.disposition).to eq [:pending, 'Test guarded; Guarded by {:foo=>false, :reason=>"No reason given"};'] end it 'is skipped without provided reason', exclusive: {foo: true} do |example| guards = described_class.new(example) guards.add_condition(:foo, false) - message = 'Test does not apply to this configuration; no reason given' + message = 'Test does not apply to this configuration; Guarded by {:foo=>true, :reason=>"No reason given"};' expect(guards.disposition).to eq [:skip, message] end end @@ -138,7 +138,7 @@ module Support describe '#new' do it 'requires guarded Hash and type' do guard = described_class.new({foo: 7}, :only) - expect(guard.guarded).to eq(foo: 7) + expect(guard.guarded).to eq(foo: 7, reason: 'No reason given') expect(guard.type).to eq :only end @@ -157,7 +157,7 @@ module Support it 'defaults to no reason given' do guard = described_class.new({}, :only) - expect(guard.message).to eq('Test guarded; no reason given') + expect(guard.message).to eq('Test guarded; Guarded by {:reason=>"No reason given"};') end it 'accepts integer' do |example| @@ -170,7 +170,7 @@ module Support it 'accepts String' do guard = described_class.new({reason: 'because'}, :only) - expect(guard.message).to eq('Test guarded; because') + expect(guard.message).to eq('Test guarded; Guarded by {:reason=>"because"};') end it 'accepts Symbol of known message' do @@ -190,19 +190,20 @@ module Support it 'has special message for exclude' do guard = described_class.new({reason: 'because'}, :exclude) - expect(guard.message).to eq('Test skipped because it breaks test run; because') + expect(guard.message).to eq('Test skipped because it breaks test run; Guarded by {:reason=>"because"};') end it 'has special message for flaky' do guard = described_class.new({reason: 'because'}, :flaky) - expect(guard.message).to eq('Test skipped because it is unreliable in this configuration; because') + msg = 'Test skipped because it is unreliable in this configuration; Guarded by {:reason=>"because"};' + expect(guard.message).to eq(msg) end it 'has special message for exclusive' do guard = described_class.new({reason: 'because'}, :exclusive) - expect(guard.message).to eq('Test does not apply to this configuration; because') + expect(guard.message).to eq('Test does not apply to this configuration; Guarded by {:reason=>"because"};') end end end From 5c3d526d06efb201c2038c66f616c13f7208794d Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 6 Jun 2024 07:02:56 -0500 Subject: [PATCH 019/176] [rb] fix linting failures --- rb/spec/unit/selenium/webdriver/guard_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rb/spec/unit/selenium/webdriver/guard_spec.rb b/rb/spec/unit/selenium/webdriver/guard_spec.rb index 4e24252195b69..60a17ac67eff4 100644 --- a/rb/spec/unit/selenium/webdriver/guard_spec.rb +++ b/rb/spec/unit/selenium/webdriver/guard_spec.rb @@ -77,7 +77,8 @@ module Support guards = described_class.new(example) guards.add_condition(:foo, false) - expect(guards.disposition).to eq [:pending, 'Test guarded; Guarded by {:foo=>false, :reason=>"No reason given"};'] + expect(guards.disposition).to eq [:pending, + 'Test guarded; Guarded by {:foo=>false, :reason=>"No reason given"};'] end it 'is skipped without provided reason', exclusive: {foo: true} do |example| From 8e268cfaf3997cde043e8d870e73b42703ff0f1d Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Thu, 6 Jun 2024 07:45:47 -0500 Subject: [PATCH 020/176] [build] Add Bazel bidi flag (#14083) * [build] implement bazel targets for running ruby tests with BiDi * add necessary bidi targets to skipped-tests for rbe --- .skipped-tests | 6 ++++++ rb/spec/tests.bzl | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/.skipped-tests b/.skipped-tests index 38374bfabbe59..4764a7b9cbe08 100644 --- a/.skipped-tests +++ b/.skipped-tests @@ -28,3 +28,9 @@ -//rb/spec/integration/selenium/webdriver/firefox:service-firefox-beta -//rb/spec/integration/selenium/webdriver:element-chrome -//rb/spec/integration/selenium/webdriver/firefox:driver-firefox-beta +-//rb/spec/integration/selenium/webdriver/chrome:service-chrome-bidi +-//rb/spec/integration/selenium/webdriver/edge:service-edge-bidi +-//rb/spec/integration/selenium/webdriver/firefox:service-firefox-bidi +-//rb/spec/integration/selenium/webdriver/firefox:service-firefox-beta-bidi +-//rb/spec/integration/selenium/webdriver:element-chrome-bidi +-//rb/spec/integration/selenium/webdriver/firefox:driver-firefox-beta-bidi diff --git a/rb/spec/tests.bzl b/rb/spec/tests.bzl index 9c0f1596de6e9..aee4889e49453 100644 --- a/rb/spec/tests.bzl +++ b/rb/spec/tests.bzl @@ -197,6 +197,21 @@ def rb_integration_test(name, srcs, deps = [], data = [], browsers = BROWSERS.ke target_compatible_with = BROWSERS[browser]["target_compatible_with"], ) + # Generate a test target for bidi browser execution. + rb_test( + name = "{}-{}-bidi".format(name, browser), + size = "large", + srcs = srcs, + args = ["rb/spec/"], + data = BROWSERS[browser]["data"] + data + ["//common/src/web"], + env = BROWSERS[browser]["env"] | {"WEBDRIVER_BIDI": "true"}, + main = "@bundle//bin:rspec", + tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-bidi".format(browser)], + deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps, + visibility = ["//rb:__subpackages__"], + target_compatible_with = BROWSERS[browser]["target_compatible_with"], + ) + def rb_unit_test(name, srcs, deps, data = []): rb_test( name = name, From 3597ecdaf86cba927a7f31d379f2fd8bb098889f Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Thu, 6 Jun 2024 11:04:53 -0500 Subject: [PATCH 021/176] [rb] implement toggle for BiDi and Classic implementations (#14092) [rb] use BiDiBridge subclass when web_socket_url is true --- rb/lib/selenium/webdriver/common/driver.rb | 3 +- rb/lib/selenium/webdriver/remote.rb | 1 + .../selenium/webdriver/remote/bidi_bridge.rb | 44 +++++++++++++++++++ rb/lib/selenium/webdriver/remote/bridge.rb | 10 ++--- .../selenium/webdriver/bidi/script_spec.rb | 5 +-- rb/spec/tests.bzl | 6 ++- 6 files changed, 57 insertions(+), 12 deletions(-) create mode 100644 rb/lib/selenium/webdriver/remote/bidi_bridge.rb diff --git a/rb/lib/selenium/webdriver/common/driver.rb b/rb/lib/selenium/webdriver/common/driver.rb index 41a079017d8ad..643d477ef381d 100644 --- a/rb/lib/selenium/webdriver/common/driver.rb +++ b/rb/lib/selenium/webdriver/common/driver.rb @@ -318,7 +318,8 @@ def ref attr_reader :bridge def create_bridge(caps:, url:, http_client: nil) - Remote::Bridge.new(http_client: http_client, url: url).tap do |bridge| + klass = caps['webSocketUrl'] ? Remote::BiDiBridge : Remote::Bridge + klass.new(http_client: http_client, url: url).tap do |bridge| bridge.create_session(caps) end end diff --git a/rb/lib/selenium/webdriver/remote.rb b/rb/lib/selenium/webdriver/remote.rb index 44baebffb3816..1f73c4b93270d 100644 --- a/rb/lib/selenium/webdriver/remote.rb +++ b/rb/lib/selenium/webdriver/remote.rb @@ -25,6 +25,7 @@ module WebDriver module Remote autoload :Features, 'selenium/webdriver/remote/features' autoload :Bridge, 'selenium/webdriver/remote/bridge' + autoload :BiDiBridge, 'selenium/webdriver/remote/bidi_bridge' autoload :Driver, 'selenium/webdriver/remote/driver' autoload :Response, 'selenium/webdriver/remote/response' autoload :Capabilities, 'selenium/webdriver/remote/capabilities' diff --git a/rb/lib/selenium/webdriver/remote/bidi_bridge.rb b/rb/lib/selenium/webdriver/remote/bidi_bridge.rb new file mode 100644 index 0000000000000..4207577cf14dc --- /dev/null +++ b/rb/lib/selenium/webdriver/remote/bidi_bridge.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +module Selenium + module WebDriver + module Remote + class BiDiBridge < Bridge + attr_reader :bidi + + def create_session(capabilities) + super(capabilities) + socket_url = @capabilities[:web_socket_url] + @bidi = Selenium::WebDriver::BiDi.new(url: socket_url) + end + + def quit + super + ensure + bidi.close + end + + def close + execute(:close_window).tap { |handles| bidi.close if handles.empty? } + end + end # BiDiBridge + end # Remote + end # WebDriver +end # Selenium diff --git a/rb/lib/selenium/webdriver/remote/bridge.rb b/rb/lib/selenium/webdriver/remote/bridge.rb index eb0b748b3702c..3dd8a799c5249 100644 --- a/rb/lib/selenium/webdriver/remote/bridge.rb +++ b/rb/lib/selenium/webdriver/remote/bridge.rb @@ -213,12 +213,10 @@ def quit http.close rescue *QUIT_ERRORS nil - ensure - @bidi&.close end def close - execute(:close_window).tap { |handles| @bidi&.close if handles.empty? } + execute :close_window end def refresh @@ -605,10 +603,8 @@ def user_verified(verified, authenticator_id) end def bidi - msg = 'this operation requires enabling BiDi by setting #web_socket_url to true in options class' - raise(WebDriver::Error::WebDriverError, msg) unless capabilities.web_socket_url - - @bidi ||= Selenium::WebDriver::BiDi.new(url: capabilities[:web_socket_url]) + msg = 'BiDi must be enabled by setting #web_socket_url to true in options class' + raise(WebDriver::Error::WebDriverError, msg) end def command_list diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb index f32aa39118779..34fef2e314393 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -27,9 +27,8 @@ module WebDriver it 'errors when bidi not enabled' do reset_driver!(web_socket_url: false) do |driver| - expect { - driver.script - }.to raise_error(WebDriver::Error::WebDriverError, /this operation requires enabling BiDi/) + msg = /BiDi must be enabled by setting #web_socket_url to true in options class/ + expect { driver.script }.to raise_error(WebDriver::Error::WebDriverError, msg) end end diff --git a/rb/spec/tests.bzl b/rb/spec/tests.bzl index aee4889e49453..bb1604161659a 100644 --- a/rb/spec/tests.bzl +++ b/rb/spec/tests.bzl @@ -207,7 +207,11 @@ def rb_integration_test(name, srcs, deps = [], data = [], browsers = BROWSERS.ke env = BROWSERS[browser]["env"] | {"WEBDRIVER_BIDI": "true"}, main = "@bundle//bin:rspec", tags = COMMON_TAGS + BROWSERS[browser]["tags"] + tags + ["{}-bidi".format(browser)], - deps = ["//rb/spec/integration/selenium/webdriver:spec_helper"] + BROWSERS[browser]["deps"] + deps, + deps = depset( + ["//rb/spec/integration/selenium/webdriver:spec_helper", "//rb/lib/selenium/webdriver:bidi"] + + BROWSERS[browser]["deps"] + + deps, + ), visibility = ["//rb:__subpackages__"], target_compatible_with = BROWSERS[browser]["target_compatible_with"], ) From 55f7a1d2f755b1d7d47d1e2c26a99dca69ac407d Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Thu, 6 Jun 2024 14:28:29 -0500 Subject: [PATCH 022/176] [dotnet] add asynchronous methods to Navigation class (#14051) * allow driver to execute commands asynchronously * implement navigation commands with async tasks * dd async navigation methods to interface and implement in event firing webdriver * add explicit tests for navigation async methods * use async delegate with Task.Run instead of ConfigureAwait --- .../support/Events/EventFiringWebDriver.cs | 97 +++++++++++++++---- dotnet/src/webdriver/ICommandExecutor.cs | 9 ++ dotnet/src/webdriver/INavigation.cs | 33 +++++++ dotnet/src/webdriver/Navigator.cs | 86 +++++++++++++--- .../Remote/DriverServiceCommandExecutor.cs | 13 ++- .../webdriver/Remote/HttpCommandExecutor.cs | 12 ++- dotnet/src/webdriver/WebDriver.cs | 25 ++++- dotnet/test/common/NavigationTest.cs | 71 +++++++++++++- .../Events/EventFiringWebDriverTest.cs | 11 ++- 9 files changed, 315 insertions(+), 42 deletions(-) diff --git a/dotnet/src/support/Events/EventFiringWebDriver.cs b/dotnet/src/support/Events/EventFiringWebDriver.cs index ac428cf2830b5..77a3b5f3b50a5 100644 --- a/dotnet/src/support/Events/EventFiringWebDriver.cs +++ b/dotnet/src/support/Events/EventFiringWebDriver.cs @@ -20,6 +20,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Drawing; +using System.Threading.Tasks; namespace OpenQA.Selenium.Support.Events { @@ -845,12 +846,24 @@ public EventFiringNavigation(EventFiringWebDriver driver) /// Move the browser back /// public void Back() + { + Task.Run(async delegate + { + await this.BackAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Move the browser back as an asynchronous task. + /// + /// A task object representing the asynchronous operation + public async Task BackAsync() { try { WebDriverNavigationEventArgs e = new WebDriverNavigationEventArgs(this.parentDriver); this.parentDriver.OnNavigatingBack(e); - this.wrappedNavigation.Back(); + await this.wrappedNavigation.BackAsync().ConfigureAwait(false); this.parentDriver.OnNavigatedBack(e); } catch (Exception ex) @@ -861,15 +874,27 @@ public void Back() } /// - /// Move the browser forward + /// Move a single "item" forward in the browser's history. /// public void Forward() + { + Task.Run(async delegate + { + await this.ForwardAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Move a single "item" forward in the browser's history as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + public async Task ForwardAsync() { try { WebDriverNavigationEventArgs e = new WebDriverNavigationEventArgs(this.parentDriver); this.parentDriver.OnNavigatingForward(e); - this.wrappedNavigation.Forward(); + await this.wrappedNavigation.ForwardAsync().ConfigureAwait(false); this.parentDriver.OnNavigatedForward(e); } catch (Exception ex) @@ -880,16 +905,34 @@ public void Forward() } /// - /// Navigate to a url for your test + /// Navigate to a url. /// /// String of where you want the browser to go to public void GoToUrl(string url) { + Task.Run(async delegate + { + await this.GoToUrlAsync(url); + }).GetAwaiter().GetResult(); + } + + /// + /// Navigate to a url as an asynchronous task. + /// + /// String of where you want the browser to go. + /// A task object representing the asynchronous operation. + public async Task GoToUrlAsync(string url) + { + if (url == null) + { + throw new ArgumentNullException(nameof(url), "url cannot be null"); + } + try { WebDriverNavigationEventArgs e = new WebDriverNavigationEventArgs(this.parentDriver, url); this.parentDriver.OnNavigating(e); - this.wrappedNavigation.GoToUrl(url); + await this.wrappedNavigation.GoToUrlAsync(url).ConfigureAwait(false); this.parentDriver.OnNavigated(e); } catch (Exception ex) @@ -900,38 +943,52 @@ public void GoToUrl(string url) } /// - /// Navigate to a url for your test + /// Navigate to a url. /// /// Uri object of where you want the browser to go to public void GoToUrl(Uri url) + { + Task.Run(async delegate + { + await this.GoToUrlAsync(url); + }).GetAwaiter().GetResult(); + } + + /// + /// Navigate to a url as an asynchronous task. + /// + /// Uri object of where you want the browser to go. + /// A task object representing the asynchronous operation. + public async Task GoToUrlAsync(Uri url) { if (url == null) { throw new ArgumentNullException(nameof(url), "url cannot be null"); } - try - { - WebDriverNavigationEventArgs e = new WebDriverNavigationEventArgs(this.parentDriver, url.ToString()); - this.parentDriver.OnNavigating(e); - this.wrappedNavigation.GoToUrl(url); - this.parentDriver.OnNavigated(e); - } - catch (Exception ex) - { - this.parentDriver.OnException(new WebDriverExceptionEventArgs(this.parentDriver, ex)); - throw; - } + await this.GoToUrlAsync(url.ToString()).ConfigureAwait(false); } /// - /// Refresh the browser + /// Reload the current page. /// public void Refresh() + { + Task.Run(async delegate + { + await this.RefreshAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Reload the current page as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + public async Task RefreshAsync() { try { - this.wrappedNavigation.Refresh(); + await this.wrappedNavigation.RefreshAsync().ConfigureAwait(false); } catch (Exception ex) { diff --git a/dotnet/src/webdriver/ICommandExecutor.cs b/dotnet/src/webdriver/ICommandExecutor.cs index 68cfe200391f4..3bcfb520166d3 100644 --- a/dotnet/src/webdriver/ICommandExecutor.cs +++ b/dotnet/src/webdriver/ICommandExecutor.cs @@ -17,6 +17,7 @@ // using System; +using System.Threading.Tasks; namespace OpenQA.Selenium { @@ -39,5 +40,13 @@ public interface ICommandExecutor : IDisposable /// The command you wish to execute /// A response from the browser Response Execute(Command commandToExecute); + + + /// + /// Executes a command as an asynchronous task. + /// + /// The command you wish to execute + /// A task object representing the asynchronous operation + Task ExecuteAsync(Command commandToExecute); } } diff --git a/dotnet/src/webdriver/INavigation.cs b/dotnet/src/webdriver/INavigation.cs index bff75d4743e6b..a55b4dfda12bf 100644 --- a/dotnet/src/webdriver/INavigation.cs +++ b/dotnet/src/webdriver/INavigation.cs @@ -17,6 +17,7 @@ // using System; +using System.Threading.Tasks; namespace OpenQA.Selenium { @@ -31,12 +32,24 @@ public interface INavigation /// void Back(); + /// + /// Move back a single entry in the browser's history as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + Task BackAsync(); + /// /// Move a single "item" forward in the browser's history. /// /// Does nothing if we are on the latest page viewed. void Forward(); + /// + /// Move a single "item" forward in the browser's history as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + Task ForwardAsync(); + /// /// Load a new web page in the current browser window. /// @@ -52,6 +65,13 @@ public interface INavigation /// void GoToUrl(string url); + /// + /// Navigate to a url as an asynchronous task. + /// + /// String of where you want the browser to go. + /// A task object representing the asynchronous operation. + Task GoToUrlAsync(string url); + /// /// Load a new web page in the current browser window. /// @@ -67,9 +87,22 @@ public interface INavigation /// void GoToUrl(Uri url); + /// + /// Navigate to a url as an asynchronous task. + /// + /// Uri object of where you want the browser to go. + /// A task object representing the asynchronous operation. + Task GoToUrlAsync(Uri url); + /// /// Refreshes the current page. /// void Refresh(); + + /// + /// Reload the current page as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + Task RefreshAsync(); } } diff --git a/dotnet/src/webdriver/Navigator.cs b/dotnet/src/webdriver/Navigator.cs index f8f6047e91f5a..48683a03c9fe1 100644 --- a/dotnet/src/webdriver/Navigator.cs +++ b/dotnet/src/webdriver/Navigator.cs @@ -18,6 +18,7 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; namespace OpenQA.Selenium { @@ -38,26 +39,63 @@ public Navigator(WebDriver driver) } /// - /// Move the browser back + /// Move back a single entry in the browser's history. /// public void Back() { - this.driver.InternalExecute(DriverCommand.GoBack, null); + Task.Run(async delegate + { + await this.BackAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Move back a single entry in the browser's history as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + public async Task BackAsync() + { + await this.driver.InternalExecuteAsync(DriverCommand.GoBack, null).ConfigureAwait(false); } /// - /// Move the browser forward + /// Move a single "item" forward in the browser's history. /// public void Forward() { - this.driver.InternalExecute(DriverCommand.GoForward, null); + Task.Run(async delegate + { + await this.ForwardAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Move a single "item" forward in the browser's history as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + public async Task ForwardAsync() + { + await this.driver.InternalExecuteAsync(DriverCommand.GoForward, null).ConfigureAwait(false); } /// - /// Navigate to a url for your test + /// Navigate to a url. /// /// String of where you want the browser to go to public void GoToUrl(string url) + { + Task.Run(async delegate + { + await this.GoToUrlAsync(url); + }).GetAwaiter().GetResult(); + } + + /// + /// Navigate to a url as an asynchronous task. + /// + /// String of where you want the browser to go. + /// A task object representing the asynchronous operation. + public async Task GoToUrlAsync(string url) { if (url == null) { @@ -68,31 +106,55 @@ public void GoToUrl(string url) { { "url", url } }; - this.driver.InternalExecute(DriverCommand.Get, parameters); - + await this.driver.InternalExecuteAsync(DriverCommand.Get, parameters).ConfigureAwait(false); } /// - /// Navigate to a url for your test + /// Navigate to a url. /// - /// Uri object of where you want the browser to go to + /// Uri object of where you want the browser to go. public void GoToUrl(Uri url) + { + Task.Run(async delegate + { + await this.GoToUrlAsync(url); + }).GetAwaiter().GetResult(); + } + + /// + /// Navigate to a url as an asynchronous task. + /// + /// Uri object of where you want the browser to go. + /// A task object representing the asynchronous operation. + public async Task GoToUrlAsync(Uri url) { if (url == null) { throw new ArgumentNullException(nameof(url), "URL cannot be null."); } - this.GoToUrl(url.ToString()); + await this.GoToUrlAsync(url.ToString()).ConfigureAwait(false); } /// - /// Refresh the browser + /// Reload the current page. /// public void Refresh() + { + Task.Run(async delegate + { + await this.RefreshAsync(); + }).GetAwaiter().GetResult(); + } + + /// + /// Reload the current page as an asynchronous task. + /// + /// A task object representing the asynchronous operation. + public async Task RefreshAsync() { // driver.SwitchTo().DefaultContent(); - this.driver.InternalExecute(DriverCommand.Refresh, null); + await this.driver.InternalExecuteAsync(DriverCommand.Refresh, null).ConfigureAwait(false); } } } diff --git a/dotnet/src/webdriver/Remote/DriverServiceCommandExecutor.cs b/dotnet/src/webdriver/Remote/DriverServiceCommandExecutor.cs index 4b0fcb27ed7fc..1e486ad96f98d 100644 --- a/dotnet/src/webdriver/Remote/DriverServiceCommandExecutor.cs +++ b/dotnet/src/webdriver/Remote/DriverServiceCommandExecutor.cs @@ -17,6 +17,7 @@ // using System; +using System.Threading.Tasks; namespace OpenQA.Selenium.Remote { @@ -92,6 +93,16 @@ public HttpCommandExecutor HttpExecutor /// The command you wish to execute /// A response from the browser public Response Execute(Command commandToExecute) + { + return Task.Run(() => this.ExecuteAsync(commandToExecute)).GetAwaiter().GetResult(); + } + + /// + /// Executes a command as an asynchronous task. + /// + /// The command you wish to execute + /// A task object representing the asynchronous operation + public async Task ExecuteAsync(Command commandToExecute) { if (commandToExecute == null) { @@ -108,7 +119,7 @@ public Response Execute(Command commandToExecute) // command, so that we can get the finally block. try { - toReturn = this.internalExecutor.Execute(commandToExecute); + toReturn = await this.internalExecutor.ExecuteAsync(commandToExecute).ConfigureAwait(false); } finally { diff --git a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs index 3dbb5e4efd179..1872e418a7888 100644 --- a/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs +++ b/dotnet/src/webdriver/Remote/HttpCommandExecutor.cs @@ -158,6 +158,16 @@ public bool TryAddCommand(string commandName, CommandInfo info) /// The command you wish to execute /// A response from the browser public virtual Response Execute(Command commandToExecute) + { + return Task.Run(() => this.ExecuteAsync(commandToExecute)).GetAwaiter().GetResult(); + } + + /// + /// Executes a command as an asynchronous task. + /// + /// The command you wish to execute + /// A task object representing the asynchronous operation + public virtual async Task ExecuteAsync(Command commandToExecute) { if (commandToExecute == null) { @@ -184,7 +194,7 @@ public virtual Response Execute(Command commandToExecute) HttpResponseInfo responseInfo = null; try { - responseInfo = Task.Run(async () => await this.MakeHttpRequest(requestInfo)).GetAwaiter().GetResult(); + responseInfo = await this.MakeHttpRequest(requestInfo).ConfigureAwait(false); } catch (HttpRequestException ex) { diff --git a/dotnet/src/webdriver/WebDriver.cs b/dotnet/src/webdriver/WebDriver.cs index 3de43e25c452f..d063e8f5905ea 100644 --- a/dotnet/src/webdriver/WebDriver.cs +++ b/dotnet/src/webdriver/WebDriver.cs @@ -24,6 +24,7 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Globalization; +using System.Threading.Tasks; namespace OpenQA.Selenium { @@ -556,7 +557,25 @@ internal ReadOnlyCollection GetElementsFromResponse(Response respon /// WebDriver Response internal Response InternalExecute(string driverCommandToExecute, Dictionary parameters) { - return this.Execute(driverCommandToExecute, parameters); + return Task.Run(() => this.InternalExecuteAsync(driverCommandToExecute, parameters)).GetAwaiter().GetResult(); + } + + /// + /// Executes commands with the driver asynchronously + /// + /// Command that needs executing + /// Parameters needed for the command + /// A task object representing the asynchronous operation + internal Task InternalExecuteAsync(string driverCommandToExecute, + Dictionary parameters) + { + return this.ExecuteAsync(driverCommandToExecute, parameters); + } + + internal Response Execute(string driverCommandToExecute, + Dictionary parameters) + { + return Task.Run(() => this.ExecuteAsync(driverCommandToExecute, parameters)).GetAwaiter().GetResult(); } /// @@ -565,7 +584,7 @@ internal Response InternalExecute(string driverCommandToExecute, DictionaryA value representing the command to execute. /// A containing the names and values of the parameters of the command. /// A containing information about the success or failure of the command and any data returned by the command. - protected virtual Response Execute(string driverCommandToExecute, Dictionary parameters) + protected virtual async Task ExecuteAsync(string driverCommandToExecute, Dictionary parameters) { Command commandToExecute = new Command(this.sessionId, driverCommandToExecute, parameters); @@ -573,7 +592,7 @@ protected virtual Response Execute(string driverCommandToExecute, Dictionary navigation.GoToUrl((Uri)null), Throws.InstanceOf()); - // new Uri("") and new Uri("isidsji30342??éåµñ©æ") + // new Uri("") and new Uri("isidsji30342??éåµñ©æ") // throw an exception, so we needn't worry about them. } @@ -90,5 +91,73 @@ public void ShouldRefreshPage() Assert.AreEqual("What's for dinner?", changedDiv.Text); } + [Test] + [NeedsFreshDriver(IsCreatedBeforeTest = true)] + public Task ShouldNotHaveProblemNavigatingWithNoPagesBrowsedAsync() + { + var navigation = driver.Navigate(); + Assert.DoesNotThrowAsync(async () => await navigation.BackAsync()); + Assert.DoesNotThrowAsync(async () => await navigation.ForwardAsync()); + return Task.CompletedTask; + } + + [Test] + public async Task ShouldGoBackAndForwardAsync() + { + INavigation navigation = driver.Navigate(); + + await navigation.GoToUrlAsync(macbethPage); + await navigation.GoToUrlAsync(simpleTestPage); + + await navigation.BackAsync(); + Assert.AreEqual(macbethTitle, driver.Title); + + await navigation.ForwardAsync(); + Assert.AreEqual(simpleTestTitle, driver.Title); + } + + [Test] + public void ShouldAcceptInvalidUrlsUsingUrisAsync() + { + INavigation navigation = driver.Navigate(); + Assert.That(async () => await navigation.GoToUrlAsync((Uri)null), Throws.InstanceOf()); + } + + [Test] + public async Task ShouldGoToUrlUsingStringAsync() + { + var navigation = driver.Navigate(); + + await navigation.GoToUrlAsync(macbethPage); + Assert.AreEqual(macbethTitle, driver.Title); + + await navigation.GoToUrlAsync(simpleTestPage); + Assert.AreEqual(simpleTestTitle, driver.Title); + } + + [Test] + public void ShouldGoToUrlUsingUriAsync() + { + var navigation = driver.Navigate(); + + navigation.GoToUrlAsync(new Uri(macbethPage)); + Assert.AreEqual(driver.Title, macbethTitle); + navigation.GoToUrl(new Uri(simpleTestPage)); + Assert.AreEqual(simpleTestTitle, driver.Title); + } + + [Test] + public async Task ShouldRefreshPageAsync() + { + await driver.Navigate().GoToUrlAsync(javascriptPage); + IWebElement changedDiv = driver.FindElement(By.Id("dynamo")); + driver.FindElement(By.Id("updatediv")).Click(); + + Assert.AreEqual("Fish and chips!", changedDiv.Text); + await driver.Navigate().RefreshAsync(); + + changedDiv = driver.FindElement(By.Id("dynamo")); + Assert.AreEqual("What's for dinner?", changedDiv.Text); + } } } diff --git a/dotnet/test/support/Events/EventFiringWebDriverTest.cs b/dotnet/test/support/Events/EventFiringWebDriverTest.cs index 972be725adfa9..3d59f056f3ee8 100644 --- a/dotnet/test/support/Events/EventFiringWebDriverTest.cs +++ b/dotnet/test/support/Events/EventFiringWebDriverTest.cs @@ -58,12 +58,15 @@ Navigated back Navigating forward Navigated forward "; + string normalizedExpectedLog = expectedLog.Replace("\r\n", "\n").Replace("\r", "\n"); mockDriver.VerifySet(x => x.Url = "http://www.get.com", Times.Once); mockDriver.Verify(x => x.Navigate(), Times.Exactly(3)); - mockNavigation.Verify(x => x.GoToUrl("http://www.navigate-to.com"), Times.Once); - mockNavigation.Verify(x => x.Back(), Times.Once); - mockNavigation.Verify(x => x.Forward(), Times.Once); - Assert.AreEqual(expectedLog, log.ToString()); + mockNavigation.Verify(x => x.GoToUrlAsync("http://www.navigate-to.com"), Times.Once); + mockNavigation.Verify(x => x.BackAsync(), Times.Once); + mockNavigation.Verify(x => x.ForwardAsync(), Times.Once); + + string normalizedActualLog = log.ToString().Replace("\r\n", "\n").Replace("\r", "\n"); + Assert.AreEqual(normalizedExpectedLog, normalizedActualLog); } [Test] From 850102fb79408de7f2d7b01fac24c720c28c7401 Mon Sep 17 00:00:00 2001 From: Alex Rodionov Date: Thu, 6 Jun 2024 21:00:42 -0700 Subject: [PATCH 023/176] [py] Add low-level sync API to use DevTools (#13977) --- py/BUILD.bazel | 2 + py/generate.py | 1 + py/requirements.txt | 1 + py/requirements_lock.txt | 4 + py/selenium/webdriver/remote/webdriver.py | 29 ++++ .../webdriver/remote/websocket_connection.py | 125 ++++++++++++++++++ .../webdriver/common/devtools_tests.py | 36 +++++ 7 files changed, 198 insertions(+) create mode 100644 py/selenium/webdriver/remote/websocket_connection.py create mode 100644 py/test/selenium/webdriver/common/devtools_tests.py diff --git a/py/BUILD.bazel b/py/BUILD.bazel index f521e51befce0..466bbb67cae55 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -179,6 +179,7 @@ py_library( requirement("trio_websocket"), requirement("urllib3"), requirement("certifi"), + requirement("websocket-client"), ], ) @@ -263,6 +264,7 @@ py_wheel( "trio-websocket~=0.9", "certifi>=2021.10.8", "typing_extensions>=4.9.0", + "websocket-client>=1.8.0", ], strip_path_prefixes = [ "py/", diff --git a/py/generate.py b/py/generate.py index 5d6ea7cb4b0ef..026e80673b40f 100644 --- a/py/generate.py +++ b/py/generate.py @@ -77,6 +77,7 @@ def event_class(method): ''' A decorator that registers a class as an event class. ''' def decorate(cls): _event_parsers[method] = cls + cls.event_class = method return cls return decorate diff --git a/py/requirements.txt b/py/requirements.txt index 64b2ee18ca655..b4b8092407fa8 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -32,5 +32,6 @@ trio-websocket==0.9.2 twine==4.0.2 typing_extensions==4.9.0 urllib3[socks]==2.0.7 +websocket-client==1.8.0 wsproto==1.2.0 zipp==3.17.0 diff --git a/py/requirements_lock.txt b/py/requirements_lock.txt index b4746763676c5..037a8bda20bd5 100644 --- a/py/requirements_lock.txt +++ b/py/requirements_lock.txt @@ -521,6 +521,10 @@ urllib3[socks]==2.0.7 \ # -r py/requirements.txt # requests # twine +websocket-client==1.8.0 \ + --hash=sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526 \ + --hash=sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da + # via -r py/requirements.txt wsproto==1.2.0 \ --hash=sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065 \ --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index ccb6b0b5e1830..9e05d5165e8e8 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -63,8 +63,10 @@ from .shadowroot import ShadowRoot from .switch_to import SwitchTo from .webelement import WebElement +from .websocket_connection import WebSocketConnection cdp = None +devtools = None def import_cdp(): @@ -207,6 +209,7 @@ def __init__( self._authenticator_id = None self.start_client() self.start_session(capabilities) + self._websocket_connection = None def __repr__(self): return f'<{type(self).__module__}.{type(self).__name__} (session="{self.session_id}")>' @@ -1018,6 +1021,32 @@ def get_log(self, log_type): """ return self.execute(Command.GET_LOG, {"type": log_type})["value"] + def start_devtools(self): + global devtools + if self._websocket_connection: + return devtools, self._websocket_connection + else: + global cdp + import_cdp() + + if not devtools: + if self.caps.get("se:cdp"): + ws_url = self.caps.get("se:cdp") + version = self.caps.get("se:cdpVersion").split(".")[0] + else: + version, ws_url = self._get_cdp_details() + + if not ws_url: + raise WebDriverException("Unable to find url to connect to from capabilities") + + devtools = cdp.import_devtools(version) + self._websocket_connection = WebSocketConnection(ws_url) + targets = self._websocket_connection.execute(devtools.target.get_targets()) + target_id = targets[0].target_id + session = self._websocket_connection.execute(devtools.target.attach_to_target(target_id, True)) + self._websocket_connection.session_id = session + return devtools, self._websocket_connection + @asynccontextmanager async def bidi_connection(self): global cdp diff --git a/py/selenium/webdriver/remote/websocket_connection.py b/py/selenium/webdriver/remote/websocket_connection.py new file mode 100644 index 0000000000000..0eb842bb8d8f8 --- /dev/null +++ b/py/selenium/webdriver/remote/websocket_connection.py @@ -0,0 +1,125 @@ +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +import json +import logging +from ssl import CERT_NONE +from threading import Thread +from time import sleep + +from websocket import WebSocketApp + +logger = logging.getLogger("websocket") + + +class WebSocketConnection: + _response_wait_timeout = 30 + _response_wait_interval = 0.1 + + _max_log_message_size = 9999 + + def __init__(self, url): + self.session_id = None + self.url = url + + self._id = 0 + self._callbacks = {} + self._messages = {} + self._started = False + + self._start_ws() + self._wait_until(lambda: self._started) + + def close(self): + self._ws_thread.join(timeout=self._response_wait_timeout) + self._ws.close() + self._started = False + self._ws = None + + def execute(self, command): + self._id += 1 + payload = self._serialize_command(command) + payload["id"] = self._id + if self.session_id: + payload["sessionId"] = self.session_id + + data = json.dumps(payload) + logger.debug(f"WebSocket -> {data}"[: self._max_log_message_size]) + self._ws.send(data) + + self._wait_until(lambda: self._id in self._messages) + result = self._messages.pop(self._id)["result"] + return self._deserialize_result(result, command) + + def on(self, event, callback): + if event not in self._callbacks: + self._callbacks[event.event_class] = [] + self._callbacks[event.event_class].append(lambda params: callback(event.from_json(params))) + + def _serialize_command(self, command): + return next(command) + + def _deserialize_result(self, result, command): + try: + _ = command.send(result) + raise Exception("The command's generator function did not exit when expected!") + except StopIteration as exit: + return exit.value + + def _start_ws(self): + def on_open(ws): + self._started = True + + def on_message(ws, message): + self._process_message(message) + + def on_error(ws, error): + logger.debug(f"WebSocket error: {error}") + ws.close() + + def run_socket(): + if self.url.startswith("wss://"): + self._ws.run_forever(sslopt={"cert_reqs": CERT_NONE}, suppress_origin=True) + else: + self._ws.run_forever(suppress_origin=True) + + self._ws = WebSocketApp(self.url, on_open=on_open, on_message=on_message, on_error=on_error) + self._ws_thread = Thread(target=run_socket) + self._ws_thread.start() + + def _process_message(self, message): + message = json.loads(message) + logger.debug(f"WebSocket <- {message}"[: self._max_log_message_size]) + + if "id" in message: + self._messages[message["id"]] = message + + if "method" in message: + params = message["params"] + for callback in self._callbacks.get(message["method"], []): + callback(params) + + def _wait_until(self, condition): + timeout = self._response_wait_timeout + interval = self._response_wait_interval + + while timeout > 0: + result = condition() + if result: + return result + else: + timeout -= interval + sleep(interval) diff --git a/py/test/selenium/webdriver/common/devtools_tests.py b/py/test/selenium/webdriver/common/devtools_tests.py new file mode 100644 index 0000000000000..b4b3bcbce361a --- /dev/null +++ b/py/test/selenium/webdriver/common/devtools_tests.py @@ -0,0 +1,36 @@ +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +import pytest + +from selenium.webdriver.support.ui import WebDriverWait + + +@pytest.mark.xfail_safari +def test_check_console_messages(driver, pages): + devtools, connection = driver.start_devtools() + console_api_calls = [] + + connection.execute(devtools.runtime.enable()) + connection.on(devtools.runtime.ConsoleAPICalled, console_api_calls.append) + driver.execute_script("console.log('I love cheese')") + driver.execute_script("console.error('I love bread')") + WebDriverWait(driver, 5).until(lambda _: len(console_api_calls) == 2) + + assert console_api_calls[0].type_ == "log" + assert console_api_calls[0].args[0].value == "I love cheese" + assert console_api_calls[1].type_ == "error" + assert console_api_calls[1].args[0].value == "I love bread" From 5d5cc4f3551a2d2a2a2ad27b0360eeafe2ffe11f Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Fri, 7 Jun 2024 15:50:46 +0530 Subject: [PATCH 024/176] [bidi][js] Add types for user prompt related events (#14097) --- .../bidi/browsingContextInspector.js | 6 +- .../bidi/browsingContextTypes.js | 18 ++++- .../bidi/browsingcontext_inspector_test.js | 79 +++++++++++-------- 3 files changed, 68 insertions(+), 35 deletions(-) diff --git a/javascript/node/selenium-webdriver/bidi/browsingContextInspector.js b/javascript/node/selenium-webdriver/bidi/browsingContextInspector.js index 36ff2f5a86f74..2a2e78d4ba219 100644 --- a/javascript/node/selenium-webdriver/bidi/browsingContextInspector.js +++ b/javascript/node/selenium-webdriver/bidi/browsingContextInspector.js @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -const { BrowsingContextInfo, NavigationInfo } = require('./browsingContextTypes') +const { BrowsingContextInfo, NavigationInfo, UserPromptOpened, UserPromptClosed } = require('./browsingContextTypes') /** * Represents a browsing context related events. @@ -127,8 +127,10 @@ class BrowsingContextInspector { let response = null if ('navigation' in params) { response = new NavigationInfo(params.context, params.navigation, params.timestamp, params.url) + } else if ('type' in params) { + response = new UserPromptOpened(params.context, params.type, params.message) } else if ('accepted' in params) { - /* Needs to be updated when browsers implement other events */ + response = new UserPromptClosed(params.context, params.accepted, params.userText) } else { response = new BrowsingContextInfo(params.context, params.url, params.children, params.parent) } diff --git a/javascript/node/selenium-webdriver/bidi/browsingContextTypes.js b/javascript/node/selenium-webdriver/bidi/browsingContextTypes.js index 77dbd6343aea5..274ada8bd724d 100644 --- a/javascript/node/selenium-webdriver/bidi/browsingContextTypes.js +++ b/javascript/node/selenium-webdriver/bidi/browsingContextTypes.js @@ -80,4 +80,20 @@ class NavigationInfo { } } -module.exports = { BrowsingContextInfo, NavigationInfo } +class UserPromptOpened { + constructor(browsingContextId, type, message) { + this.browsingContextId = browsingContextId + this.type = type + this.message = message + } +} + +class UserPromptClosed { + constructor(browsingContextId, accepted, userText = undefined) { + this.browsingContextId = browsingContextId + this.accepted = accepted + this.userText = userText + } +} + +module.exports = { BrowsingContextInfo, NavigationInfo, UserPromptOpened, UserPromptClosed } diff --git a/javascript/node/selenium-webdriver/test/bidi/browsingcontext_inspector_test.js b/javascript/node/selenium-webdriver/test/bidi/browsingcontext_inspector_test.js index 76d315942bf1c..7b95faf8a9db2 100644 --- a/javascript/node/selenium-webdriver/test/bidi/browsingcontext_inspector_test.js +++ b/javascript/node/selenium-webdriver/test/bidi/browsingcontext_inspector_test.js @@ -158,52 +158,67 @@ suite( assert(navigationInfo.url.includes('linkToAnchorOnThisPage')) }) - xit('can listen to user prompt opened event', async function () { - let userpromptOpened = null - const browsingConextInspector = await BrowsingContextInspector(driver) + ignore(env.browsers(Browser.EDGE, Browser.CHROME)).it( + 'can listen to user prompt opened event', + async function () { + let userpromptOpened = null + const browsingcontextInspector = await BrowsingContextInspector(driver) - const browsingContext = await BrowsingContext(driver, { - browsingContextId: await driver.getWindowHandle(), - }) + const browsingContext = await BrowsingContext(driver, { + browsingContextId: await driver.getWindowHandle(), + }) - await driver.get(Pages.alertsPage) + await browsingcontextInspector.onUserPromptOpened((entry) => { + userpromptOpened = entry + }) - await driver.findElement(By.id('alert')).click() + await driver.get(Pages.alertsPage) - await driver.wait(until.alertIsPresent()) + await driver.findElement(By.id('alert')).click() - await browsingConextInspector.onUserPromptOpened((entry) => { - userpromptOpened = entry - }) + await driver.wait(until.alertIsPresent()) - assert.equal(userpromptOpened.browsingContextId, browsingContext.id) - assert.equal(userpromptOpened.type, 'alert') - }) + await browsingContext.handleUserPrompt(true) - xit('can listen to user prompt closed event', async function () { - let userpromptClosed = null - const browsingConextInspector = await BrowsingContextInspector(driver) + // Chrome/Edge do not return the window's browsing context id as per the spec. + // This assertion fails. + // It is probably a bug in the Chrome/Edge driver. + assert.equal(userpromptOpened.browsingContextId, browsingContext.id) + assert.equal(userpromptOpened.type, 'alert') + }, + ) - const browsingContext = await BrowsingContext(driver, { - browsingContextId: await driver.getWindowHandle(), - }) + ignore(env.browsers(Browser.EDGE, Browser.CHROME)).it( + 'can listen to user prompt closed event', + async function () { + const windowHandle = await driver.getWindowHandle() + let userpromptClosed = null + const browsingcontextInspector = await BrowsingContextInspector(driver, windowHandle) - await driver.get(Pages.alertsPage) + const browsingContext = await BrowsingContext(driver, { + browsingContextId: windowHandle, + }) - await driver.findElement(By.id('prompt')).click() + await driver.get(Pages.alertsPage) - await driver.wait(until.alertIsPresent()) + await driver.findElement(By.id('prompt')).click() - await browsingConextInspector.onUserPromptClosed((entry) => { - userpromptClosed = entry - }) + await driver.wait(until.alertIsPresent()) - await browsingContext.handleUserPrompt(true, 'selenium') + await browsingcontextInspector.onUserPromptClosed((entry) => { + userpromptClosed = entry + }) - assert.equal(userpromptClosed.browsingContextId, browsingContext.id) - assert.equal(userpromptClosed.accepted, true) - assert.equal(userpromptClosed.userText, 'selenium') - }) + await browsingContext.handleUserPrompt(true, 'selenium') + + // Chrome/Edge do not return the window's browsing context id as per the spec. + // This assertion fails. + // It is probably a bug in the Chrome/Edge driver. + assert.equal(userpromptClosed.browsingContextId, browsingContext.id) + assert.equal(userpromptClosed.accepted, true) + assert.equal(userpromptClosed.userText, 'selenium') + }, + ) }) }, { browsers: [Browser.FIREFOX, Browser.CHROME, Browser.EDGE] }, From c6e898a9f018140178058e9328254ee600441d10 Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Fri, 7 Jun 2024 08:11:33 -0500 Subject: [PATCH 025/176] [build] update rules_dotnet to 0.15.1 (#14096) --- MODULE.bazel | 2 +- dotnet/paket.bzl | 57 ----------- dotnet/paket.nuget.bzl | 94 +++++++++---------- dotnet/paket.nuget_extension.bzl | 2 +- dotnet/src/support/BUILD.bazel | 6 -- dotnet/src/webdriver/BUILD.bazel | 6 -- dotnet/test/common/BUILD.bazel | 6 -- dotnet/test/support/Events/BUILD.bazel | 6 -- dotnet/test/support/Extensions/BUILD.bazel | 3 - dotnet/test/support/UI/BUILD.bazel | 6 -- dotnet/update-deps.sh | 2 +- .../dotnet/devtools/src/generator/BUILD.bazel | 3 - 12 files changed, 50 insertions(+), 143 deletions(-) delete mode 100644 dotnet/paket.bzl diff --git a/MODULE.bazel b/MODULE.bazel index c4e8b2e0f5bc7..341aecede1804 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,7 @@ bazel_dep(name = "bazel_skylib", version = "1.5.0") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0") bazel_dep(name = "contrib_rules_jvm", version = "0.24.0") bazel_dep(name = "platforms", version = "0.0.10") -bazel_dep(name = "rules_dotnet", version = "0.14.0") +bazel_dep(name = "rules_dotnet", version = "0.15.1") bazel_dep(name = "rules_java", version = "7.4.0") bazel_dep(name = "rules_jvm_external", version = "6.1") bazel_dep(name = "rules_nodejs", version = "6.0.5") diff --git a/dotnet/paket.bzl b/dotnet/paket.bzl deleted file mode 100644 index 28216cf699b71..0000000000000 --- a/dotnet/paket.bzl +++ /dev/null @@ -1,57 +0,0 @@ -"Generated by paket2bazel" - -load("@rules_dotnet//dotnet:defs.bzl", "nuget_repo") - -def paket(): - "paket" - nuget_repo( - name = "paket.nuget", - packages = [ - {"id": "BenderProxy", "version": "1.0.0", "sha512": "sha512-zNsAtO6ZwNa0MfyFFJAzA6rsTtqnjY+bD2gCDHSUIbRS31wRJ9GfOeummSlEVaH/DSxxiuQaIhZmtIFAM0WW+A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Castle.Core", "version": "5.1.1", "sha512": "sha512-N4oUnr+qEtAMs1vK7ogGgD33vHWYDJ4MZ/NuPgV9avKrrq0kzYJ0qVlcesdMuVl8nWkTsRJbhuaxVqZvehrC+g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Diagnostics.EventLog"], "net6.0": ["System.Diagnostics.EventLog"], "net7.0": ["System.Diagnostics.EventLog"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.1": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.2": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp3.0": ["System.Diagnostics.EventLog"], "netcoreapp3.1": ["System.Diagnostics.EventLog"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netstandard2.1": ["System.Diagnostics.EventLog"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "CommandLineParser", "version": "2.8.0", "sha512": "sha512-jCdlE9/pHlvHLPs7lqDSRBHuO9Lpgy1CP2rePzlkoBHbuXfKkGAXUPoTOgol/nL2aVW+f2mnL11rc8fzEwlLXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Handlebars.Net", "version": "1.11.5", "sha512": "sha512-0MwU7vAXI3hT+9W7r7vadVZ21+HoGC5Z0Qc39JP+xxMlF7YOyZEhFByoQ2gtldWyeG6Gt2LglcFH8kJaXg/uiQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net6.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net7.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.2": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Humanizer.Core", "version": "2.8.26", "sha512": "sha512-hdDm8u0FrPEorV1qXA+W01DCR9zeNX5fwe5fXFUyzmA/JjLxMjt7/W672rSOWIjWHGkD6cZYOFLjIg/0O+a8kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["NETStandard.Library"], "net451": ["NETStandard.Library"], "net452": ["NETStandard.Library"], "net46": ["NETStandard.Library"], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.AspNetCore.App.Ref", "version": "6.0.9", "sha512": "sha512-uD7Y3nff4uUBryVsahaW3/krbzh0yPI2DY9iCak/wPTqJucwmVszCmkEIQOfmT4L9f13xcsqHq3eN+ka6YvIYg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.Extensions.Caching.Abstractions|6.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0", "Microsoft.Extensions.Configuration|6.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0", "Microsoft.Extensions.Hosting|6.0.0", "Microsoft.Extensions.Http|6.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0", "Microsoft.Extensions.Logging.Console|6.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0", "Microsoft.Extensions.Logging|6.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0", "Microsoft.Extensions.Options|6.0.0", "Microsoft.Extensions.Primitives|6.0.0", "System.Diagnostics.EventLog|6.0.0", "System.IO.Pipelines|6.0.0", "System.Security.Cryptography.Xml|6.0.0", "Microsoft.AspNetCore.Antiforgery|6.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0", "Microsoft.AspNetCore.Authentication|6.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0", "Microsoft.AspNetCore.Authorization|6.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0", "Microsoft.AspNetCore.Components|6.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0", "Microsoft.AspNetCore.Cors|6.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0", "Microsoft.AspNetCore|6.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0", "Microsoft.AspNetCore.Hosting|6.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0", "Microsoft.AspNetCore.Http|6.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0", "Microsoft.AspNetCore.Identity|6.0.0", "Microsoft.AspNetCore.Localization|6.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0", "Microsoft.AspNetCore.Metadata|6.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0", "Microsoft.AspNetCore.Mvc|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0", "Microsoft.AspNetCore.Razor|6.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0", "Microsoft.AspNetCore.Routing|6.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0", "Microsoft.AspNetCore.Session|6.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0", "Microsoft.AspNetCore.SignalR|6.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0", "Microsoft.Extensions.Features|6.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0", "Microsoft.Extensions.Identity.Core|6.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0", "Microsoft.Extensions.Localization|6.0.0", "Microsoft.Extensions.ObjectPool|6.0.0", "Microsoft.Extensions.WebEncoders|6.0.0", "Microsoft.JSInterop|6.0.0", "Microsoft.Net.Http.Headers|6.0.0"], "framework_list": ["Microsoft.AspNetCore.Antiforgery|6.0.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0.0", "Microsoft.AspNetCore.Authentication|6.0.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0.0", "Microsoft.AspNetCore.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0.0", "Microsoft.AspNetCore.Components|6.0.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0.0", "Microsoft.AspNetCore.Cors|6.0.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting|6.0.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0.0", "Microsoft.AspNetCore.Http|6.0.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0.0", "Microsoft.AspNetCore.Identity|6.0.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0.0", "Microsoft.AspNetCore.Localization|6.0.0.0", "Microsoft.AspNetCore.Metadata|6.0.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0.0", "Microsoft.AspNetCore.Mvc|6.0.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0.0", "Microsoft.AspNetCore.Razor|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Routing|6.0.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0.0", "Microsoft.AspNetCore.Session|6.0.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0.0", "Microsoft.AspNetCore.SignalR|6.0.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0.0", "Microsoft.AspNetCore|6.0.0.0", "Microsoft.Extensions.Caching.Abstractions|6.0.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0.0", "Microsoft.Extensions.Configuration|6.0.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.Extensions.Features|6.0.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0.0", "Microsoft.Extensions.Hosting|6.0.0.0", "Microsoft.Extensions.Http|6.0.0.0", "Microsoft.Extensions.Identity.Core|6.0.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0.0", "Microsoft.Extensions.Localization|6.0.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0.0", "Microsoft.Extensions.Logging.Console|6.0.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0.0", "Microsoft.Extensions.Logging|6.0.0.0", "Microsoft.Extensions.ObjectPool|6.0.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0.0", "Microsoft.Extensions.Options|6.0.0.0", "Microsoft.Extensions.Primitives|6.0.0.0", "Microsoft.Extensions.WebEncoders|6.0.0.0", "Microsoft.JSInterop|6.0.0.0", "Microsoft.Net.Http.Headers|6.0.0.0", "System.Diagnostics.EventLog|6.0.0.0", "System.IO.Pipelines|6.0.0.0", "System.Security.Cryptography.Xml|6.0.0.0"]}, - {"id": "Microsoft.Bcl.AsyncInterfaces", "version": "7.0.0", "sha512": "sha512-Nb9B1lxCab0LZi0ijNLEpw4hgwt0Wl8QQM1DxIhJS2otChAtIVMfyGrYl3YzdSjspvBYPliJlr0kCtizNAVe3w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.CSharp", "version": "4.5.0", "sha512": "sha512-yWWeTbGCzBOlRPWDCIxiTZW1ecZiMbao0ZT97KKEWdBhrLvUqU8RdzkhzuCRQzvoxzxlR7vytO43OOgFdkxv6g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Extensions.DependencyInjection", "version": "3.1.9", "sha512": "sha512-vMQqPTihUGUTAzlr4354IcThGnC+ayzonlXLGBmnC6tdNUi40kKlqVl1d71RFgqV7Sj6L/ZmATPaX/xxCj5hAA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net462": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net47": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net471": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net472": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net48": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net5.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net6.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net7.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.2": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp3.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp3.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netstandard2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Extensions.DependencyInjection.Abstractions", "version": "3.1.9", "sha512": "sha512-qbiwYBpKjQ2u3FNFDuznksbzsR7e/pUK2XR/osxiU/1Lo+M8MqjRnvBm5x/Uvtv2iDdMNQ2N+smrPgRGKDXboQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Ref", "version": "6.0.9", "sha512": "sha512-dudkoXKqcCPEjNnwYQzRipKGcIB21o3CjbTffACrnSmUAoZS+IdIv3COpwKIaZKDPl7euUUpb7WhAc0WH8+//A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.CSharp|4.4.0", "Microsoft.Win32.Primitives|4.3.0", "Microsoft.Win32.Registry|4.4.0", "runtime.debian.8-x64.runtime.native.System|4.3.0", "runtime.debian.8-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Http|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Security|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.23-x64.runtime.native.System|4.3.0", "runtime.fedora.23-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.24-x64.runtime.native.System|4.3.0", "runtime.fedora.24-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.osx.10.10-x64.runtime.native.System|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.rhel.7-x64.runtime.native.System|4.3.0", "runtime.rhel.7-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Http|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Security|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "System.AppContext|4.3.0", "System.Buffers|4.4.0", "System.Collections|4.3.0", "System.Collections.Concurrent|4.3.0", "System.Collections.Immutable|1.4.0", "System.Collections.NonGeneric|4.3.0", "System.Collections.Specialized|4.3.0", "System.ComponentModel|4.3.0", "System.ComponentModel.EventBasedAsync|4.3.0", "System.ComponentModel.Primitives|4.3.0", "System.ComponentModel.TypeConverter|4.3.0", "System.Console|4.3.0", "System.Data.Common|4.3.0", "System.Diagnostics.Contracts|4.3.0", "System.Diagnostics.Debug|4.3.0", "System.Diagnostics.DiagnosticSource|4.4.0", "System.Diagnostics.FileVersionInfo|4.3.0", "System.Diagnostics.Process|4.3.0", "System.Diagnostics.StackTrace|4.3.0", "System.Diagnostics.TextWriterTraceListener|4.3.0", "System.Diagnostics.Tools|4.3.0", "System.Diagnostics.TraceSource|4.3.0", "System.Diagnostics.Tracing|4.3.0", "System.Dynamic.Runtime|4.3.0", "System.Globalization|4.3.0", "System.Globalization.Calendars|4.3.0", "System.Globalization.Extensions|4.3.0", "System.IO|4.3.0", "System.IO.Compression|4.3.0", "System.IO.Compression.ZipFile|4.3.0", "System.IO.FileSystem|4.3.0", "System.IO.FileSystem.AccessControl|4.4.0", "System.IO.FileSystem.DriveInfo|4.3.0", "System.IO.FileSystem.Primitives|4.3.0", "System.IO.FileSystem.Watcher|4.3.0", "System.IO.IsolatedStorage|4.3.0", "System.IO.MemoryMappedFiles|4.3.0", "System.IO.Pipes|4.3.0", "System.IO.UnmanagedMemoryStream|4.3.0", "System.Linq|4.3.0", "System.Linq.Expressions|4.3.0", "System.Linq.Queryable|4.3.0", "System.Net.Http|4.3.0", "System.Net.NameResolution|4.3.0", "System.Net.Primitives|4.3.0", "System.Net.Requests|4.3.0", "System.Net.Security|4.3.0", "System.Net.Sockets|4.3.0", "System.Net.WebHeaderCollection|4.3.0", "System.ObjectModel|4.3.0", "System.Private.DataContractSerialization|4.3.0", "System.Reflection|4.3.0", "System.Reflection.Emit|4.3.0", "System.Reflection.Emit.ILGeneration|4.3.0", "System.Reflection.Emit.Lightweight|4.3.0", "System.Reflection.Extensions|4.3.0", "System.Reflection.Metadata|1.5.0", "System.Reflection.Primitives|4.3.0", "System.Reflection.TypeExtensions|4.3.0", "System.Resources.ResourceManager|4.3.0", "System.Runtime|4.3.0", "System.Runtime.Extensions|4.3.0", "System.Runtime.Handles|4.3.0", "System.Runtime.InteropServices|4.3.0", "System.Runtime.InteropServices.RuntimeInformation|4.3.0", "System.Runtime.Loader|4.3.0", "System.Runtime.Numerics|4.3.0", "System.Runtime.Serialization.Formatters|4.3.0", "System.Runtime.Serialization.Json|4.3.0", "System.Runtime.Serialization.Primitives|4.3.0", "System.Security.AccessControl|4.4.0", "System.Security.Claims|4.3.0", "System.Security.Cryptography.Algorithms|4.3.0", "System.Security.Cryptography.Cng|4.4.0", "System.Security.Cryptography.Csp|4.3.0", "System.Security.Cryptography.Encoding|4.3.0", "System.Security.Cryptography.OpenSsl|4.4.0", "System.Security.Cryptography.Primitives|4.3.0", "System.Security.Cryptography.X509Certificates|4.3.0", "System.Security.Cryptography.Xml|4.4.0", "System.Security.Principal|4.3.0", "System.Security.Principal.Windows|4.4.0", "System.Text.Encoding|4.3.0", "System.Text.Encoding.Extensions|4.3.0", "System.Text.RegularExpressions|4.3.0", "System.Threading|4.3.0", "System.Threading.Overlapped|4.3.0", "System.Threading.Tasks|4.3.0", "System.Threading.Tasks.Extensions|4.3.0", "System.Threading.Tasks.Parallel|4.3.0", "System.Threading.Thread|4.3.0", "System.Threading.ThreadPool|4.3.0", "System.Threading.Timer|4.3.0", "System.ValueTuple|4.3.0", "System.Xml.ReaderWriter|4.3.0", "System.Xml.XDocument|4.3.0", "System.Xml.XmlDocument|4.3.0", "System.Xml.XmlSerializer|4.3.0", "System.Xml.XPath|4.3.0", "System.Xml.XPath.XDocument|4.3.0"], "framework_list": ["Microsoft.CSharp|6.0.0.0", "Microsoft.VisualBasic.Core|11.0.0.0", "Microsoft.VisualBasic|10.0.0.0", "Microsoft.Win32.Primitives|6.0.0.0", "Microsoft.Win32.Registry|6.0.0.0", "System.AppContext|6.0.0.0", "System.Buffers|6.0.0.0", "System.Collections.Concurrent|6.0.0.0", "System.Collections.Immutable|6.0.0.0", "System.Collections.NonGeneric|6.0.0.0", "System.Collections.Specialized|6.0.0.0", "System.Collections|6.0.0.0", "System.ComponentModel.Annotations|6.0.0.0", "System.ComponentModel.DataAnnotations|4.0.0.0", "System.ComponentModel.EventBasedAsync|6.0.0.0", "System.ComponentModel.Primitives|6.0.0.0", "System.ComponentModel.TypeConverter|6.0.0.0", "System.ComponentModel|6.0.0.0", "System.Configuration|4.0.0.0", "System.Console|6.0.0.0", "System.Core|4.0.0.0", "System.Data.Common|6.0.0.0", "System.Data.DataSetExtensions|4.0.0.0", "System.Data|4.0.0.0", "System.Diagnostics.Contracts|6.0.0.0", "System.Diagnostics.Debug|6.0.0.0", "System.Diagnostics.DiagnosticSource|6.0.0.0", "System.Diagnostics.FileVersionInfo|6.0.0.0", "System.Diagnostics.Process|6.0.0.0", "System.Diagnostics.StackTrace|6.0.0.0", "System.Diagnostics.TextWriterTraceListener|6.0.0.0", "System.Diagnostics.Tools|6.0.0.0", "System.Diagnostics.TraceSource|6.0.0.0", "System.Diagnostics.Tracing|6.0.0.0", "System.Drawing.Primitives|6.0.0.0", "System.Drawing|4.0.0.0", "System.Dynamic.Runtime|6.0.0.0", "System.Formats.Asn1|6.0.0.0", "System.Globalization.Calendars|6.0.0.0", "System.Globalization.Extensions|6.0.0.0", "System.Globalization|6.0.0.0", "System.IO.Compression.Brotli|6.0.0.0", "System.IO.Compression.FileSystem|4.0.0.0", "System.IO.Compression.ZipFile|6.0.0.0", "System.IO.Compression|6.0.0.0", "System.IO.FileSystem.AccessControl|6.0.0.0", "System.IO.FileSystem.DriveInfo|6.0.0.0", "System.IO.FileSystem.Primitives|6.0.0.0", "System.IO.FileSystem.Watcher|6.0.0.0", "System.IO.FileSystem|6.0.0.0", "System.IO.IsolatedStorage|6.0.0.0", "System.IO.MemoryMappedFiles|6.0.0.0", "System.IO.Pipes.AccessControl|6.0.0.0", "System.IO.Pipes|6.0.0.0", "System.IO.UnmanagedMemoryStream|6.0.0.0", "System.IO|6.0.0.0", "System.Linq.Expressions|6.0.0.0", "System.Linq.Parallel|6.0.0.0", "System.Linq.Queryable|6.0.0.0", "System.Linq|6.0.0.0", "System.Memory|6.0.0.0", "System.Net.Http.Json|6.0.0.0", "System.Net.Http|6.0.0.0", "System.Net.HttpListener|6.0.0.0", "System.Net.Mail|6.0.0.0", "System.Net.NameResolution|6.0.0.0", "System.Net.NetworkInformation|6.0.0.0", "System.Net.Ping|6.0.0.0", "System.Net.Primitives|6.0.0.0", "System.Net.Requests|6.0.0.0", "System.Net.Security|6.0.0.0", "System.Net.ServicePoint|6.0.0.0", "System.Net.Sockets|6.0.0.0", "System.Net.WebClient|6.0.0.0", "System.Net.WebHeaderCollection|6.0.0.0", "System.Net.WebProxy|6.0.0.0", "System.Net.WebSockets.Client|6.0.0.0", "System.Net.WebSockets|6.0.0.0", "System.Net|4.0.0.0", "System.Numerics.Vectors|6.0.0.0", "System.Numerics|4.0.0.0", "System.ObjectModel|6.0.0.0", "System.Reflection.DispatchProxy|6.0.0.0", "System.Reflection.Emit.ILGeneration|6.0.0.0", "System.Reflection.Emit.Lightweight|6.0.0.0", "System.Reflection.Emit|6.0.0.0", "System.Reflection.Extensions|6.0.0.0", "System.Reflection.Metadata|6.0.0.0", "System.Reflection.Primitives|6.0.0.0", "System.Reflection.TypeExtensions|6.0.0.0", "System.Reflection|6.0.0.0", "System.Resources.Reader|6.0.0.0", "System.Resources.ResourceManager|6.0.0.0", "System.Resources.Writer|6.0.0.0", "System.Runtime.CompilerServices.Unsafe|6.0.0.0", "System.Runtime.CompilerServices.VisualC|6.0.0.0", "System.Runtime.Extensions|6.0.0.0", "System.Runtime.Handles|6.0.0.0", "System.Runtime.InteropServices.RuntimeInformation|6.0.0.0", "System.Runtime.InteropServices|6.0.0.0", "System.Runtime.Intrinsics|6.0.0.0", "System.Runtime.Loader|6.0.0.0", "System.Runtime.Numerics|6.0.0.0", "System.Runtime.Serialization.Formatters|6.0.0.0", "System.Runtime.Serialization.Json|6.0.0.0", "System.Runtime.Serialization.Primitives|6.0.0.0", "System.Runtime.Serialization.Xml|6.0.0.0", "System.Runtime.Serialization|4.0.0.0", "System.Runtime|6.0.0.0", "System.Security.AccessControl|6.0.0.0", "System.Security.Claims|6.0.0.0", "System.Security.Cryptography.Algorithms|6.0.0.0", "System.Security.Cryptography.Cng|6.0.0.0", "System.Security.Cryptography.Csp|6.0.0.0", "System.Security.Cryptography.Encoding|6.0.0.0", "System.Security.Cryptography.OpenSsl|6.0.0.0", "System.Security.Cryptography.Primitives|6.0.0.0", "System.Security.Cryptography.X509Certificates|6.0.0.0", "System.Security.Principal.Windows|6.0.0.0", "System.Security.Principal|6.0.0.0", "System.Security.SecureString|6.0.0.0", "System.Security|4.0.0.0", "System.ServiceModel.Web|4.0.0.0", "System.ServiceProcess|4.0.0.0", "System.Text.Encoding.CodePages|6.0.0.0", "System.Text.Encoding.Extensions|6.0.0.0", "System.Text.Encoding|6.0.0.0", "System.Text.Encodings.Web|6.0.0.0", "System.Text.Json|6.0.0.0", "System.Text.RegularExpressions|6.0.0.0", "System.Threading.Channels|6.0.0.0", "System.Threading.Overlapped|6.0.0.0", "System.Threading.Tasks.Dataflow|6.0.0.0", "System.Threading.Tasks.Extensions|6.0.0.0", "System.Threading.Tasks.Parallel|6.0.0.0", "System.Threading.Tasks|6.0.0.0", "System.Threading.Thread|6.0.0.0", "System.Threading.ThreadPool|6.0.0.0", "System.Threading.Timer|6.0.0.0", "System.Threading|6.0.0.0", "System.Transactions.Local|6.0.0.0", "System.Transactions|4.0.0.0", "System.ValueTuple|4.0.3.0", "System.Web.HttpUtility|6.0.0.0", "System.Web|4.0.0.0", "System.Windows|4.0.0.0", "System.Xml.Linq|4.0.0.0", "System.Xml.ReaderWriter|6.0.0.0", "System.Xml.Serialization|4.0.0.0", "System.Xml.XDocument|6.0.0.0", "System.Xml.XPath.XDocument|6.0.0.0", "System.Xml.XPath|6.0.0.0", "System.Xml.XmlDocument|6.0.0.0", "System.Xml.XmlSerializer|6.0.0.0", "System.Xml|4.0.0.0", "System|4.0.0.0", "WindowsBase|4.0.0.0", "mscorlib|4.0.0.0", "netstandard|2.1.0.0"]}, - {"id": "Microsoft.NETCore.App.Runtime.linux-x64", "version": "6.0.15", "sha512": "sha512-hO+FrI8U0/8oJOCevQb4PMqBmGTXGLCmnD0MSFdUiOnO9cNDb1MC4X+ndV/xVQyLnE/WJfYG8HDj84ieyj25ow==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.osx-arm64", "version": "6.0.15", "sha512": "sha512-YjL1PzK4SQgWWrDk8QIRwpgXraM8Yst0rbqicFioXrGV+/hltlfJMvfPY9NmHV8f2ydjcSdY88aBXHQxDOD/zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.osx-x64", "version": "6.0.15", "sha512": "sha512-lM8ibaNG0wJJoEsHqyAqf3ZZmDRxRqtk48jx5zOuTV/hIqtjidbx+8i5FibNdAf/zBeONLHI29TdW8km+V1tTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.win-x64", "version": "6.0.15", "sha512": "sha512-F/BqQdowumzmKRXewGJXG9+HhxhmzlNm8Jr151AX7RjAz/1cjSx5P/iZJsIimg+2uzIIGQI8+5UEpLnIFor5sA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Win32.SystemEvents", "version": "7.0.0", "sha512": "sha512-GO6SWx/wSZIFvxOn67Y6OiIGdz9JGCg5CRDDbSAAvBDQeZFbybu9sEOUb9w/vUlQv+A2XakTFZg9Ug1w+tgbWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Moq", "version": "4.12.0", "sha512": "sha512-52OnOpSKKlXfi+ukMOeRJ1Md1bOeloP7L7HkzvWtjkfRBkWmpo3vBGWX4P1wPVJEfgrDTeXCvq8S1vLasXdFJA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net451": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net452": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net46": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net461": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net462": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net47": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net471": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net472": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net48": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net5.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net6.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net7.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NETStandard.Library", "version": "2.0.3", "sha512": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Microsoft.NETCore.Platforms"], "net451": ["Microsoft.NETCore.Platforms"], "net452": ["Microsoft.NETCore.Platforms"], "net46": ["Microsoft.NETCore.Platforms"], "net461": ["Microsoft.NETCore.Platforms"], "net462": ["Microsoft.NETCore.Platforms"], "net47": ["Microsoft.NETCore.Platforms"], "net471": ["Microsoft.NETCore.Platforms"], "net472": ["Microsoft.NETCore.Platforms"], "net48": ["Microsoft.NETCore.Platforms"], "net5.0": ["Microsoft.NETCore.Platforms"], "net6.0": ["Microsoft.NETCore.Platforms"], "net7.0": ["Microsoft.NETCore.Platforms"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms"], "netstandard2.1": ["Microsoft.NETCore.Platforms"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Newtonsoft.Json", "version": "13.0.1", "sha512": "sha512-g3MbZi6vBTeaI/hEbvR7vBETSd1DWLe9i1E4P+nPY34v5i94zqUqDXvdWC3G+7tYN9SnsdU9zzegrnRz4h7nsQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.2": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NUnit", "version": "3.13.2", "sha512": "sha512-foKGnF2ckq6uRAybnw1PIMDsDxdp1rbuEBJ4t2LYa5HDL80mOcEUjdbVqRDMTsKNiikfkPEBoeyGV42ZXiLLQA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["NETStandard.Library"], "net6.0": ["NETStandard.Library"], "net7.0": ["NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NETStandard.Library"], "netcoreapp2.1": ["NETStandard.Library"], "netcoreapp2.2": ["NETStandard.Library"], "netcoreapp3.0": ["NETStandard.Library"], "netcoreapp3.1": ["NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NETStandard.Library"], "netstandard2.1": ["NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NUnitLite", "version": "3.13.2", "sha512": "sha512-kPGW4B0ycZAqDPLPKU058JR9onD3svLKAYEghQ1Oyy1YC8bIgtniGUKUbjqeNI3i5KnqFMxEdiHTGF0XxDG9hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["NUnit"], "net40": ["NUnit"], "net403": ["NUnit"], "net45": ["NUnit"], "net451": ["NUnit"], "net452": ["NUnit"], "net46": ["NUnit"], "net461": ["NUnit"], "net462": ["NUnit"], "net47": ["NUnit"], "net471": ["NUnit"], "net472": ["NUnit"], "net48": ["NUnit"], "net5.0": ["NUnit", "NETStandard.Library"], "net6.0": ["NUnit", "NETStandard.Library"], "net7.0": ["NUnit", "NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NUnit", "NETStandard.Library"], "netcoreapp2.1": ["NUnit", "NETStandard.Library"], "netcoreapp2.2": ["NUnit", "NETStandard.Library"], "netcoreapp3.0": ["NUnit", "NETStandard.Library"], "netcoreapp3.1": ["NUnit", "NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NUnit", "NETStandard.Library"], "netstandard2.1": ["NUnit", "NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Runfiles", "version": "0.12.0", "sha512": "sha512-R0fzLX7VYL2Ce8xQd0r2nVxKPvDt5Ob5P3P0wa6Mj7feErsjJUsJvR4MEZTZSsuRZhcnwOB71F/mryh9pP59Zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Buffers", "version": "4.5.1", "sha512": "sha512-gNphWOVbm89+C15jebnPRaYykU8De1PFv1YJV24814IfeGGVa3PXRHDS0MLlbdI1pe9Mpv/n4ZK4INwtAjqv8g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Diagnostics.EventLog", "version": "7.0.0", "sha512": "sha512-m/H4Rg7KukGEmfRpl+rXU1UbMN3GYbv42cbMHRgMwHIiUL3svKoFFR76Fk/mHN5TgrwGx64fS0Fp+p3qICKg/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Principal.Windows"], "net462": ["System.Security.Principal.Windows"], "net47": ["System.Security.Principal.Windows"], "net471": ["System.Security.Principal.Windows"], "net472": ["System.Security.Principal.Windows"], "net48": ["System.Security.Principal.Windows"], "net5.0": ["System.Security.Principal.Windows"], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Principal.Windows"], "netstandard2.1": ["System.Security.Principal.Windows"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Diagnostics.Tools", "version": "4.3.0", "sha512": "sha512-Fk1pd+chy860Tt57/XWwO42XceBCau+l1Axxhn6WQJL9xqaAi8vFVZ7XPsLFMsplfWR2r3mknKOth5uDZvE9kA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Drawing.Common", "version": "7.0.0", "sha512": "sha512-0TJd5U26gRDgGa/rqABgHC5OBAiyl7Mm3pIzPgKfpmPXFQ8CFVWyGi+4mkEaCK715ViOBDkU2pC2nAiPunLw7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["Microsoft.Win32.SystemEvents"], "net7.0": ["Microsoft.Win32.SystemEvents"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Memory", "version": "4.5.5", "sha512": "sha512-6MjlNsl7lKw0Q8lAsw2tQ89ul9x6jD2Yk3EEj+dOFoYGOE9eAUO9wNhvd4O/n97oQXlkyzqKXXUnE+kLElFy3A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.2": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.3": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.4": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.5": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.6": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Numerics.Vectors", "version": "4.5.0", "sha512": "sha512-nATsBTD2CKr4AYN6eRszhX4sptImWmBJwB/U6XKCWWfnCcrTBw8XSCm3QA9gjppkHTr8OkXUY21MR91D3QZXsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection", "version": "4.3.0", "sha512": "sha512-IyW2ftYNzgMCgHBk8lQiy+G3+ydbU5tE+6PEqM5JJvIdeFKaXDSzHAPYDREPe6zpr5WJ1Fcma+rAFCIAV6+DMw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Emit", "version": "4.7.0", "sha512": "sha512-EMAyW5k6MdmTxYre7l8cb9f/Zhc78ivw0pXSm/sw8OAewwQqzqxeJFu2LY+/7WPOAq33TgTPVYEeDPPVQbiXqQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.2": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.3": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.4": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.5": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.6": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Reflection.Emit.ILGeneration"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Emit.ILGeneration", "version": "4.7.0", "sha512": "sha512-iQ2Xw8qC8YCsh3+OUAMtD4g8LiA5r9ZxVhlDZn3Dok7C382JbLlPNyyXXCW3KRiv0Ebvwt7b1ZYqmIoCerrI2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Primitives", "version": "4.3.0", "sha512": "sha512-1LnMkF9aXKuQAgYzjoiQaL9mwY7oY6KdaO/zzeLMynNBEqKoUfLi5TiKIewoAF+hkxfGTZsjkjsF1jRL4uSeqg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.TypeExtensions", "version": "4.7.0", "sha512": "sha512-Q/fczHO357fqTntQPZBSwhstHCcZFvgqOwBnkO+lhMyS2pYBDtXyfRQblK3SYXN8GXHOEJzjNM5Tr12zp73c6A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.CompilerServices.Unsafe", "version": "6.0.0", "sha512": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.InteropServices", "version": "4.3.0", "sha512": "sha512-ZQeZw+ZU77ua1nFXycYM5G8oioFZe+N84qC/XUg1BEBl7z9luZcyjLu7+4H0yJuNfn1hOAiAAZ3u5us/lj9w2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["System.Runtime"], "net47": ["System.Runtime"], "net471": ["System.Runtime"], "net472": ["System.Runtime"], "net48": ["System.Runtime"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Security.Principal.Windows", "version": "5.0.0", "sha512": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp1.1": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.4": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.5": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.6": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Encodings.Web", "version": "8.0.0", "sha512": "sha512-uggiw4w7ZYq6lJVkLSaeiCuCfjvkrS3BQm2Kl9PLxaInfF+AhH0MuTgQeK8BUjMoxJksqgWBRtXY7muKCGCcMg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Json", "version": "6.0.9", "sha512": "sha512-as7kWI67Stsl6uS9mWf74R9YWD2uakVSh0YbijKqbkFEfoZJodZJISry+w2RrAZvyffGtaTxi0jNB+Zt44Byzg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net6.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net7.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Threading.Tasks.Extensions", "version": "4.5.4", "sha512": "sha512-aAUghud9PHGYc3o9oWPWd0C3xE+TJQw5ZZs78htlR6mr9ky/QEgfXHjyQ2GvOq9H1S0YizcVVKCSin92ZcH8FA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "netcoreapp1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.2": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.3": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.4": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.5": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.6": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - ], - ) diff --git a/dotnet/paket.nuget.bzl b/dotnet/paket.nuget.bzl index e00b83e133142..a49c08bdcbb2d 100644 --- a/dotnet/paket.nuget.bzl +++ b/dotnet/paket.nuget.bzl @@ -1,4 +1,4 @@ -"Generated by paket2bazel" +"GENERATED" load("@rules_dotnet//dotnet:defs.bzl", "nuget_repo") @@ -7,51 +7,51 @@ def nuget(): nuget_repo( name = "paket.nuget", packages = [ - {"id": "BenderProxy", "version": "1.0.0", "sha512": "sha512-zNsAtO6ZwNa0MfyFFJAzA6rsTtqnjY+bD2gCDHSUIbRS31wRJ9GfOeummSlEVaH/DSxxiuQaIhZmtIFAM0WW+A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Castle.Core", "version": "5.1.1", "sha512": "sha512-N4oUnr+qEtAMs1vK7ogGgD33vHWYDJ4MZ/NuPgV9avKrrq0kzYJ0qVlcesdMuVl8nWkTsRJbhuaxVqZvehrC+g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Diagnostics.EventLog"], "net6.0": ["System.Diagnostics.EventLog"], "net7.0": ["System.Diagnostics.EventLog"], "net8.0": ["System.Diagnostics.EventLog"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.1": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.2": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp3.0": ["System.Diagnostics.EventLog"], "netcoreapp3.1": ["System.Diagnostics.EventLog"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netstandard2.1": ["System.Diagnostics.EventLog"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "CommandLineParser", "version": "2.8.0", "sha512": "sha512-jCdlE9/pHlvHLPs7lqDSRBHuO9Lpgy1CP2rePzlkoBHbuXfKkGAXUPoTOgol/nL2aVW+f2mnL11rc8fzEwlLXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Handlebars.Net", "version": "1.11.5", "sha512": "sha512-0MwU7vAXI3hT+9W7r7vadVZ21+HoGC5Z0Qc39JP+xxMlF7YOyZEhFByoQ2gtldWyeG6Gt2LglcFH8kJaXg/uiQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net6.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net7.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net8.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.2": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Humanizer.Core", "version": "2.8.26", "sha512": "sha512-hdDm8u0FrPEorV1qXA+W01DCR9zeNX5fwe5fXFUyzmA/JjLxMjt7/W672rSOWIjWHGkD6cZYOFLjIg/0O+a8kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["NETStandard.Library"], "net451": ["NETStandard.Library"], "net452": ["NETStandard.Library"], "net46": ["NETStandard.Library"], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.AspNetCore.App.Ref", "version": "6.0.9", "sha512": "sha512-uD7Y3nff4uUBryVsahaW3/krbzh0yPI2DY9iCak/wPTqJucwmVszCmkEIQOfmT4L9f13xcsqHq3eN+ka6YvIYg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.Extensions.Caching.Abstractions|6.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0", "Microsoft.Extensions.Configuration|6.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0", "Microsoft.Extensions.Hosting|6.0.0", "Microsoft.Extensions.Http|6.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0", "Microsoft.Extensions.Logging.Console|6.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0", "Microsoft.Extensions.Logging|6.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0", "Microsoft.Extensions.Options|6.0.0", "Microsoft.Extensions.Primitives|6.0.0", "System.Diagnostics.EventLog|6.0.0", "System.IO.Pipelines|6.0.0", "System.Security.Cryptography.Xml|6.0.0", "Microsoft.AspNetCore.Antiforgery|6.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0", "Microsoft.AspNetCore.Authentication|6.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0", "Microsoft.AspNetCore.Authorization|6.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0", "Microsoft.AspNetCore.Components|6.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0", "Microsoft.AspNetCore.Cors|6.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0", "Microsoft.AspNetCore|6.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0", "Microsoft.AspNetCore.Hosting|6.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0", "Microsoft.AspNetCore.Http|6.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0", "Microsoft.AspNetCore.Identity|6.0.0", "Microsoft.AspNetCore.Localization|6.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0", "Microsoft.AspNetCore.Metadata|6.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0", "Microsoft.AspNetCore.Mvc|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0", "Microsoft.AspNetCore.Razor|6.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0", "Microsoft.AspNetCore.Routing|6.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0", "Microsoft.AspNetCore.Session|6.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0", "Microsoft.AspNetCore.SignalR|6.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0", "Microsoft.Extensions.Features|6.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0", "Microsoft.Extensions.Identity.Core|6.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0", "Microsoft.Extensions.Localization|6.0.0", "Microsoft.Extensions.ObjectPool|6.0.0", "Microsoft.Extensions.WebEncoders|6.0.0", "Microsoft.JSInterop|6.0.0", "Microsoft.Net.Http.Headers|6.0.0"], "framework_list": ["Microsoft.AspNetCore.Antiforgery|6.0.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0.0", "Microsoft.AspNetCore.Authentication|6.0.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0.0", "Microsoft.AspNetCore.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0.0", "Microsoft.AspNetCore.Components|6.0.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0.0", "Microsoft.AspNetCore.Cors|6.0.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting|6.0.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0.0", "Microsoft.AspNetCore.Http|6.0.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0.0", "Microsoft.AspNetCore.Identity|6.0.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0.0", "Microsoft.AspNetCore.Localization|6.0.0.0", "Microsoft.AspNetCore.Metadata|6.0.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0.0", "Microsoft.AspNetCore.Mvc|6.0.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0.0", "Microsoft.AspNetCore.Razor|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Routing|6.0.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0.0", "Microsoft.AspNetCore.Session|6.0.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0.0", "Microsoft.AspNetCore.SignalR|6.0.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0.0", "Microsoft.AspNetCore|6.0.0.0", "Microsoft.Extensions.Caching.Abstractions|6.0.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0.0", "Microsoft.Extensions.Configuration|6.0.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.Extensions.Features|6.0.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0.0", "Microsoft.Extensions.Hosting|6.0.0.0", "Microsoft.Extensions.Http|6.0.0.0", "Microsoft.Extensions.Identity.Core|6.0.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0.0", "Microsoft.Extensions.Localization|6.0.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0.0", "Microsoft.Extensions.Logging.Console|6.0.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0.0", "Microsoft.Extensions.Logging|6.0.0.0", "Microsoft.Extensions.ObjectPool|6.0.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0.0", "Microsoft.Extensions.Options|6.0.0.0", "Microsoft.Extensions.Primitives|6.0.0.0", "Microsoft.Extensions.WebEncoders|6.0.0.0", "Microsoft.JSInterop|6.0.0.0", "Microsoft.Net.Http.Headers|6.0.0.0", "System.Diagnostics.EventLog|6.0.0.0", "System.IO.Pipelines|6.0.0.0", "System.Security.Cryptography.Xml|6.0.0.0"]}, - {"id": "Microsoft.Bcl.AsyncInterfaces", "version": "7.0.0", "sha512": "sha512-Nb9B1lxCab0LZi0ijNLEpw4hgwt0Wl8QQM1DxIhJS2otChAtIVMfyGrYl3YzdSjspvBYPliJlr0kCtizNAVe3w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.CSharp", "version": "4.5.0", "sha512": "sha512-yWWeTbGCzBOlRPWDCIxiTZW1ecZiMbao0ZT97KKEWdBhrLvUqU8RdzkhzuCRQzvoxzxlR7vytO43OOgFdkxv6g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Extensions.DependencyInjection", "version": "3.1.9", "sha512": "sha512-vMQqPTihUGUTAzlr4354IcThGnC+ayzonlXLGBmnC6tdNUi40kKlqVl1d71RFgqV7Sj6L/ZmATPaX/xxCj5hAA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net462": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net47": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net471": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net472": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net48": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net5.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net6.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net7.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net8.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.2": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp3.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp3.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netstandard2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Extensions.DependencyInjection.Abstractions", "version": "3.1.9", "sha512": "sha512-qbiwYBpKjQ2u3FNFDuznksbzsR7e/pUK2XR/osxiU/1Lo+M8MqjRnvBm5x/Uvtv2iDdMNQ2N+smrPgRGKDXboQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Ref", "version": "6.0.9", "sha512": "sha512-dudkoXKqcCPEjNnwYQzRipKGcIB21o3CjbTffACrnSmUAoZS+IdIv3COpwKIaZKDPl7euUUpb7WhAc0WH8+//A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.CSharp|4.4.0", "Microsoft.Win32.Primitives|4.3.0", "Microsoft.Win32.Registry|4.4.0", "runtime.debian.8-x64.runtime.native.System|4.3.0", "runtime.debian.8-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Http|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Security|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.23-x64.runtime.native.System|4.3.0", "runtime.fedora.23-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.24-x64.runtime.native.System|4.3.0", "runtime.fedora.24-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.osx.10.10-x64.runtime.native.System|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.rhel.7-x64.runtime.native.System|4.3.0", "runtime.rhel.7-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Http|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Security|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "System.AppContext|4.3.0", "System.Buffers|4.4.0", "System.Collections|4.3.0", "System.Collections.Concurrent|4.3.0", "System.Collections.Immutable|1.4.0", "System.Collections.NonGeneric|4.3.0", "System.Collections.Specialized|4.3.0", "System.ComponentModel|4.3.0", "System.ComponentModel.EventBasedAsync|4.3.0", "System.ComponentModel.Primitives|4.3.0", "System.ComponentModel.TypeConverter|4.3.0", "System.Console|4.3.0", "System.Data.Common|4.3.0", "System.Diagnostics.Contracts|4.3.0", "System.Diagnostics.Debug|4.3.0", "System.Diagnostics.DiagnosticSource|4.4.0", "System.Diagnostics.FileVersionInfo|4.3.0", "System.Diagnostics.Process|4.3.0", "System.Diagnostics.StackTrace|4.3.0", "System.Diagnostics.TextWriterTraceListener|4.3.0", "System.Diagnostics.Tools|4.3.0", "System.Diagnostics.TraceSource|4.3.0", "System.Diagnostics.Tracing|4.3.0", "System.Dynamic.Runtime|4.3.0", "System.Globalization|4.3.0", "System.Globalization.Calendars|4.3.0", "System.Globalization.Extensions|4.3.0", "System.IO|4.3.0", "System.IO.Compression|4.3.0", "System.IO.Compression.ZipFile|4.3.0", "System.IO.FileSystem|4.3.0", "System.IO.FileSystem.AccessControl|4.4.0", "System.IO.FileSystem.DriveInfo|4.3.0", "System.IO.FileSystem.Primitives|4.3.0", "System.IO.FileSystem.Watcher|4.3.0", "System.IO.IsolatedStorage|4.3.0", "System.IO.MemoryMappedFiles|4.3.0", "System.IO.Pipes|4.3.0", "System.IO.UnmanagedMemoryStream|4.3.0", "System.Linq|4.3.0", "System.Linq.Expressions|4.3.0", "System.Linq.Queryable|4.3.0", "System.Net.Http|4.3.0", "System.Net.NameResolution|4.3.0", "System.Net.Primitives|4.3.0", "System.Net.Requests|4.3.0", "System.Net.Security|4.3.0", "System.Net.Sockets|4.3.0", "System.Net.WebHeaderCollection|4.3.0", "System.ObjectModel|4.3.0", "System.Private.DataContractSerialization|4.3.0", "System.Reflection|4.3.0", "System.Reflection.Emit|4.3.0", "System.Reflection.Emit.ILGeneration|4.3.0", "System.Reflection.Emit.Lightweight|4.3.0", "System.Reflection.Extensions|4.3.0", "System.Reflection.Metadata|1.5.0", "System.Reflection.Primitives|4.3.0", "System.Reflection.TypeExtensions|4.3.0", "System.Resources.ResourceManager|4.3.0", "System.Runtime|4.3.0", "System.Runtime.Extensions|4.3.0", "System.Runtime.Handles|4.3.0", "System.Runtime.InteropServices|4.3.0", "System.Runtime.InteropServices.RuntimeInformation|4.3.0", "System.Runtime.Loader|4.3.0", "System.Runtime.Numerics|4.3.0", "System.Runtime.Serialization.Formatters|4.3.0", "System.Runtime.Serialization.Json|4.3.0", "System.Runtime.Serialization.Primitives|4.3.0", "System.Security.AccessControl|4.4.0", "System.Security.Claims|4.3.0", "System.Security.Cryptography.Algorithms|4.3.0", "System.Security.Cryptography.Cng|4.4.0", "System.Security.Cryptography.Csp|4.3.0", "System.Security.Cryptography.Encoding|4.3.0", "System.Security.Cryptography.OpenSsl|4.4.0", "System.Security.Cryptography.Primitives|4.3.0", "System.Security.Cryptography.X509Certificates|4.3.0", "System.Security.Cryptography.Xml|4.4.0", "System.Security.Principal|4.3.0", "System.Security.Principal.Windows|4.4.0", "System.Text.Encoding|4.3.0", "System.Text.Encoding.Extensions|4.3.0", "System.Text.RegularExpressions|4.3.0", "System.Threading|4.3.0", "System.Threading.Overlapped|4.3.0", "System.Threading.Tasks|4.3.0", "System.Threading.Tasks.Extensions|4.3.0", "System.Threading.Tasks.Parallel|4.3.0", "System.Threading.Thread|4.3.0", "System.Threading.ThreadPool|4.3.0", "System.Threading.Timer|4.3.0", "System.ValueTuple|4.3.0", "System.Xml.ReaderWriter|4.3.0", "System.Xml.XDocument|4.3.0", "System.Xml.XmlDocument|4.3.0", "System.Xml.XmlSerializer|4.3.0", "System.Xml.XPath|4.3.0", "System.Xml.XPath.XDocument|4.3.0"], "framework_list": ["Microsoft.CSharp|6.0.0.0", "Microsoft.VisualBasic.Core|11.0.0.0", "Microsoft.VisualBasic|10.0.0.0", "Microsoft.Win32.Primitives|6.0.0.0", "Microsoft.Win32.Registry|6.0.0.0", "System.AppContext|6.0.0.0", "System.Buffers|6.0.0.0", "System.Collections.Concurrent|6.0.0.0", "System.Collections.Immutable|6.0.0.0", "System.Collections.NonGeneric|6.0.0.0", "System.Collections.Specialized|6.0.0.0", "System.Collections|6.0.0.0", "System.ComponentModel.Annotations|6.0.0.0", "System.ComponentModel.DataAnnotations|4.0.0.0", "System.ComponentModel.EventBasedAsync|6.0.0.0", "System.ComponentModel.Primitives|6.0.0.0", "System.ComponentModel.TypeConverter|6.0.0.0", "System.ComponentModel|6.0.0.0", "System.Configuration|4.0.0.0", "System.Console|6.0.0.0", "System.Core|4.0.0.0", "System.Data.Common|6.0.0.0", "System.Data.DataSetExtensions|4.0.0.0", "System.Data|4.0.0.0", "System.Diagnostics.Contracts|6.0.0.0", "System.Diagnostics.Debug|6.0.0.0", "System.Diagnostics.DiagnosticSource|6.0.0.0", "System.Diagnostics.FileVersionInfo|6.0.0.0", "System.Diagnostics.Process|6.0.0.0", "System.Diagnostics.StackTrace|6.0.0.0", "System.Diagnostics.TextWriterTraceListener|6.0.0.0", "System.Diagnostics.Tools|6.0.0.0", "System.Diagnostics.TraceSource|6.0.0.0", "System.Diagnostics.Tracing|6.0.0.0", "System.Drawing.Primitives|6.0.0.0", "System.Drawing|4.0.0.0", "System.Dynamic.Runtime|6.0.0.0", "System.Formats.Asn1|6.0.0.0", "System.Globalization.Calendars|6.0.0.0", "System.Globalization.Extensions|6.0.0.0", "System.Globalization|6.0.0.0", "System.IO.Compression.Brotli|6.0.0.0", "System.IO.Compression.FileSystem|4.0.0.0", "System.IO.Compression.ZipFile|6.0.0.0", "System.IO.Compression|6.0.0.0", "System.IO.FileSystem.AccessControl|6.0.0.0", "System.IO.FileSystem.DriveInfo|6.0.0.0", "System.IO.FileSystem.Primitives|6.0.0.0", "System.IO.FileSystem.Watcher|6.0.0.0", "System.IO.FileSystem|6.0.0.0", "System.IO.IsolatedStorage|6.0.0.0", "System.IO.MemoryMappedFiles|6.0.0.0", "System.IO.Pipes.AccessControl|6.0.0.0", "System.IO.Pipes|6.0.0.0", "System.IO.UnmanagedMemoryStream|6.0.0.0", "System.IO|6.0.0.0", "System.Linq.Expressions|6.0.0.0", "System.Linq.Parallel|6.0.0.0", "System.Linq.Queryable|6.0.0.0", "System.Linq|6.0.0.0", "System.Memory|6.0.0.0", "System.Net.Http.Json|6.0.0.0", "System.Net.Http|6.0.0.0", "System.Net.HttpListener|6.0.0.0", "System.Net.Mail|6.0.0.0", "System.Net.NameResolution|6.0.0.0", "System.Net.NetworkInformation|6.0.0.0", "System.Net.Ping|6.0.0.0", "System.Net.Primitives|6.0.0.0", "System.Net.Requests|6.0.0.0", "System.Net.Security|6.0.0.0", "System.Net.ServicePoint|6.0.0.0", "System.Net.Sockets|6.0.0.0", "System.Net.WebClient|6.0.0.0", "System.Net.WebHeaderCollection|6.0.0.0", "System.Net.WebProxy|6.0.0.0", "System.Net.WebSockets.Client|6.0.0.0", "System.Net.WebSockets|6.0.0.0", "System.Net|4.0.0.0", "System.Numerics.Vectors|6.0.0.0", "System.Numerics|4.0.0.0", "System.ObjectModel|6.0.0.0", "System.Reflection.DispatchProxy|6.0.0.0", "System.Reflection.Emit.ILGeneration|6.0.0.0", "System.Reflection.Emit.Lightweight|6.0.0.0", "System.Reflection.Emit|6.0.0.0", "System.Reflection.Extensions|6.0.0.0", "System.Reflection.Metadata|6.0.0.0", "System.Reflection.Primitives|6.0.0.0", "System.Reflection.TypeExtensions|6.0.0.0", "System.Reflection|6.0.0.0", "System.Resources.Reader|6.0.0.0", "System.Resources.ResourceManager|6.0.0.0", "System.Resources.Writer|6.0.0.0", "System.Runtime.CompilerServices.Unsafe|6.0.0.0", "System.Runtime.CompilerServices.VisualC|6.0.0.0", "System.Runtime.Extensions|6.0.0.0", "System.Runtime.Handles|6.0.0.0", "System.Runtime.InteropServices.RuntimeInformation|6.0.0.0", "System.Runtime.InteropServices|6.0.0.0", "System.Runtime.Intrinsics|6.0.0.0", "System.Runtime.Loader|6.0.0.0", "System.Runtime.Numerics|6.0.0.0", "System.Runtime.Serialization.Formatters|6.0.0.0", "System.Runtime.Serialization.Json|6.0.0.0", "System.Runtime.Serialization.Primitives|6.0.0.0", "System.Runtime.Serialization.Xml|6.0.0.0", "System.Runtime.Serialization|4.0.0.0", "System.Runtime|6.0.0.0", "System.Security.AccessControl|6.0.0.0", "System.Security.Claims|6.0.0.0", "System.Security.Cryptography.Algorithms|6.0.0.0", "System.Security.Cryptography.Cng|6.0.0.0", "System.Security.Cryptography.Csp|6.0.0.0", "System.Security.Cryptography.Encoding|6.0.0.0", "System.Security.Cryptography.OpenSsl|6.0.0.0", "System.Security.Cryptography.Primitives|6.0.0.0", "System.Security.Cryptography.X509Certificates|6.0.0.0", "System.Security.Principal.Windows|6.0.0.0", "System.Security.Principal|6.0.0.0", "System.Security.SecureString|6.0.0.0", "System.Security|4.0.0.0", "System.ServiceModel.Web|4.0.0.0", "System.ServiceProcess|4.0.0.0", "System.Text.Encoding.CodePages|6.0.0.0", "System.Text.Encoding.Extensions|6.0.0.0", "System.Text.Encoding|6.0.0.0", "System.Text.Encodings.Web|6.0.0.0", "System.Text.Json|6.0.0.0", "System.Text.RegularExpressions|6.0.0.0", "System.Threading.Channels|6.0.0.0", "System.Threading.Overlapped|6.0.0.0", "System.Threading.Tasks.Dataflow|6.0.0.0", "System.Threading.Tasks.Extensions|6.0.0.0", "System.Threading.Tasks.Parallel|6.0.0.0", "System.Threading.Tasks|6.0.0.0", "System.Threading.Thread|6.0.0.0", "System.Threading.ThreadPool|6.0.0.0", "System.Threading.Timer|6.0.0.0", "System.Threading|6.0.0.0", "System.Transactions.Local|6.0.0.0", "System.Transactions|4.0.0.0", "System.ValueTuple|4.0.3.0", "System.Web.HttpUtility|6.0.0.0", "System.Web|4.0.0.0", "System.Windows|4.0.0.0", "System.Xml.Linq|4.0.0.0", "System.Xml.ReaderWriter|6.0.0.0", "System.Xml.Serialization|4.0.0.0", "System.Xml.XDocument|6.0.0.0", "System.Xml.XPath.XDocument|6.0.0.0", "System.Xml.XPath|6.0.0.0", "System.Xml.XmlDocument|6.0.0.0", "System.Xml.XmlSerializer|6.0.0.0", "System.Xml|4.0.0.0", "System|4.0.0.0", "WindowsBase|4.0.0.0", "mscorlib|4.0.0.0", "netstandard|2.1.0.0"]}, - {"id": "Microsoft.NETCore.App.Runtime.linux-x64", "version": "6.0.15", "sha512": "sha512-hO+FrI8U0/8oJOCevQb4PMqBmGTXGLCmnD0MSFdUiOnO9cNDb1MC4X+ndV/xVQyLnE/WJfYG8HDj84ieyj25ow==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.osx-arm64", "version": "6.0.15", "sha512": "sha512-YjL1PzK4SQgWWrDk8QIRwpgXraM8Yst0rbqicFioXrGV+/hltlfJMvfPY9NmHV8f2ydjcSdY88aBXHQxDOD/zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.osx-x64", "version": "6.0.15", "sha512": "sha512-lM8ibaNG0wJJoEsHqyAqf3ZZmDRxRqtk48jx5zOuTV/hIqtjidbx+8i5FibNdAf/zBeONLHI29TdW8km+V1tTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.App.Runtime.win-x64", "version": "6.0.15", "sha512": "sha512-F/BqQdowumzmKRXewGJXG9+HhxhmzlNm8Jr151AX7RjAz/1cjSx5P/iZJsIimg+2uzIIGQI8+5UEpLnIFor5sA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Microsoft.Win32.SystemEvents", "version": "7.0.0", "sha512": "sha512-GO6SWx/wSZIFvxOn67Y6OiIGdz9JGCg5CRDDbSAAvBDQeZFbybu9sEOUb9w/vUlQv+A2XakTFZg9Ug1w+tgbWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Moq", "version": "4.12.0", "sha512": "sha512-52OnOpSKKlXfi+ukMOeRJ1Md1bOeloP7L7HkzvWtjkfRBkWmpo3vBGWX4P1wPVJEfgrDTeXCvq8S1vLasXdFJA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net451": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net452": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net46": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net461": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net462": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net47": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net471": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net472": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net48": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net5.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net6.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net7.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net8.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NETStandard.Library", "version": "2.0.3", "sha512": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Microsoft.NETCore.Platforms"], "net451": ["Microsoft.NETCore.Platforms"], "net452": ["Microsoft.NETCore.Platforms"], "net46": ["Microsoft.NETCore.Platforms"], "net461": ["Microsoft.NETCore.Platforms"], "net462": ["Microsoft.NETCore.Platforms"], "net47": ["Microsoft.NETCore.Platforms"], "net471": ["Microsoft.NETCore.Platforms"], "net472": ["Microsoft.NETCore.Platforms"], "net48": ["Microsoft.NETCore.Platforms"], "net5.0": ["Microsoft.NETCore.Platforms"], "net6.0": ["Microsoft.NETCore.Platforms"], "net7.0": ["Microsoft.NETCore.Platforms"], "net8.0": ["Microsoft.NETCore.Platforms"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms"], "netstandard2.1": ["Microsoft.NETCore.Platforms"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Newtonsoft.Json", "version": "13.0.1", "sha512": "sha512-g3MbZi6vBTeaI/hEbvR7vBETSd1DWLe9i1E4P+nPY34v5i94zqUqDXvdWC3G+7tYN9SnsdU9zzegrnRz4h7nsQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.2": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NUnit", "version": "3.13.2", "sha512": "sha512-foKGnF2ckq6uRAybnw1PIMDsDxdp1rbuEBJ4t2LYa5HDL80mOcEUjdbVqRDMTsKNiikfkPEBoeyGV42ZXiLLQA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["NETStandard.Library"], "net6.0": ["NETStandard.Library"], "net7.0": ["NETStandard.Library"], "net8.0": ["NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NETStandard.Library"], "netcoreapp2.1": ["NETStandard.Library"], "netcoreapp2.2": ["NETStandard.Library"], "netcoreapp3.0": ["NETStandard.Library"], "netcoreapp3.1": ["NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NETStandard.Library"], "netstandard2.1": ["NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "NUnitLite", "version": "3.13.2", "sha512": "sha512-kPGW4B0ycZAqDPLPKU058JR9onD3svLKAYEghQ1Oyy1YC8bIgtniGUKUbjqeNI3i5KnqFMxEdiHTGF0XxDG9hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["NUnit"], "net40": ["NUnit"], "net403": ["NUnit"], "net45": ["NUnit"], "net451": ["NUnit"], "net452": ["NUnit"], "net46": ["NUnit"], "net461": ["NUnit"], "net462": ["NUnit"], "net47": ["NUnit"], "net471": ["NUnit"], "net472": ["NUnit"], "net48": ["NUnit"], "net5.0": ["NUnit", "NETStandard.Library"], "net6.0": ["NUnit", "NETStandard.Library"], "net7.0": ["NUnit", "NETStandard.Library"], "net8.0": ["NUnit", "NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NUnit", "NETStandard.Library"], "netcoreapp2.1": ["NUnit", "NETStandard.Library"], "netcoreapp2.2": ["NUnit", "NETStandard.Library"], "netcoreapp3.0": ["NUnit", "NETStandard.Library"], "netcoreapp3.1": ["NUnit", "NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NUnit", "NETStandard.Library"], "netstandard2.1": ["NUnit", "NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "Runfiles", "version": "0.12.0", "sha512": "sha512-R0fzLX7VYL2Ce8xQd0r2nVxKPvDt5Ob5P3P0wa6Mj7feErsjJUsJvR4MEZTZSsuRZhcnwOB71F/mryh9pP59Zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Buffers", "version": "4.5.1", "sha512": "sha512-gNphWOVbm89+C15jebnPRaYykU8De1PFv1YJV24814IfeGGVa3PXRHDS0MLlbdI1pe9Mpv/n4ZK4INwtAjqv8g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Diagnostics.EventLog", "version": "7.0.0", "sha512": "sha512-m/H4Rg7KukGEmfRpl+rXU1UbMN3GYbv42cbMHRgMwHIiUL3svKoFFR76Fk/mHN5TgrwGx64fS0Fp+p3qICKg/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Principal.Windows"], "net462": ["System.Security.Principal.Windows"], "net47": ["System.Security.Principal.Windows"], "net471": ["System.Security.Principal.Windows"], "net472": ["System.Security.Principal.Windows"], "net48": ["System.Security.Principal.Windows"], "net5.0": ["System.Security.Principal.Windows"], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Principal.Windows"], "netstandard2.1": ["System.Security.Principal.Windows"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Diagnostics.Tools", "version": "4.3.0", "sha512": "sha512-Fk1pd+chy860Tt57/XWwO42XceBCau+l1Axxhn6WQJL9xqaAi8vFVZ7XPsLFMsplfWR2r3mknKOth5uDZvE9kA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Drawing.Common", "version": "7.0.0", "sha512": "sha512-0TJd5U26gRDgGa/rqABgHC5OBAiyl7Mm3pIzPgKfpmPXFQ8CFVWyGi+4mkEaCK715ViOBDkU2pC2nAiPunLw7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["Microsoft.Win32.SystemEvents"], "net7.0": ["Microsoft.Win32.SystemEvents"], "net8.0": ["Microsoft.Win32.SystemEvents"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Memory", "version": "4.5.5", "sha512": "sha512-6MjlNsl7lKw0Q8lAsw2tQ89ul9x6jD2Yk3EEj+dOFoYGOE9eAUO9wNhvd4O/n97oQXlkyzqKXXUnE+kLElFy3A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.2": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.3": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.4": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.5": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.6": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Numerics.Vectors", "version": "4.5.0", "sha512": "sha512-nATsBTD2CKr4AYN6eRszhX4sptImWmBJwB/U6XKCWWfnCcrTBw8XSCm3QA9gjppkHTr8OkXUY21MR91D3QZXsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection", "version": "4.3.0", "sha512": "sha512-IyW2ftYNzgMCgHBk8lQiy+G3+ydbU5tE+6PEqM5JJvIdeFKaXDSzHAPYDREPe6zpr5WJ1Fcma+rAFCIAV6+DMw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Emit", "version": "4.7.0", "sha512": "sha512-EMAyW5k6MdmTxYre7l8cb9f/Zhc78ivw0pXSm/sw8OAewwQqzqxeJFu2LY+/7WPOAq33TgTPVYEeDPPVQbiXqQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.2": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.3": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.4": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.5": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.6": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Reflection.Emit.ILGeneration"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Emit.ILGeneration", "version": "4.7.0", "sha512": "sha512-iQ2Xw8qC8YCsh3+OUAMtD4g8LiA5r9ZxVhlDZn3Dok7C382JbLlPNyyXXCW3KRiv0Ebvwt7b1ZYqmIoCerrI2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.Primitives", "version": "4.3.0", "sha512": "sha512-1LnMkF9aXKuQAgYzjoiQaL9mwY7oY6KdaO/zzeLMynNBEqKoUfLi5TiKIewoAF+hkxfGTZsjkjsF1jRL4uSeqg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Reflection.TypeExtensions", "version": "4.7.0", "sha512": "sha512-Q/fczHO357fqTntQPZBSwhstHCcZFvgqOwBnkO+lhMyS2pYBDtXyfRQblK3SYXN8GXHOEJzjNM5Tr12zp73c6A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.CompilerServices.Unsafe", "version": "6.0.0", "sha512": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Runtime.InteropServices", "version": "4.3.0", "sha512": "sha512-ZQeZw+ZU77ua1nFXycYM5G8oioFZe+N84qC/XUg1BEBl7z9luZcyjLu7+4H0yJuNfn1hOAiAAZ3u5us/lj9w2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["System.Runtime"], "net47": ["System.Runtime"], "net471": ["System.Runtime"], "net472": ["System.Runtime"], "net48": ["System.Runtime"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Security.Principal.Windows", "version": "5.0.0", "sha512": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp1.1": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.4": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.5": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.6": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Encodings.Web", "version": "8.0.0", "sha512": "sha512-uggiw4w7ZYq6lJVkLSaeiCuCfjvkrS3BQm2Kl9PLxaInfF+AhH0MuTgQeK8BUjMoxJksqgWBRtXY7muKCGCcMg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Text.Json", "version": "6.0.9", "sha512": "sha512-as7kWI67Stsl6uS9mWf74R9YWD2uakVSh0YbijKqbkFEfoZJodZJISry+w2RrAZvyffGtaTxi0jNB+Zt44Byzg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net6.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net7.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net8.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, - {"id": "System.Threading.Tasks.Extensions", "version": "4.5.4", "sha512": "sha512-aAUghud9PHGYc3o9oWPWd0C3xE+TJQw5ZZs78htlR6mr9ky/QEgfXHjyQ2GvOq9H1S0YizcVVKCSin92ZcH8FA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.2": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.3": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.4": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.5": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.6": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "BenderProxy", "id": "BenderProxy", "version": "1.0.0", "sha512": "sha512-zNsAtO6ZwNa0MfyFFJAzA6rsTtqnjY+bD2gCDHSUIbRS31wRJ9GfOeummSlEVaH/DSxxiuQaIhZmtIFAM0WW+A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Castle.Core", "id": "Castle.Core", "version": "5.1.1", "sha512": "sha512-N4oUnr+qEtAMs1vK7ogGgD33vHWYDJ4MZ/NuPgV9avKrrq0kzYJ0qVlcesdMuVl8nWkTsRJbhuaxVqZvehrC+g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Diagnostics.EventLog"], "net6.0": ["System.Diagnostics.EventLog"], "net7.0": ["System.Diagnostics.EventLog"], "net8.0": ["System.Diagnostics.EventLog"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.1": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp2.2": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netcoreapp3.0": ["System.Diagnostics.EventLog"], "netcoreapp3.1": ["System.Diagnostics.EventLog"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Diagnostics.EventLog", "System.Reflection.Emit"], "netstandard2.1": ["System.Diagnostics.EventLog"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "CommandLineParser", "id": "CommandLineParser", "version": "2.8.0", "sha512": "sha512-jCdlE9/pHlvHLPs7lqDSRBHuO9Lpgy1CP2rePzlkoBHbuXfKkGAXUPoTOgol/nL2aVW+f2mnL11rc8fzEwlLXw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Handlebars.Net", "id": "Handlebars.Net", "version": "1.11.5", "sha512": "sha512-0MwU7vAXI3hT+9W7r7vadVZ21+HoGC5Z0Qc39JP+xxMlF7YOyZEhFByoQ2gtldWyeG6Gt2LglcFH8kJaXg/uiQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net6.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net7.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "net8.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp2.2": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netcoreapp3.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"], "netstandard2.1": ["Microsoft.CSharp", "System.Reflection.TypeExtensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Humanizer.Core", "id": "Humanizer.Core", "version": "2.8.26", "sha512": "sha512-hdDm8u0FrPEorV1qXA+W01DCR9zeNX5fwe5fXFUyzmA/JjLxMjt7/W672rSOWIjWHGkD6cZYOFLjIg/0O+a8kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["NETStandard.Library"], "net451": ["NETStandard.Library"], "net452": ["NETStandard.Library"], "net46": ["NETStandard.Library"], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.AspNetCore.App.Ref", "id": "Microsoft.AspNetCore.App.Ref", "version": "6.0.9", "sha512": "sha512-uD7Y3nff4uUBryVsahaW3/krbzh0yPI2DY9iCak/wPTqJucwmVszCmkEIQOfmT4L9f13xcsqHq3eN+ka6YvIYg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.Extensions.Caching.Abstractions|6.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0", "Microsoft.Extensions.Configuration|6.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0", "Microsoft.Extensions.Hosting|6.0.0", "Microsoft.Extensions.Http|6.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0", "Microsoft.Extensions.Logging.Console|6.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0", "Microsoft.Extensions.Logging|6.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0", "Microsoft.Extensions.Options|6.0.0", "Microsoft.Extensions.Primitives|6.0.0", "System.Diagnostics.EventLog|6.0.0", "System.IO.Pipelines|6.0.0", "System.Security.Cryptography.Xml|6.0.0", "Microsoft.AspNetCore.Antiforgery|6.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0", "Microsoft.AspNetCore.Authentication|6.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0", "Microsoft.AspNetCore.Authorization|6.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0", "Microsoft.AspNetCore.Components|6.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0", "Microsoft.AspNetCore.Cors|6.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0", "Microsoft.AspNetCore|6.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0", "Microsoft.AspNetCore.Hosting|6.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0", "Microsoft.AspNetCore.Http|6.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0", "Microsoft.AspNetCore.Identity|6.0.0", "Microsoft.AspNetCore.Localization|6.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0", "Microsoft.AspNetCore.Metadata|6.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0", "Microsoft.AspNetCore.Mvc|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0", "Microsoft.AspNetCore.Razor|6.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0", "Microsoft.AspNetCore.Routing|6.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0", "Microsoft.AspNetCore.Session|6.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0", "Microsoft.AspNetCore.SignalR|6.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0", "Microsoft.Extensions.Features|6.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0", "Microsoft.Extensions.Identity.Core|6.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0", "Microsoft.Extensions.Localization|6.0.0", "Microsoft.Extensions.ObjectPool|6.0.0", "Microsoft.Extensions.WebEncoders|6.0.0", "Microsoft.JSInterop|6.0.0", "Microsoft.Net.Http.Headers|6.0.0"], "framework_list": ["Microsoft.AspNetCore.Antiforgery|6.0.0.0", "Microsoft.AspNetCore.Authentication.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Authentication.Cookies|6.0.0.0", "Microsoft.AspNetCore.Authentication.Core|6.0.0.0", "Microsoft.AspNetCore.Authentication.OAuth|6.0.0.0", "Microsoft.AspNetCore.Authentication|6.0.0.0", "Microsoft.AspNetCore.Authorization.Policy|6.0.0.0", "Microsoft.AspNetCore.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Authorization|6.0.0.0", "Microsoft.AspNetCore.Components.Forms|6.0.0.0", "Microsoft.AspNetCore.Components.Server|6.0.0.0", "Microsoft.AspNetCore.Components.Web|6.0.0.0", "Microsoft.AspNetCore.Components|6.0.0.0", "Microsoft.AspNetCore.Connections.Abstractions|6.0.0.0", "Microsoft.AspNetCore.CookiePolicy|6.0.0.0", "Microsoft.AspNetCore.Cors|6.0.0.0", "Microsoft.AspNetCore.Cryptography.Internal|6.0.0.0", "Microsoft.AspNetCore.Cryptography.KeyDerivation|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Abstractions|6.0.0.0", "Microsoft.AspNetCore.DataProtection.Extensions|6.0.0.0", "Microsoft.AspNetCore.DataProtection|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.AspNetCore.Diagnostics|6.0.0.0", "Microsoft.AspNetCore.HostFiltering|6.0.0.0", "Microsoft.AspNetCore.Hosting.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting.Server.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Hosting|6.0.0.0", "Microsoft.AspNetCore.Html.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Http.Connections.Common|6.0.0.0", "Microsoft.AspNetCore.Http.Connections|6.0.0.0", "Microsoft.AspNetCore.Http.Extensions|6.0.0.0", "Microsoft.AspNetCore.Http.Features|6.0.0.0", "Microsoft.AspNetCore.Http.Results|6.0.0.0", "Microsoft.AspNetCore.Http|6.0.0.0", "Microsoft.AspNetCore.HttpLogging|6.0.0.0", "Microsoft.AspNetCore.HttpOverrides|6.0.0.0", "Microsoft.AspNetCore.HttpsPolicy|6.0.0.0", "Microsoft.AspNetCore.Identity|6.0.0.0", "Microsoft.AspNetCore.Localization.Routing|6.0.0.0", "Microsoft.AspNetCore.Localization|6.0.0.0", "Microsoft.AspNetCore.Metadata|6.0.0.0", "Microsoft.AspNetCore.Mvc.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Mvc.ApiExplorer|6.0.0.0", "Microsoft.AspNetCore.Mvc.Core|6.0.0.0", "Microsoft.AspNetCore.Mvc.Cors|6.0.0.0", "Microsoft.AspNetCore.Mvc.DataAnnotations|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Json|6.0.0.0", "Microsoft.AspNetCore.Mvc.Formatters.Xml|6.0.0.0", "Microsoft.AspNetCore.Mvc.Localization|6.0.0.0", "Microsoft.AspNetCore.Mvc.Razor|6.0.0.0", "Microsoft.AspNetCore.Mvc.RazorPages|6.0.0.0", "Microsoft.AspNetCore.Mvc.TagHelpers|6.0.0.0", "Microsoft.AspNetCore.Mvc.ViewFeatures|6.0.0.0", "Microsoft.AspNetCore.Mvc|6.0.0.0", "Microsoft.AspNetCore.Razor.Runtime|6.0.0.0", "Microsoft.AspNetCore.Razor|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching.Abstractions|6.0.0.0", "Microsoft.AspNetCore.ResponseCaching|6.0.0.0", "Microsoft.AspNetCore.ResponseCompression|6.0.0.0", "Microsoft.AspNetCore.Rewrite|6.0.0.0", "Microsoft.AspNetCore.Routing.Abstractions|6.0.0.0", "Microsoft.AspNetCore.Routing|6.0.0.0", "Microsoft.AspNetCore.Server.HttpSys|6.0.0.0", "Microsoft.AspNetCore.Server.IIS|6.0.0.0", "Microsoft.AspNetCore.Server.IISIntegration|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Core|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Quic|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets|6.0.0.0", "Microsoft.AspNetCore.Server.Kestrel|6.0.0.0", "Microsoft.AspNetCore.Session|6.0.0.0", "Microsoft.AspNetCore.SignalR.Common|6.0.0.0", "Microsoft.AspNetCore.SignalR.Core|6.0.0.0", "Microsoft.AspNetCore.SignalR.Protocols.Json|6.0.0.0", "Microsoft.AspNetCore.SignalR|6.0.0.0", "Microsoft.AspNetCore.StaticFiles|6.0.0.0", "Microsoft.AspNetCore.WebSockets|6.0.0.0", "Microsoft.AspNetCore.WebUtilities|6.0.0.0", "Microsoft.AspNetCore|6.0.0.0", "Microsoft.Extensions.Caching.Abstractions|6.0.0.0", "Microsoft.Extensions.Caching.Memory|6.0.0.0", "Microsoft.Extensions.Configuration.Abstractions|6.0.0.0", "Microsoft.Extensions.Configuration.Binder|6.0.0.0", "Microsoft.Extensions.Configuration.CommandLine|6.0.0.0", "Microsoft.Extensions.Configuration.EnvironmentVariables|6.0.0.0", "Microsoft.Extensions.Configuration.FileExtensions|6.0.0.0", "Microsoft.Extensions.Configuration.Ini|6.0.0.0", "Microsoft.Extensions.Configuration.Json|6.0.0.0", "Microsoft.Extensions.Configuration.KeyPerFile|6.0.0.0", "Microsoft.Extensions.Configuration.UserSecrets|6.0.0.0", "Microsoft.Extensions.Configuration.Xml|6.0.0.0", "Microsoft.Extensions.Configuration|6.0.0.0", "Microsoft.Extensions.DependencyInjection.Abstractions|6.0.0.0", "Microsoft.Extensions.DependencyInjection|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions|6.0.0.0", "Microsoft.Extensions.Diagnostics.HealthChecks|6.0.0.0", "Microsoft.Extensions.Features|6.0.0.0", "Microsoft.Extensions.FileProviders.Abstractions|6.0.0.0", "Microsoft.Extensions.FileProviders.Composite|6.0.0.0", "Microsoft.Extensions.FileProviders.Embedded|6.0.0.0", "Microsoft.Extensions.FileProviders.Physical|6.0.0.0", "Microsoft.Extensions.FileSystemGlobbing|6.0.0.0", "Microsoft.Extensions.Hosting.Abstractions|6.0.0.0", "Microsoft.Extensions.Hosting|6.0.0.0", "Microsoft.Extensions.Http|6.0.0.0", "Microsoft.Extensions.Identity.Core|6.0.0.0", "Microsoft.Extensions.Identity.Stores|6.0.0.0", "Microsoft.Extensions.Localization.Abstractions|6.0.0.0", "Microsoft.Extensions.Localization|6.0.0.0", "Microsoft.Extensions.Logging.Abstractions|6.0.0.0", "Microsoft.Extensions.Logging.Configuration|6.0.0.0", "Microsoft.Extensions.Logging.Console|6.0.0.0", "Microsoft.Extensions.Logging.Debug|6.0.0.0", "Microsoft.Extensions.Logging.EventLog|6.0.0.0", "Microsoft.Extensions.Logging.EventSource|6.0.0.0", "Microsoft.Extensions.Logging.TraceSource|6.0.0.0", "Microsoft.Extensions.Logging|6.0.0.0", "Microsoft.Extensions.ObjectPool|6.0.0.0", "Microsoft.Extensions.Options.ConfigurationExtensions|6.0.0.0", "Microsoft.Extensions.Options.DataAnnotations|6.0.0.0", "Microsoft.Extensions.Options|6.0.0.0", "Microsoft.Extensions.Primitives|6.0.0.0", "Microsoft.Extensions.WebEncoders|6.0.0.0", "Microsoft.JSInterop|6.0.0.0", "Microsoft.Net.Http.Headers|6.0.0.0", "System.Diagnostics.EventLog|6.0.0.0", "System.IO.Pipelines|6.0.0.0", "System.Security.Cryptography.Xml|6.0.0.0"]}, + {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "7.0.0", "sha512": "sha512-Nb9B1lxCab0LZi0ijNLEpw4hgwt0Wl8QQM1DxIhJS2otChAtIVMfyGrYl3YzdSjspvBYPliJlr0kCtizNAVe3w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Threading.Tasks.Extensions"], "net462": ["System.Threading.Tasks.Extensions"], "net47": ["System.Threading.Tasks.Extensions"], "net471": ["System.Threading.Tasks.Extensions"], "net472": ["System.Threading.Tasks.Extensions"], "net48": ["System.Threading.Tasks.Extensions"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["System.Threading.Tasks.Extensions"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Threading.Tasks.Extensions"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.CSharp", "id": "Microsoft.CSharp", "version": "4.5.0", "sha512": "sha512-yWWeTbGCzBOlRPWDCIxiTZW1ecZiMbao0ZT97KKEWdBhrLvUqU8RdzkhzuCRQzvoxzxlR7vytO43OOgFdkxv6g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp1.1": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.4": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.5": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard1.6": ["NETStandard.Library", "System.Reflection.TypeExtensions"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Extensions.DependencyInjection", "id": "Microsoft.Extensions.DependencyInjection", "version": "3.1.9", "sha512": "sha512-vMQqPTihUGUTAzlr4354IcThGnC+ayzonlXLGBmnC6tdNUi40kKlqVl1d71RFgqV7Sj6L/ZmATPaX/xxCj5hAA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net462": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net47": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net471": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net472": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net48": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "net5.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net6.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net7.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "net8.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp2.2": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netcoreapp3.0": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netcoreapp3.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Extensions.DependencyInjection.Abstractions", "Microsoft.Bcl.AsyncInterfaces"], "netstandard2.1": ["Microsoft.Extensions.DependencyInjection.Abstractions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Extensions.DependencyInjection.Abstractions", "id": "Microsoft.Extensions.DependencyInjection.Abstractions", "version": "3.1.9", "sha512": "sha512-qbiwYBpKjQ2u3FNFDuznksbzsR7e/pUK2XR/osxiU/1Lo+M8MqjRnvBm5x/Uvtv2iDdMNQ2N+smrPgRGKDXboQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.App.Ref", "id": "Microsoft.NETCore.App.Ref", "version": "6.0.9", "sha512": "sha512-dudkoXKqcCPEjNnwYQzRipKGcIB21o3CjbTffACrnSmUAoZS+IdIv3COpwKIaZKDPl7euUUpb7WhAc0WH8+//A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": ["Microsoft.CSharp|4.4.0", "Microsoft.Win32.Primitives|4.3.0", "Microsoft.Win32.Registry|4.4.0", "runtime.debian.8-x64.runtime.native.System|4.3.0", "runtime.debian.8-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Http|4.3.0", "runtime.debian.8-x64.runtime.native.System.Net.Security|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.23-x64.runtime.native.System|4.3.0", "runtime.fedora.23-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.fedora.24-x64.runtime.native.System|4.3.0", "runtime.fedora.24-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Http|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Net.Security|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Http|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Net.Security|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.osx.10.10-x64.runtime.native.System|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple|4.3.0", "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.rhel.7-x64.runtime.native.System|4.3.0", "runtime.rhel.7-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Http|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Net.Security|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.IO.Compression|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Http|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Net.Security|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography|4.3.0", "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl|4.3.0", "System.AppContext|4.3.0", "System.Buffers|4.4.0", "System.Collections|4.3.0", "System.Collections.Concurrent|4.3.0", "System.Collections.Immutable|1.4.0", "System.Collections.NonGeneric|4.3.0", "System.Collections.Specialized|4.3.0", "System.ComponentModel|4.3.0", "System.ComponentModel.EventBasedAsync|4.3.0", "System.ComponentModel.Primitives|4.3.0", "System.ComponentModel.TypeConverter|4.3.0", "System.Console|4.3.0", "System.Data.Common|4.3.0", "System.Diagnostics.Contracts|4.3.0", "System.Diagnostics.Debug|4.3.0", "System.Diagnostics.DiagnosticSource|4.4.0", "System.Diagnostics.FileVersionInfo|4.3.0", "System.Diagnostics.Process|4.3.0", "System.Diagnostics.StackTrace|4.3.0", "System.Diagnostics.TextWriterTraceListener|4.3.0", "System.Diagnostics.Tools|4.3.0", "System.Diagnostics.TraceSource|4.3.0", "System.Diagnostics.Tracing|4.3.0", "System.Dynamic.Runtime|4.3.0", "System.Globalization|4.3.0", "System.Globalization.Calendars|4.3.0", "System.Globalization.Extensions|4.3.0", "System.IO|4.3.0", "System.IO.Compression|4.3.0", "System.IO.Compression.ZipFile|4.3.0", "System.IO.FileSystem|4.3.0", "System.IO.FileSystem.AccessControl|4.4.0", "System.IO.FileSystem.DriveInfo|4.3.0", "System.IO.FileSystem.Primitives|4.3.0", "System.IO.FileSystem.Watcher|4.3.0", "System.IO.IsolatedStorage|4.3.0", "System.IO.MemoryMappedFiles|4.3.0", "System.IO.Pipes|4.3.0", "System.IO.UnmanagedMemoryStream|4.3.0", "System.Linq|4.3.0", "System.Linq.Expressions|4.3.0", "System.Linq.Queryable|4.3.0", "System.Net.Http|4.3.0", "System.Net.NameResolution|4.3.0", "System.Net.Primitives|4.3.0", "System.Net.Requests|4.3.0", "System.Net.Security|4.3.0", "System.Net.Sockets|4.3.0", "System.Net.WebHeaderCollection|4.3.0", "System.ObjectModel|4.3.0", "System.Private.DataContractSerialization|4.3.0", "System.Reflection|4.3.0", "System.Reflection.Emit|4.3.0", "System.Reflection.Emit.ILGeneration|4.3.0", "System.Reflection.Emit.Lightweight|4.3.0", "System.Reflection.Extensions|4.3.0", "System.Reflection.Metadata|1.5.0", "System.Reflection.Primitives|4.3.0", "System.Reflection.TypeExtensions|4.3.0", "System.Resources.ResourceManager|4.3.0", "System.Runtime|4.3.0", "System.Runtime.Extensions|4.3.0", "System.Runtime.Handles|4.3.0", "System.Runtime.InteropServices|4.3.0", "System.Runtime.InteropServices.RuntimeInformation|4.3.0", "System.Runtime.Loader|4.3.0", "System.Runtime.Numerics|4.3.0", "System.Runtime.Serialization.Formatters|4.3.0", "System.Runtime.Serialization.Json|4.3.0", "System.Runtime.Serialization.Primitives|4.3.0", "System.Security.AccessControl|4.4.0", "System.Security.Claims|4.3.0", "System.Security.Cryptography.Algorithms|4.3.0", "System.Security.Cryptography.Cng|4.4.0", "System.Security.Cryptography.Csp|4.3.0", "System.Security.Cryptography.Encoding|4.3.0", "System.Security.Cryptography.OpenSsl|4.4.0", "System.Security.Cryptography.Primitives|4.3.0", "System.Security.Cryptography.X509Certificates|4.3.0", "System.Security.Cryptography.Xml|4.4.0", "System.Security.Principal|4.3.0", "System.Security.Principal.Windows|4.4.0", "System.Text.Encoding|4.3.0", "System.Text.Encoding.Extensions|4.3.0", "System.Text.RegularExpressions|4.3.0", "System.Threading|4.3.0", "System.Threading.Overlapped|4.3.0", "System.Threading.Tasks|4.3.0", "System.Threading.Tasks.Extensions|4.3.0", "System.Threading.Tasks.Parallel|4.3.0", "System.Threading.Thread|4.3.0", "System.Threading.ThreadPool|4.3.0", "System.Threading.Timer|4.3.0", "System.ValueTuple|4.3.0", "System.Xml.ReaderWriter|4.3.0", "System.Xml.XDocument|4.3.0", "System.Xml.XmlDocument|4.3.0", "System.Xml.XmlSerializer|4.3.0", "System.Xml.XPath|4.3.0", "System.Xml.XPath.XDocument|4.3.0"], "framework_list": ["Microsoft.CSharp|6.0.0.0", "Microsoft.VisualBasic.Core|11.0.0.0", "Microsoft.VisualBasic|10.0.0.0", "Microsoft.Win32.Primitives|6.0.0.0", "Microsoft.Win32.Registry|6.0.0.0", "System.AppContext|6.0.0.0", "System.Buffers|6.0.0.0", "System.Collections.Concurrent|6.0.0.0", "System.Collections.Immutable|6.0.0.0", "System.Collections.NonGeneric|6.0.0.0", "System.Collections.Specialized|6.0.0.0", "System.Collections|6.0.0.0", "System.ComponentModel.Annotations|6.0.0.0", "System.ComponentModel.DataAnnotations|4.0.0.0", "System.ComponentModel.EventBasedAsync|6.0.0.0", "System.ComponentModel.Primitives|6.0.0.0", "System.ComponentModel.TypeConverter|6.0.0.0", "System.ComponentModel|6.0.0.0", "System.Configuration|4.0.0.0", "System.Console|6.0.0.0", "System.Core|4.0.0.0", "System.Data.Common|6.0.0.0", "System.Data.DataSetExtensions|4.0.0.0", "System.Data|4.0.0.0", "System.Diagnostics.Contracts|6.0.0.0", "System.Diagnostics.Debug|6.0.0.0", "System.Diagnostics.DiagnosticSource|6.0.0.0", "System.Diagnostics.FileVersionInfo|6.0.0.0", "System.Diagnostics.Process|6.0.0.0", "System.Diagnostics.StackTrace|6.0.0.0", "System.Diagnostics.TextWriterTraceListener|6.0.0.0", "System.Diagnostics.Tools|6.0.0.0", "System.Diagnostics.TraceSource|6.0.0.0", "System.Diagnostics.Tracing|6.0.0.0", "System.Drawing.Primitives|6.0.0.0", "System.Drawing|4.0.0.0", "System.Dynamic.Runtime|6.0.0.0", "System.Formats.Asn1|6.0.0.0", "System.Globalization.Calendars|6.0.0.0", "System.Globalization.Extensions|6.0.0.0", "System.Globalization|6.0.0.0", "System.IO.Compression.Brotli|6.0.0.0", "System.IO.Compression.FileSystem|4.0.0.0", "System.IO.Compression.ZipFile|6.0.0.0", "System.IO.Compression|6.0.0.0", "System.IO.FileSystem.AccessControl|6.0.0.0", "System.IO.FileSystem.DriveInfo|6.0.0.0", "System.IO.FileSystem.Primitives|6.0.0.0", "System.IO.FileSystem.Watcher|6.0.0.0", "System.IO.FileSystem|6.0.0.0", "System.IO.IsolatedStorage|6.0.0.0", "System.IO.MemoryMappedFiles|6.0.0.0", "System.IO.Pipes.AccessControl|6.0.0.0", "System.IO.Pipes|6.0.0.0", "System.IO.UnmanagedMemoryStream|6.0.0.0", "System.IO|6.0.0.0", "System.Linq.Expressions|6.0.0.0", "System.Linq.Parallel|6.0.0.0", "System.Linq.Queryable|6.0.0.0", "System.Linq|6.0.0.0", "System.Memory|6.0.0.0", "System.Net.Http.Json|6.0.0.0", "System.Net.Http|6.0.0.0", "System.Net.HttpListener|6.0.0.0", "System.Net.Mail|6.0.0.0", "System.Net.NameResolution|6.0.0.0", "System.Net.NetworkInformation|6.0.0.0", "System.Net.Ping|6.0.0.0", "System.Net.Primitives|6.0.0.0", "System.Net.Requests|6.0.0.0", "System.Net.Security|6.0.0.0", "System.Net.ServicePoint|6.0.0.0", "System.Net.Sockets|6.0.0.0", "System.Net.WebClient|6.0.0.0", "System.Net.WebHeaderCollection|6.0.0.0", "System.Net.WebProxy|6.0.0.0", "System.Net.WebSockets.Client|6.0.0.0", "System.Net.WebSockets|6.0.0.0", "System.Net|4.0.0.0", "System.Numerics.Vectors|6.0.0.0", "System.Numerics|4.0.0.0", "System.ObjectModel|6.0.0.0", "System.Reflection.DispatchProxy|6.0.0.0", "System.Reflection.Emit.ILGeneration|6.0.0.0", "System.Reflection.Emit.Lightweight|6.0.0.0", "System.Reflection.Emit|6.0.0.0", "System.Reflection.Extensions|6.0.0.0", "System.Reflection.Metadata|6.0.0.0", "System.Reflection.Primitives|6.0.0.0", "System.Reflection.TypeExtensions|6.0.0.0", "System.Reflection|6.0.0.0", "System.Resources.Reader|6.0.0.0", "System.Resources.ResourceManager|6.0.0.0", "System.Resources.Writer|6.0.0.0", "System.Runtime.CompilerServices.Unsafe|6.0.0.0", "System.Runtime.CompilerServices.VisualC|6.0.0.0", "System.Runtime.Extensions|6.0.0.0", "System.Runtime.Handles|6.0.0.0", "System.Runtime.InteropServices.RuntimeInformation|6.0.0.0", "System.Runtime.InteropServices|6.0.0.0", "System.Runtime.Intrinsics|6.0.0.0", "System.Runtime.Loader|6.0.0.0", "System.Runtime.Numerics|6.0.0.0", "System.Runtime.Serialization.Formatters|6.0.0.0", "System.Runtime.Serialization.Json|6.0.0.0", "System.Runtime.Serialization.Primitives|6.0.0.0", "System.Runtime.Serialization.Xml|6.0.0.0", "System.Runtime.Serialization|4.0.0.0", "System.Runtime|6.0.0.0", "System.Security.AccessControl|6.0.0.0", "System.Security.Claims|6.0.0.0", "System.Security.Cryptography.Algorithms|6.0.0.0", "System.Security.Cryptography.Cng|6.0.0.0", "System.Security.Cryptography.Csp|6.0.0.0", "System.Security.Cryptography.Encoding|6.0.0.0", "System.Security.Cryptography.OpenSsl|6.0.0.0", "System.Security.Cryptography.Primitives|6.0.0.0", "System.Security.Cryptography.X509Certificates|6.0.0.0", "System.Security.Principal.Windows|6.0.0.0", "System.Security.Principal|6.0.0.0", "System.Security.SecureString|6.0.0.0", "System.Security|4.0.0.0", "System.ServiceModel.Web|4.0.0.0", "System.ServiceProcess|4.0.0.0", "System.Text.Encoding.CodePages|6.0.0.0", "System.Text.Encoding.Extensions|6.0.0.0", "System.Text.Encoding|6.0.0.0", "System.Text.Encodings.Web|6.0.0.0", "System.Text.Json|6.0.0.0", "System.Text.RegularExpressions|6.0.0.0", "System.Threading.Channels|6.0.0.0", "System.Threading.Overlapped|6.0.0.0", "System.Threading.Tasks.Dataflow|6.0.0.0", "System.Threading.Tasks.Extensions|6.0.0.0", "System.Threading.Tasks.Parallel|6.0.0.0", "System.Threading.Tasks|6.0.0.0", "System.Threading.Thread|6.0.0.0", "System.Threading.ThreadPool|6.0.0.0", "System.Threading.Timer|6.0.0.0", "System.Threading|6.0.0.0", "System.Transactions.Local|6.0.0.0", "System.Transactions|4.0.0.0", "System.ValueTuple|4.0.3.0", "System.Web.HttpUtility|6.0.0.0", "System.Web|4.0.0.0", "System.Windows|4.0.0.0", "System.Xml.Linq|4.0.0.0", "System.Xml.ReaderWriter|6.0.0.0", "System.Xml.Serialization|4.0.0.0", "System.Xml.XDocument|6.0.0.0", "System.Xml.XPath.XDocument|6.0.0.0", "System.Xml.XPath|6.0.0.0", "System.Xml.XmlDocument|6.0.0.0", "System.Xml.XmlSerializer|6.0.0.0", "System.Xml|4.0.0.0", "System|4.0.0.0", "WindowsBase|4.0.0.0", "mscorlib|4.0.0.0", "netstandard|2.1.0.0"]}, + {"name": "Microsoft.NETCore.App.Runtime.linux-x64", "id": "Microsoft.NETCore.App.Runtime.linux-x64", "version": "6.0.15", "sha512": "sha512-hO+FrI8U0/8oJOCevQb4PMqBmGTXGLCmnD0MSFdUiOnO9cNDb1MC4X+ndV/xVQyLnE/WJfYG8HDj84ieyj25ow==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.App.Runtime.osx-arm64", "id": "Microsoft.NETCore.App.Runtime.osx-arm64", "version": "6.0.15", "sha512": "sha512-YjL1PzK4SQgWWrDk8QIRwpgXraM8Yst0rbqicFioXrGV+/hltlfJMvfPY9NmHV8f2ydjcSdY88aBXHQxDOD/zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.App.Runtime.osx-x64", "id": "Microsoft.NETCore.App.Runtime.osx-x64", "version": "6.0.15", "sha512": "sha512-lM8ibaNG0wJJoEsHqyAqf3ZZmDRxRqtk48jx5zOuTV/hIqtjidbx+8i5FibNdAf/zBeONLHI29TdW8km+V1tTg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.App.Runtime.win-x64", "id": "Microsoft.NETCore.App.Runtime.win-x64", "version": "6.0.15", "sha512": "sha512-F/BqQdowumzmKRXewGJXG9+HhxhmzlNm8Jr151AX7RjAz/1cjSx5P/iZJsIimg+2uzIIGQI8+5UEpLnIFor5sA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.Platforms", "id": "Microsoft.NETCore.Platforms", "version": "7.0.4", "sha512": "sha512-mcQWjuDBh4WHGG4WcBI0k025WAdA2afMm6fs42sm1f+3gRyNQUiuMVT5gAWNUGSHmlu6qn/TCnAQpfl4Gm6cBw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.NETCore.Targets", "id": "Microsoft.NETCore.Targets", "version": "5.0.0", "sha512": "sha512-hYHm3JAjQO/nySxcl1EpZhYEW+2P3H1eLZNr+QxgO5TnLS6hqtfi5WchjQzjid45MYmhy2X7IOmcWtDP4fpMGw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Microsoft.Win32.SystemEvents", "id": "Microsoft.Win32.SystemEvents", "version": "7.0.0", "sha512": "sha512-GO6SWx/wSZIFvxOn67Y6OiIGdz9JGCg5CRDDbSAAvBDQeZFbybu9sEOUb9w/vUlQv+A2XakTFZg9Ug1w+tgbWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Moq", "id": "Moq", "version": "4.12.0", "sha512": "sha512-52OnOpSKKlXfi+ukMOeRJ1Md1bOeloP7L7HkzvWtjkfRBkWmpo3vBGWX4P1wPVJEfgrDTeXCvq8S1vLasXdFJA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net451": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net452": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net46": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net461": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net462": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net47": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net471": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net472": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net48": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net5.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net6.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net7.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "net8.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Castle.Core", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Castle.Core", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "NETStandard.Library", "id": "NETStandard.Library", "version": "2.0.3", "sha512": "sha512-548M6mnBSJWxsIlkQHfbzoYxpiYFXZZSL00p4GHYv8PkiqFBnnT68mW5mGEsA/ch9fDO9GkPgkFQpWiXZN7mAQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["Microsoft.NETCore.Platforms"], "net451": ["Microsoft.NETCore.Platforms"], "net452": ["Microsoft.NETCore.Platforms"], "net46": ["Microsoft.NETCore.Platforms"], "net461": ["Microsoft.NETCore.Platforms"], "net462": ["Microsoft.NETCore.Platforms"], "net47": ["Microsoft.NETCore.Platforms"], "net471": ["Microsoft.NETCore.Platforms"], "net472": ["Microsoft.NETCore.Platforms"], "net48": ["Microsoft.NETCore.Platforms"], "net5.0": ["Microsoft.NETCore.Platforms"], "net6.0": ["Microsoft.NETCore.Platforms"], "net7.0": ["Microsoft.NETCore.Platforms"], "net8.0": ["Microsoft.NETCore.Platforms"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "System.Diagnostics.Tools", "System.IO", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms"], "netstandard2.1": ["Microsoft.NETCore.Platforms"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.1", "sha512": "sha512-g3MbZi6vBTeaI/hEbvR7vBETSd1DWLe9i1E4P+nPY34v5i94zqUqDXvdWC3G+7tYN9SnsdU9zzegrnRz4h7nsQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.1": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.2": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.3": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.4": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.5": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard1.6": ["Microsoft.CSharp", "NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "NUnit", "id": "NUnit", "version": "3.13.2", "sha512": "sha512-foKGnF2ckq6uRAybnw1PIMDsDxdp1rbuEBJ4t2LYa5HDL80mOcEUjdbVqRDMTsKNiikfkPEBoeyGV42ZXiLLQA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["NETStandard.Library"], "net6.0": ["NETStandard.Library"], "net7.0": ["NETStandard.Library"], "net8.0": ["NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NETStandard.Library"], "netcoreapp2.1": ["NETStandard.Library"], "netcoreapp2.2": ["NETStandard.Library"], "netcoreapp3.0": ["NETStandard.Library"], "netcoreapp3.1": ["NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NETStandard.Library"], "netstandard2.1": ["NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "NUnitLite", "id": "NUnitLite", "version": "3.13.2", "sha512": "sha512-kPGW4B0ycZAqDPLPKU058JR9onD3svLKAYEghQ1Oyy1YC8bIgtniGUKUbjqeNI3i5KnqFMxEdiHTGF0XxDG9hQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["NUnit"], "net40": ["NUnit"], "net403": ["NUnit"], "net45": ["NUnit"], "net451": ["NUnit"], "net452": ["NUnit"], "net46": ["NUnit"], "net461": ["NUnit"], "net462": ["NUnit"], "net47": ["NUnit"], "net471": ["NUnit"], "net472": ["NUnit"], "net48": ["NUnit"], "net5.0": ["NUnit", "NETStandard.Library"], "net6.0": ["NUnit", "NETStandard.Library"], "net7.0": ["NUnit", "NETStandard.Library"], "net8.0": ["NUnit", "NETStandard.Library"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["NUnit", "NETStandard.Library"], "netcoreapp2.1": ["NUnit", "NETStandard.Library"], "netcoreapp2.2": ["NUnit", "NETStandard.Library"], "netcoreapp3.0": ["NUnit", "NETStandard.Library"], "netcoreapp3.1": ["NUnit", "NETStandard.Library"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["NUnit", "NETStandard.Library"], "netstandard2.1": ["NUnit", "NETStandard.Library"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "Runfiles", "id": "Runfiles", "version": "0.12.0", "sha512": "sha512-R0fzLX7VYL2Ce8xQd0r2nVxKPvDt5Ob5P3P0wa6Mj7feErsjJUsJvR4MEZTZSsuRZhcnwOB71F/mryh9pP59Zw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Buffers", "id": "System.Buffers", "version": "4.5.1", "sha512": "sha512-gNphWOVbm89+C15jebnPRaYykU8De1PFv1YJV24814IfeGGVa3PXRHDS0MLlbdI1pe9Mpv/n4ZK4INwtAjqv8g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "7.0.0", "sha512": "sha512-m/H4Rg7KukGEmfRpl+rXU1UbMN3GYbv42cbMHRgMwHIiUL3svKoFFR76Fk/mHN5TgrwGx64fS0Fp+p3qICKg/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Principal.Windows"], "net462": ["System.Security.Principal.Windows"], "net47": ["System.Security.Principal.Windows"], "net471": ["System.Security.Principal.Windows"], "net472": ["System.Security.Principal.Windows"], "net48": ["System.Security.Principal.Windows"], "net5.0": ["System.Security.Principal.Windows"], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Principal.Windows"], "netstandard2.1": ["System.Security.Principal.Windows"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Diagnostics.Tools", "id": "System.Diagnostics.Tools", "version": "4.3.0", "sha512": "sha512-Fk1pd+chy860Tt57/XWwO42XceBCau+l1Axxhn6WQJL9xqaAi8vFVZ7XPsLFMsplfWR2r3mknKOth5uDZvE9kA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Drawing.Common", "id": "System.Drawing.Common", "version": "7.0.0", "sha512": "sha512-0TJd5U26gRDgGa/rqABgHC5OBAiyl7Mm3pIzPgKfpmPXFQ8CFVWyGi+4mkEaCK715ViOBDkU2pC2nAiPunLw7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["Microsoft.Win32.SystemEvents"], "net7.0": ["Microsoft.Win32.SystemEvents"], "net8.0": ["Microsoft.Win32.SystemEvents"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.IO", "id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Memory", "id": "System.Memory", "version": "4.5.5", "sha512": "sha512-6MjlNsl7lKw0Q8lAsw2tQ89ul9x6jD2Yk3EEj+dOFoYGOE9eAUO9wNhvd4O/n97oQXlkyzqKXXUnE+kLElFy3A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Buffers", "System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.2": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.3": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.4": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.5": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard1.6": ["System.Buffers", "System.Reflection", "System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Numerics.Vectors", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Numerics.Vectors", "id": "System.Numerics.Vectors", "version": "4.5.0", "sha512": "sha512-nATsBTD2CKr4AYN6eRszhX4sptImWmBJwB/U6XKCWWfnCcrTBw8XSCm3QA9gjppkHTr8OkXUY21MR91D3QZXsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["NETStandard.Library"], "netcoreapp1.1": ["NETStandard.Library"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["NETStandard.Library"], "netstandard1.1": ["NETStandard.Library"], "netstandard1.2": ["NETStandard.Library"], "netstandard1.3": ["NETStandard.Library"], "netstandard1.4": ["NETStandard.Library"], "netstandard1.5": ["NETStandard.Library"], "netstandard1.6": ["NETStandard.Library"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection", "id": "System.Reflection", "version": "4.3.0", "sha512": "sha512-IyW2ftYNzgMCgHBk8lQiy+G3+ydbU5tE+6PEqM5JJvIdeFKaXDSzHAPYDREPe6zpr5WJ1Fcma+rAFCIAV6+DMw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.Reflection.Primitives", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.Emit", "id": "System.Reflection.Emit", "version": "4.7.0", "sha512": "sha512-EMAyW5k6MdmTxYre7l8cb9f/Zhc78ivw0pXSm/sw8OAewwQqzqxeJFu2LY+/7WPOAq33TgTPVYEeDPPVQbiXqQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.2": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.3": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.4": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.5": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard1.6": ["System.IO", "System.Reflection", "System.Reflection.Emit.ILGeneration", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.InteropServices"], "netstandard2.0": ["System.Reflection.Emit.ILGeneration"], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.Emit.ILGeneration", "id": "System.Reflection.Emit.ILGeneration", "version": "4.7.0", "sha512": "sha512-iQ2Xw8qC8YCsh3+OUAMtD4g8LiA5r9ZxVhlDZn3Dok7C382JbLlPNyyXXCW3KRiv0Ebvwt7b1ZYqmIoCerrI2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.1": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.Primitives", "id": "System.Reflection.Primitives", "version": "4.3.0", "sha512": "sha512-1LnMkF9aXKuQAgYzjoiQaL9mwY7oY6KdaO/zzeLMynNBEqKoUfLi5TiKIewoAF+hkxfGTZsjkjsF1jRL4uSeqg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Reflection.TypeExtensions", "id": "System.Reflection.TypeExtensions", "version": "4.7.0", "sha512": "sha512-Q/fczHO357fqTntQPZBSwhstHCcZFvgqOwBnkO+lhMyS2pYBDtXyfRQblK3SYXN8GXHOEJzjNM5Tr12zp73c6A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime"], "netcoreapp1.1": ["System.Reflection", "System.Runtime"], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime"], "netstandard1.4": ["System.Reflection", "System.Runtime"], "netstandard1.5": ["System.Reflection", "System.Runtime"], "netstandard1.6": ["System.Reflection", "System.Runtime"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Runtime", "id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.0.0", "sha512": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Runtime.Handles", "id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Runtime.InteropServices", "id": "System.Runtime.InteropServices", "version": "4.3.0", "sha512": "sha512-ZQeZw+ZU77ua1nFXycYM5G8oioFZe+N84qC/XUg1BEBl7z9luZcyjLu7+4H0yJuNfn1hOAiAAZ3u5us/lj9w2Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["System.Runtime"], "net47": ["System.Runtime"], "net471": ["System.Runtime"], "net472": ["System.Runtime"], "net48": ["System.Runtime"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Reflection", "System.Reflection.Primitives", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Security.Principal.Windows", "id": "System.Security.Principal.Windows", "version": "5.0.0", "sha512": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp1.1": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.4": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.5": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard1.6": ["System.Reflection", "System.Runtime", "System.Runtime.Handles", "System.Runtime.InteropServices", "System.Text.Encoding"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Text.Encoding", "id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Text.Encodings.Web", "id": "System.Text.Encodings.Web", "version": "8.0.0", "sha512": "sha512-uggiw4w7ZYq6lJVkLSaeiCuCfjvkrS3BQm2Kl9PLxaInfF+AhH0MuTgQeK8BUjMoxJksqgWBRtXY7muKCGCcMg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Buffers", "System.Memory", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Text.Json", "id": "System.Text.Json", "version": "6.0.9", "sha512": "sha512-as7kWI67Stsl6uS9mWf74R9YWD2uakVSh0YbijKqbkFEfoZJodZJISry+w2RrAZvyffGtaTxi0jNB+Zt44Byzg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net462": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net47": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net471": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net472": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net48": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "net5.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net6.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net7.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "net8.0": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp2.2": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"], "netstandard2.1": ["Microsoft.Bcl.AsyncInterfaces", "System.Runtime.CompilerServices.Unsafe", "System.Text.Encodings.Web", "System.Buffers", "System.Memory", "System.Numerics.Vectors", "System.Threading.Tasks.Extensions"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Threading.Tasks", "id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []}, + {"name": "System.Threading.Tasks.Extensions", "id": "System.Threading.Tasks.Extensions", "version": "4.5.4", "sha512": "sha512-aAUghud9PHGYc3o9oWPWd0C3xE+TJQw5ZZs78htlR6mr9ky/QEgfXHjyQ2GvOq9H1S0YizcVVKCSin92ZcH8FA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["System.Runtime.CompilerServices.Unsafe"], "net451": ["System.Runtime.CompilerServices.Unsafe"], "net452": ["System.Runtime.CompilerServices.Unsafe"], "net46": ["System.Runtime.CompilerServices.Unsafe"], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.1": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.2": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.3": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.4": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.5": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard1.6": ["System.Runtime", "System.Runtime.CompilerServices.Unsafe", "System.Threading.Tasks"], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []}, ], ) diff --git a/dotnet/paket.nuget_extension.bzl b/dotnet/paket.nuget_extension.bzl index 4b7dc36b07a75..b1adec3053ada 100644 --- a/dotnet/paket.nuget_extension.bzl +++ b/dotnet/paket.nuget_extension.bzl @@ -1,4 +1,4 @@ -"Generated by paket2bazel" +"Generated" load(":paket.nuget.bzl", _nuget = "nuget") diff --git a/dotnet/src/support/BUILD.bazel b/dotnet/src/support/BUILD.bazel index 2dde4bdd5fde2..1dfa93737382c 100644 --- a/dotnet/src/support/BUILD.bazel +++ b/dotnet/src/support/BUILD.bazel @@ -39,9 +39,6 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], visibility = [ "//dotnet:__subpackages__", ], @@ -82,9 +79,6 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], visibility = [ "//dotnet:__subpackages__", ], diff --git a/dotnet/src/webdriver/BUILD.bazel b/dotnet/src/webdriver/BUILD.bazel index d18cd4b59e068..33809c85c1c5f 100644 --- a/dotnet/src/webdriver/BUILD.bazel +++ b/dotnet/src/webdriver/BUILD.bazel @@ -47,9 +47,6 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], visibility = [ "//dotnet:__subpackages__", ], @@ -79,9 +76,6 @@ csharp_library( target_frameworks = [ "netstandard2.0", ], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], visibility = [ "//dotnet:__subpackages__", ], diff --git a/dotnet/test/common/BUILD.bazel b/dotnet/test/common/BUILD.bazel index a2ca040cbe9ce..3173e82133f23 100644 --- a/dotnet/test/common/BUILD.bazel +++ b/dotnet/test/common/BUILD.bazel @@ -46,9 +46,6 @@ csharp_library( "//common/manager:selenium-manager-macos", ], target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "Microsoft.NETCore.App.Ref"), - ], visibility = [ "//dotnet/test:__subpackages__", ], @@ -89,9 +86,6 @@ dotnet_nunit_test_suite( ":test-data", ], target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "Microsoft.NETCore.App.Ref"), - ], deps = [ ":fixtures", "//dotnet/src/webdriver", diff --git a/dotnet/test/support/Events/BUILD.bazel b/dotnet/test/support/Events/BUILD.bazel index ed817b58cc87d..497f55ad62b7f 100644 --- a/dotnet/test/support/Events/BUILD.bazel +++ b/dotnet/test/support/Events/BUILD.bazel @@ -9,9 +9,6 @@ dotnet_nunit_test_suite( size = "small", srcs = SMALL_TESTS, target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], deps = [ "//dotnet/src/support", "//dotnet/src/webdriver", @@ -40,9 +37,6 @@ dotnet_nunit_test_suite( "//dotnet/test/common:test-data", ], target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], deps = [ "//dotnet/src/support", "//dotnet/src/webdriver", diff --git a/dotnet/test/support/Extensions/BUILD.bazel b/dotnet/test/support/Extensions/BUILD.bazel index 2605646c6dbf7..6d3db657b1dfe 100644 --- a/dotnet/test/support/Extensions/BUILD.bazel +++ b/dotnet/test/support/Extensions/BUILD.bazel @@ -5,9 +5,6 @@ dotnet_nunit_test_suite( size = "small", srcs = glob(["*.cs"]), target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], deps = [ "//dotnet/src/support", "//dotnet/src/webdriver", diff --git a/dotnet/test/support/UI/BUILD.bazel b/dotnet/test/support/UI/BUILD.bazel index bb4ef1f9f8246..b8305c24c6fac 100644 --- a/dotnet/test/support/UI/BUILD.bazel +++ b/dotnet/test/support/UI/BUILD.bazel @@ -14,9 +14,6 @@ dotnet_nunit_test_suite( size = "small", srcs = SMALL_TESTS, target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], deps = [ "//dotnet/src/support", "//dotnet/src/webdriver", @@ -45,9 +42,6 @@ dotnet_nunit_test_suite( "//dotnet/test/common:test-data", ], target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "NETStandard.Library"), - ], deps = [ "//dotnet/src/support", "//dotnet/src/webdriver", diff --git a/dotnet/update-deps.sh b/dotnet/update-deps.sh index e2056c70b305e..76ec285f2caa6 100755 --- a/dotnet/update-deps.sh +++ b/dotnet/update-deps.sh @@ -5,5 +5,5 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) ( cd "$SCRIPT_DIR" || exit 1 (dotnet tool restore && dotnet tool run paket install) - bazel run @rules_dotnet//tools/paket2bazel:paket2bazel.exe -- --dependencies-file "$(pwd)"/paket.dependencies --output-folder "$(pwd)" + bazel run @rules_dotnet//tools/paket2bazel:paket2bazel -- --dependencies-file "$(pwd)"/paket.dependencies --output-folder "$(pwd)" ) diff --git a/third_party/dotnet/devtools/src/generator/BUILD.bazel b/third_party/dotnet/devtools/src/generator/BUILD.bazel index dc23f3fd6da8c..c78f7516763d4 100644 --- a/third_party/dotnet/devtools/src/generator/BUILD.bazel +++ b/third_party/dotnet/devtools/src/generator/BUILD.bazel @@ -5,9 +5,6 @@ csharp_binary( srcs = glob(["**/*.cs"]), # Used as a tool in our build, so just target one framework target_frameworks = ["net7.0"], - targeting_packs = [ - framework("nuget", "Microsoft.NETCore.App.Ref"), - ], visibility = [ "//dotnet:__subpackages__", ], From 996683a01d5954bd1087119832e19ab394f63898 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:30:20 -0700 Subject: [PATCH 026/176] Update dependency bazel_features to v1.12.0 (#14015) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 341aecede1804..0ab7459b42f18 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -5,7 +5,7 @@ bazel_dep(name = "aspect_bazel_lib", version = "2.7.6") bazel_dep(name = "aspect_rules_esbuild", version = "0.20.0") bazel_dep(name = "aspect_rules_js", version = "1.42.3") bazel_dep(name = "aspect_rules_ts", version = "2.1.0") -bazel_dep(name = "bazel_features", version = "1.9.1") +bazel_dep(name = "bazel_features", version = "1.12.0") bazel_dep(name = "bazel_skylib", version = "1.5.0") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0") bazel_dep(name = "contrib_rules_jvm", version = "0.24.0") From 3b1d4d82f8445504f52f367af817e20b0fbe8fe4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:32:43 -0700 Subject: [PATCH 027/176] Update dependency dataclasses to v0.8 (#14021) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- py/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/requirements.txt b/py/requirements.txt index b4b8092407fa8..060b4bb81e1c5 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -3,7 +3,7 @@ attrs==23.2.0 certifi==2023.7.22 cffi==1.16.0 cryptography==42.0.7 -dataclasses==0.6 +dataclasses==0.8 debugpy==1.8.1 h11==0.14.0 idna==3.7 From bd4939fe9ef1d4d80ae6a44cb9122fe322e0f865 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:33:46 -0700 Subject: [PATCH 028/176] Update Rust crate zip to v1.3.1 (#14014) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- rust/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/Cargo.lock b/rust/Cargo.lock index e9e46bd451355..efd1b05f8d3ff 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -2758,9 +2758,9 @@ dependencies = [ [[package]] name = "zip" -version = "1.3.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f4a27345eb6f7aa7bd015ba7eb4175fa4e1b462a29874b779e0bbcf96c6ac7" +checksum = "1b7a5a9285bd4ee13bdeb3f8a4917eb46557e53f270c783849db8bef37b0ad00" dependencies = [ "arbitrary", "crc32fast", From c9cb2d36f32e8c6b44c88d382d8831398c350028 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:35:51 -0700 Subject: [PATCH 029/176] Update ruby/setup-ruby digest to d5fb7a2 (#14016) chore(deps): update ruby/setup-ruby digest to d5fb7a2 Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/pre-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 382d38d25489b..86a8cb2442860 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -68,7 +68,7 @@ jobs: fetch-tags: true ref: release-${{ github.event.inputs.version }} - name: Install Ruby - uses: ruby/setup-ruby@7dc18ff0ca6e3630d3f29d2a85ebf6cc27ae9d6c + uses: ruby/setup-ruby@d5fb7a202fc07872cb44f00ba8e6197b70cb0c55 with: ruby-version: '3.1' working-directory: 'rb' From e702a81d230f827d31e325222ab9c14c2a452257 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:36:42 -0700 Subject: [PATCH 030/176] Update dependency certifi to v2023.11.17 (#14018) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- py/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py/requirements.txt b/py/requirements.txt index 060b4bb81e1c5..3d8cf9e2b6baf 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -1,6 +1,6 @@ async-generator==1.10 attrs==23.2.0 -certifi==2023.7.22 +certifi==2023.11.17 cffi==1.16.0 cryptography==42.0.7 dataclasses==0.8 From a27da444f1586014fa663cc3238ae21d523397ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:37:24 -0700 Subject: [PATCH 031/176] Update dependency contrib_rules_jvm to v0.27.0 (#14019) chore(deps): update dependency contrib_rules_jvm to v0.27.0 Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index 0ab7459b42f18..4694837797677 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ bazel_dep(name = "aspect_rules_ts", version = "2.1.0") bazel_dep(name = "bazel_features", version = "1.12.0") bazel_dep(name = "bazel_skylib", version = "1.5.0") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0") -bazel_dep(name = "contrib_rules_jvm", version = "0.24.0") +bazel_dep(name = "contrib_rules_jvm", version = "0.27.0") bazel_dep(name = "platforms", version = "0.0.10") bazel_dep(name = "rules_dotnet", version = "0.15.1") bazel_dep(name = "rules_java", version = "7.4.0") From 40f684eeeaf68c8c769d7f9e130943f968e8e820 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 09:46:41 -0700 Subject: [PATCH 032/176] Update ubuntu:focal Docker digest to 0b89735 (#14100) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- scripts/remote-image/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remote-image/Dockerfile b/scripts/remote-image/Dockerfile index b6915af401516..28b7a8b9afb7a 100644 --- a/scripts/remote-image/Dockerfile +++ b/scripts/remote-image/Dockerfile @@ -1,5 +1,5 @@ # Our images must be for Linux x86_64 -FROM --platform=linux/amd64 ubuntu:focal@sha256:874aca52f79ae5f8258faff03e10ce99ae836f6e7d2df6ecd3da5c1cad3a912b +FROM --platform=linux/amd64 ubuntu:focal@sha256:0b897358ff6624825fb50d20ffb605ab0eaea77ced0adb8c6a4b756513dec6fc ENV DEBIAN_FRONTEND=noninteractive From 373566f4757cc262a14963bf3379c84a518111e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Jun 2024 06:22:52 -0700 Subject: [PATCH 033/176] Update bazel-contrib/setup-bazel action to v0.8.5 (#14106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/bazel.yml | 4 ++-- .github/workflows/ci.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 3b477c12bd45a..a737794d89892 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -116,7 +116,7 @@ jobs: node-version: ${{ inputs.node-version }} - name: Setup Bazel with caching if: inputs.caching - uses: bazel-contrib/setup-bazel@0.8.4 + uses: bazel-contrib/setup-bazel@0.8.5 with: bazelisk-cache: true bazelrc: common --color=yes @@ -130,7 +130,7 @@ jobs: repository-cache: true - name: Setup Bazel without caching if: inputs.caching == false - uses: bazel-contrib/setup-bazel@0.8.4 + uses: bazel-contrib/setup-bazel@0.8.5 with: bazelrc: common --color=yes - name: Setup Fluxbox and Xvfb diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da9762b4d514d..2df302b754c39 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: with: fetch-depth: 50 - name: Setup Bazel - uses: bazel-contrib/setup-bazel@0.8.4 + uses: bazel-contrib/setup-bazel@0.8.5 with: bazelisk-cache: true cache-version: 2 From e4501f4a29db961d3eb01d9e55fc18878d88c901 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 8 Jun 2024 06:24:02 -0700 Subject: [PATCH 034/176] Update dependency @babel/preset-react to v7.24.7 (#14108) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- javascript/grid-ui/package.json | 2 +- package-lock.json | 254 ++++++++++++++++++-------------- pnpm-lock.yaml | 202 ++++++++++++++++++++----- 3 files changed, 312 insertions(+), 146 deletions(-) diff --git a/javascript/grid-ui/package.json b/javascript/grid-ui/package.json index 90f486bc0eba7..add2c75d45847 100644 --- a/javascript/grid-ui/package.json +++ b/javascript/grid-ui/package.json @@ -47,7 +47,7 @@ ] }, "devDependencies": { - "@babel/preset-react": "7.24.1", + "@babel/preset-react": "7.24.7", "@testing-library/jest-dom": "6.4.5", "@testing-library/react": "14.3.1", "@testing-library/user-event": "14.5.2", diff --git a/package-lock.json b/package-lock.json index 92db357b655da..54f57ff8022e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "source-map-explorer": "2.5.3" }, "devDependencies": { - "@babel/preset-react": "7.24.1", + "@babel/preset-react": "7.24.7", "@testing-library/jest-dom": "6.4.5", "@testing-library/react": "14.3.1", "@testing-library/user-event": "14.5.2", @@ -2210,11 +2210,12 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.2", + "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" }, "engines": { @@ -2261,11 +2262,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", - "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0", + "@babel/types": "^7.24.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -2275,12 +2277,13 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2303,42 +2306,50 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.0" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2364,10 +2375,11 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2385,36 +2397,40 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2434,11 +2450,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -2448,9 +2465,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", - "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -2459,12 +2477,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2474,12 +2493,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", - "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.7.tgz", + "integrity": "sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2489,16 +2509,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.24.7.tgz", + "integrity": "sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2508,12 +2529,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.24.7.tgz", + "integrity": "sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2523,13 +2545,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", - "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.7.tgz", + "integrity": "sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2539,17 +2562,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", - "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.7.tgz", + "integrity": "sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-transform-react-display-name": "^7.24.1", - "@babel/plugin-transform-react-jsx": "^7.23.4", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.24.1" + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "@babel/plugin-transform-react-display-name": "^7.24.7", + "@babel/plugin-transform-react-jsx": "^7.24.7", + "@babel/plugin-transform-react-jsx-development": "^7.24.7", + "@babel/plugin-transform-react-pure-annotations": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -2570,31 +2594,33 @@ } }, "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.24.1", - "@babel/types": "^7.24.0", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2603,12 +2629,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -4340,6 +4367,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -4670,6 +4698,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -4683,6 +4712,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -4810,6 +4840,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -4817,7 +4848,8 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" }, "node_modules/commander": { "version": "10.0.1", @@ -6255,6 +6287,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } @@ -9253,6 +9286,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4fd952a156f1a..b0403f89db386 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -75,8 +75,8 @@ importers: version: 2.5.3 devDependencies: '@babel/preset-react': - specifier: 7.24.1 - version: 7.24.1(@babel/core@7.24.5) + specifier: 7.24.7 + version: 7.24.7(@babel/core@7.24.5) '@testing-library/jest-dom': specifier: 6.4.5 version: 6.4.5(@types/jest@29.5.12) @@ -227,6 +227,14 @@ packages: '@babel/highlight': 7.24.5 picocolors: 1.0.1 + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + dev: true + /@babel/compat-data@7.24.4: resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} engines: {node: '>=6.9.0'} @@ -262,11 +270,21 @@ packages: '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + /@babel/generator@7.24.7: + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.24.7: + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 dev: true /@babel/helper-compilation-targets@7.23.6: @@ -283,6 +301,13 @@ packages: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.24.7: + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-function-name@7.23.0: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} @@ -290,18 +315,43 @@ packages: '@babel/template': 7.24.0 '@babel/types': 7.24.5 + /@babel/helper-function-name@7.24.7: + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + dev: true + /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.5 + /@babel/helper-hoist-variables@7.24.7: + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-module-imports@7.24.3: resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.5 + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} engines: {node: '>=6.9.0'} @@ -315,8 +365,8 @@ packages: '@babel/helper-split-export-declaration': 7.24.5 '@babel/helper-validator-identifier': 7.24.5 - /@babel/helper-plugin-utils@7.24.5: - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + /@babel/helper-plugin-utils@7.24.7: + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} engines: {node: '>=6.9.0'} dev: true @@ -332,6 +382,13 @@ packages: dependencies: '@babel/types': 7.24.5 + /@babel/helper-split-export-declaration@7.24.7: + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.7 + dev: true + /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} @@ -341,6 +398,11 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.24.7: + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -350,10 +412,20 @@ packages: resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.24.7: + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helpers@7.24.5: resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} engines: {node: '>=6.9.0'} @@ -373,6 +445,16 @@ packages: js-tokens: 4.0.0 picocolors: 1.0.1 + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true + /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} @@ -388,74 +470,88 @@ packages: dependencies: '@babel/types': 7.24.5 - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.5): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + /@babel/parser@7.24.7: + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.7 + dev: true + + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.5): - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + /@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5): - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + /@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.5) + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color dev: true - /@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + /@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 dev: true - /@babel/preset-react@7.24.1(@babel/core@7.24.5): - resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} + /@babel/preset-react@7.24.7(@babel/core@7.24.5): + resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) + '@babel/helper-plugin-utils': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.5) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.5) + transitivePeerDependencies: + - supports-color dev: true /@babel/runtime@7.24.5: @@ -472,6 +568,15 @@ packages: '@babel/parser': 7.24.5 '@babel/types': 7.24.5 + /@babel/template@7.24.7: + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + dev: true + /@babel/traverse@7.24.5: resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} engines: {node: '>=6.9.0'} @@ -489,6 +594,24 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.24.7: + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.4(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.23.6: resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} engines: {node: '>=6.9.0'} @@ -506,6 +629,15 @@ packages: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 + /@babel/types@7.24.7: + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true + /@bazel/runfiles@5.8.1: resolution: {integrity: sha512-NDdfpdQ6rZlylgv++iMn5FkObC/QlBQvipinGLSOguTYpRywmieOyJ29XHvUilspwTFSILWpoE9CqMGkHXug1g==} dev: true From ca29d5ddeb0355f5566ad8c7af5ade57b7da219f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Boni=20Garc=C3=ADa?= Date: Mon, 10 Jun 2024 12:45:24 +0200 Subject: [PATCH 035/176] [rust] Use pure Rust implementation for which command (#14114) * [rust] Use pure Rust implementation for which command * [rust] Temporal disable of windows worker to run tests in CI * Revert "[rust] Temporal disable of windows worker to run tests in CI" This reverts commit 1b88d56bbd27a96363f47cfcd502ec87817aed46. --- rust/Cargo.Bazel.lock | 282 +++++++++++++++++++++++++++++++++++++++++- rust/Cargo.lock | 34 +++++ rust/Cargo.toml | 3 +- rust/src/lib.rs | 34 +---- rust/src/shell.rs | 5 +- 5 files changed, 318 insertions(+), 40 deletions(-) diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index c6d7a3aa62c11..39619b74b7da2 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "14dbf17d9e872e55d0e978b15ce60660603017dfddf7a924539a1085d1255e3f", + "checksum": "2e41cb73375f93664a33a387f57c14d87cccc43361197a1b4f325e2bc05f6954", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -3713,6 +3713,52 @@ ], "license_file": "LICENSE" }, + "either 1.12.0": { + "name": "either", + "version": "1.12.0", + "package_url": "https://github.com/rayon-rs/either", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/either/1.12.0/download", + "sha256": "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + } + }, + "targets": [ + { + "Library": { + "crate_name": "either", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "either", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "default", + "use_std" + ], + "selects": {} + }, + "edition": "2018", + "version": "1.12.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "encoding_rs 0.8.34": { "name": "encoding_rs", "version": "0.8.34", @@ -5814,6 +5860,56 @@ ], "license_file": "LICENSE-APACHE" }, + "home 0.5.9": { + "name": "home", + "version": "0.5.9", + "package_url": "https://github.com/rust-lang/cargo", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/home/0.5.9/download", + "sha256": "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" + } + }, + "targets": [ + { + "Library": { + "crate_name": "home", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "home", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [], + "selects": { + "cfg(windows)": [ + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ] + } + }, + "edition": "2021", + "version": "0.5.9" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, "http 0.2.12": { "name": "http", "version": "0.2.12", @@ -11581,10 +11677,6 @@ "id": "infer 0.15.0", "target": "infer" }, - { - "id": "is_executable 1.0.1", - "target": "is_executable" - }, { "id": "log 0.4.21", "target": "log" @@ -11629,6 +11721,10 @@ "id": "walkdir 2.5.0", "target": "walkdir" }, + { + "id": "which 6.0.1", + "target": "which" + }, { "id": "zip 1.3.0", "target": "zip" @@ -11642,6 +11738,10 @@ "id": "assert_cmd 2.0.14", "target": "assert_cmd" }, + { + "id": "is_executable 1.0.1", + "target": "is_executable" + }, { "id": "rstest 0.19.0", "target": "rstest" @@ -16115,6 +16215,72 @@ ], "license_file": "LICENSE" }, + "which 6.0.1": { + "name": "which", + "version": "6.0.1", + "package_url": "https://github.com/harryfei/which-rs.git", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/which/6.0.1/download", + "sha256": "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" + } + }, + "targets": [ + { + "Library": { + "crate_name": "which", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "which", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "either 1.12.0", + "target": "either" + } + ], + "selects": { + "cfg(any(unix, target_os = \"wasi\", target_os = \"redox\"))": [ + { + "id": "rustix 0.38.34", + "target": "rustix" + } + ], + "cfg(any(windows, unix, target_os = \"redox\"))": [ + { + "id": "home 0.5.9", + "target": "home" + } + ], + "cfg(windows)": [ + { + "id": "winsafe 0.0.19", + "target": "winsafe" + } + ] + } + }, + "edition": "2021", + "version": "6.0.1" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": "LICENSE.txt" + }, "winapi 0.3.9": { "name": "winapi", "version": "0.3.9", @@ -16539,11 +16705,14 @@ "Win32_Storage", "Win32_Storage_FileSystem", "Win32_System", + "Win32_System_Com", "Win32_System_Console", "Win32_System_IO", "Win32_System_SystemInformation", "Win32_System_Threading", "Win32_System_WindowsProgramming", + "Win32_UI", + "Win32_UI_Shell", "default" ], "selects": {} @@ -17868,6 +18037,50 @@ ], "license_file": "LICENSE" }, + "winsafe 0.0.19": { + "name": "winsafe", + "version": "0.0.19", + "package_url": "https://github.com/rodrigocfd/winsafe", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/winsafe/0.0.19/download", + "sha256": "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + } + }, + "targets": [ + { + "Library": { + "crate_name": "winsafe", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "winsafe", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "kernel" + ], + "selects": {} + }, + "edition": "2021", + "version": "0.0.19" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": "LICENSE.md" + }, "x509-certificate 0.23.1": { "name": "x509-certificate", "version": "0.23.1", @@ -18837,6 +19050,62 @@ "x86_64-unknown-linux-gnu", "x86_64-unknown-nixos-gnu" ], + "cfg(any(unix, target_os = \"wasi\", target_os = \"redox\"))": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "s390x-unknown-linux-gnu", + "wasm32-wasi", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu" + ], + "cfg(any(windows, unix, target_os = \"redox\"))": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-pc-windows-msvc", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-pc-windows-msvc", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "s390x-unknown-linux-gnu", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-pc-windows-msvc", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu" + ], "cfg(fuzzing)": [], "cfg(not(all(windows, target_env = \"msvc\", not(target_vendor = \"uwp\"))))": [ "aarch64-apple-darwin", @@ -19124,7 +19393,6 @@ "exitcode 1.1.2", "flate2 1.0.30", "infer 0.15.0", - "is_executable 1.0.1", "log 0.4.21", "regex 1.10.4", "reqwest 0.12.4", @@ -19136,10 +19404,12 @@ "tokio 1.37.0", "toml 0.8.13", "walkdir 2.5.0", + "which 6.0.1", "zip 1.3.0" ], "direct_dev_deps": [ "assert_cmd 2.0.14", + "is_executable 1.0.1", "rstest 0.19.0" ] } diff --git a/rust/Cargo.lock b/rust/Cargo.lock index efd1b05f8d3ff..6921db2265fb4 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -606,6 +606,12 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + [[package]] name = "encoding_rs" version = "0.8.34" @@ -892,6 +898,15 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + [[package]] name = "http" version = "0.2.12" @@ -1828,6 +1843,7 @@ dependencies = [ "tokio", "toml", "walkdir", + "which", "zip", ] @@ -2483,6 +2499,18 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "which" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +dependencies = [ + "either", + "home", + "rustix", + "winsafe", +] + [[package]] name = "winapi" version = "0.3.9" @@ -2691,6 +2719,12 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + [[package]] name = "x509-certificate" version = "0.23.1" diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 02affb86181b4..06b39dd64cc0d 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -27,7 +27,6 @@ flate2 = "1.0.30" tar = "0.4.40" infer = "0.15.0" exitcode = "1.1.2" -is_executable = "1.0.1" toml = "0.8.13" bzip2 = "0.4.4" sevenz-rust = "0.6.0" @@ -35,10 +34,12 @@ walkdir = "2.5.0" debpkg = "0.6.0" anyhow = { version = "1.0.84", default-features = false, features = ["backtrace", "std"] } apple-flat-package = "0.18.0" +which = "6.0.1" [dev-dependencies] assert_cmd = "2.0.14" rstest = "0.19.0" +is_executable = "1.0.1" [profile.release] opt-level = 'z' # Optimize for size diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 95dcad9906d22..b01a7e4822618 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -37,12 +37,11 @@ use crate::metadata::{ use crate::safari::{SafariManager, SAFARIDRIVER_NAME, SAFARI_NAME}; use crate::safaritp::{SafariTPManager, SAFARITP_NAMES}; use crate::shell::{ - run_shell_command, run_shell_command_by_os, run_shell_command_with_log, split_lines, Command, + run_shell_command, run_shell_command_by_os, run_shell_command_with_log, Command, }; use crate::stats::{send_stats_to_plausible, Props}; use anyhow::anyhow; use anyhow::Error; -use is_executable::IsExecutable; use reqwest::{Client, Proxy}; use std::collections::HashMap; use std::path::{Path, PathBuf}; @@ -50,6 +49,7 @@ use std::sync::mpsc::{Receiver, Sender}; use std::time::Duration; use std::{env, fs, thread}; use walkdir::DirEntry; +use which::which; pub mod chrome; pub mod config; @@ -98,8 +98,6 @@ pub const ARCH_X86: &str = "x86"; pub const ARCH_AMD64: &str = "amd64"; pub const ARCH_ARM64: &str = "arm64"; pub const ENV_PROCESSOR_ARCHITECTURE: &str = "PROCESSOR_ARCHITECTURE"; -pub const WHERE_COMMAND: &str = "where {}"; -pub const WHICH_COMMAND: &str = "which {}"; pub const TTL_SEC: u64 = 3600; pub const UNAME_COMMAND: &str = "uname -{}"; pub const ESCAPE_COMMAND: &str = "printf %q \"{}\""; @@ -594,32 +592,10 @@ pub trait SeleniumManager { } fn execute_which_in_shell(&self, arg: &str) -> Option { - let which_or_where = if WINDOWS.is(self.get_os()) { - WHERE_COMMAND - } else { - WHICH_COMMAND - }; - let which_command = Command::new_single(format_one_arg(which_or_where, arg)); - let path = match run_shell_command_by_os(self.get_os(), which_command) { - Ok(path) => { - let path_vector = split_lines(path.as_str()); - if path_vector.len() == 1 { - self.get_first_in_vector(path_vector) - } else { - let exec_paths: Vec<&str> = path_vector - .into_iter() - .filter(|p| Path::new(p).is_executable()) - .collect(); - if exec_paths.is_empty() { - None - } else { - self.get_first_in_vector(exec_paths) - } - } - } + match which(arg) { + Ok(path) => Some(path_to_string(&path)), Err(_) => None, - }; - path + } } fn get_first_in_vector(&self, vector: Vec<&str>) -> Option { diff --git a/rust/src/shell.rs b/rust/src/shell.rs index 1c50d88cb77e3..203ba693a8924 100644 --- a/rust/src/shell.rs +++ b/rust/src/shell.rs @@ -96,10 +96,7 @@ pub fn run_shell_command(shell: &str, flag: &str, command: Command) -> Result &str { From 4fab94c69b0c52804e8ec92a2eb0e98677be6097 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Mon, 10 Jun 2024 12:50:05 +0200 Subject: [PATCH 036/176] [rust] Some minor improvements (not logical changes) --- rust/src/grid.rs | 2 +- rust/src/iexplorer.rs | 2 +- rust/src/main.rs | 4 ++-- rust/src/metadata.rs | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/rust/src/grid.rs b/rust/src/grid.rs index ce7b6a693d2a9..fdd2742a93238 100644 --- a/rust/src/grid.rs +++ b/rust/src/grid.rs @@ -142,7 +142,7 @@ impl SeleniumManager for GridManager { .collect(); if !filtered_releases.is_empty() { - let assets = &filtered_releases.get(0).unwrap().assets; + let assets = &filtered_releases.first().unwrap().assets; let driver_releases: Vec<&Assets> = assets .iter() .filter(|url| { diff --git a/rust/src/iexplorer.rs b/rust/src/iexplorer.rs index 9e498da771989..a57cd8ac83cd3 100644 --- a/rust/src/iexplorer.rs +++ b/rust/src/iexplorer.rs @@ -154,7 +154,7 @@ impl SeleniumManager for IExplorerManager { .collect(); if !filtered_releases.is_empty() { - let assets = &filtered_releases.get(0).unwrap().assets; + let assets = &filtered_releases.first().unwrap().assets; let driver_releases: Vec<&Assets> = assets .iter() .filter(|url| url.browser_download_url.contains(IEDRIVER_RELEASE)) diff --git a/rust/src/main.rs b/rust/src/main.rs index 4347cf9900a94..4bf799e781396 100644 --- a/rust/src/main.rs +++ b/rust/src/main.rs @@ -178,8 +178,8 @@ fn main() { log.error(&err); flush_and_exit(DATAERR, &log, Some(err)); }) - } else if grid.is_some() { - GridManager::new(grid.as_ref().unwrap().to_string()).unwrap_or_else(|err| { + } else if let Some(grid_value) = &grid { + GridManager::new(grid_value.to_string()).unwrap_or_else(|err| { log.error(&err); flush_and_exit(DATAERR, &log, Some(err)); }) diff --git a/rust/src/metadata.rs b/rust/src/metadata.rs index 52971774f5e17..c84171ce0d74f 100644 --- a/rust/src/metadata.rs +++ b/rust/src/metadata.rs @@ -121,7 +121,7 @@ pub fn get_browser_version_from_metadata( if browser.is_empty() { None } else { - Some(browser.get(0).unwrap().browser_version.to_string()) + Some(browser.first().unwrap().browser_version.to_string()) } } @@ -139,7 +139,7 @@ pub fn get_driver_version_from_metadata( if driver.is_empty() { None } else { - Some(driver.get(0).unwrap().driver_version.to_string()) + Some(driver.first().unwrap().driver_version.to_string()) } } From 0eaafa82ac2e954b422a6470a583fb720b2670e8 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Mon, 10 Jun 2024 14:27:33 +0200 Subject: [PATCH 037/176] [rust] Update Cargo Bazel lock file --- rust/Cargo.Bazel.lock | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index 39619b74b7da2..a6af1c53d73b5 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "2e41cb73375f93664a33a387f57c14d87cccc43361197a1b4f325e2bc05f6954", + "checksum": "ff2b9596da02a769801bdc2dba40078b050eb4b8168420ca27877f6c7b799039", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -11726,7 +11726,7 @@ "target": "which" }, { - "id": "zip 1.3.0", + "id": "zip 1.3.1", "target": "zip" } ], @@ -18447,14 +18447,14 @@ ], "license_file": "LICENSE-APACHE" }, - "zip 1.3.0": { + "zip 1.3.1": { "name": "zip", - "version": "1.3.0", + "version": "1.3.1", "package_url": "https://github.com/zip-rs/zip2.git", "repository": { "Http": { - "url": "https://static.crates.io/crates/zip/1.3.0/download", - "sha256": "f1f4a27345eb6f7aa7bd015ba7eb4175fa4e1b462a29874b779e0bbcf96c6ac7" + "url": "https://static.crates.io/crates/zip/1.3.1/download", + "sha256": "1b7a5a9285bd4ee13bdeb3f8a4917eb46557e53f270c783849db8bef37b0ad00" } }, "targets": [ @@ -18491,6 +18491,7 @@ "crate_features": { "common": [ "_deflate-any", + "deflate-flate2", "deflate-zlib", "flate2" ], @@ -18515,7 +18516,7 @@ "target": "thiserror" }, { - "id": "zip 1.3.0", + "id": "zip 1.3.1", "target": "build_script_build" } ], @@ -18544,7 +18545,7 @@ ], "selects": {} }, - "version": "1.3.0" + "version": "1.3.1" }, "build_script_attrs": { "data_glob": [ @@ -19405,7 +19406,7 @@ "toml 0.8.13", "walkdir 2.5.0", "which 6.0.1", - "zip 1.3.0" + "zip 1.3.1" ], "direct_dev_deps": [ "assert_cmd 2.0.14", From 734cca0cc002742868d16358122bb87949bf45b2 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Mon, 10 Jun 2024 15:30:15 +0200 Subject: [PATCH 038/176] [rust] Bump to rules_rust 0.46.0 --- WORKSPACE | 4 +- rust/Cargo.Bazel.lock | 3545 +++++++++++++++++++++++++++++++++++------ 2 files changed, 3024 insertions(+), 525 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 26248d2563478..4cf1c70bc3f8f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -42,8 +42,8 @@ rules_closure_toolchains() http_archive( name = "rules_rust", - integrity = "sha256-JLN47ZcAbx9wEr5Jiib4HduZATGLiDgK7oUi/fvotzU=", - urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.42.1/rules_rust-v0.42.1.tar.gz"], + integrity = "sha256-F8U7+AC5MvMtPKGdLLnorVM84cDXKfDRgwd7/dq3rUY=", + urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.46.0/rules_rust-v0.46.0.tar.gz"], ) load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains") diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index a6af1c53d73b5..2b73e7078de80 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "ff2b9596da02a769801bdc2dba40078b050eb4b8168420ca27877f6c7b799039", + "checksum": "2e222054f92b335737da8a14f5d38655c2ed374a00dd12dc161b161e4d1a62b9", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -296,7 +296,19 @@ } ], "selects": { - "cfg(windows)": [ + "aarch64-pc-windows-msvc": [ + { + "id": "anstyle-wincon 3.0.3", + "target": "anstyle_wincon" + } + ], + "i686-pc-windows-msvc": [ + { + "id": "anstyle-wincon 3.0.3", + "target": "anstyle_wincon" + } + ], + "x86_64-pc-windows-msvc": [ { "id": "anstyle-wincon 3.0.3", "target": "anstyle_wincon" @@ -873,15 +885,6 @@ "**" ], "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "derive_arbitrary 1.3.2", - "target": "derive_arbitrary" - } - ], - "selects": {} - }, "version": "1.3.2" }, "license": "MIT OR Apache-2.0", @@ -1975,19 +1978,16 @@ "id": "jobserver 0.1.31", "target": "jobserver" }, + { + "id": "libc 0.2.154", + "target": "libc" + }, { "id": "once_cell 1.19.0", "target": "once_cell" } ], - "selects": { - "cfg(unix)": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ] - } + "selects": {} }, "edition": "2018", "version": "1.0.97" @@ -2153,7 +2153,133 @@ } ], "selects": { - "cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))": [ + "aarch64-apple-darwin": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-apple-ios": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-fuchsia": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-linux-android": [ + { + "id": "android-tzdata 0.1.1", + "target": "android_tzdata" + }, + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-pc-windows-msvc": [ + { + "id": "windows-targets 0.52.5", + "target": "windows_targets" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "armv7-linux-androideabi": [ + { + "id": "android-tzdata 0.1.1", + "target": "android_tzdata" + }, + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "armv7-unknown-linux-gnueabi": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "i686-apple-darwin": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "i686-linux-android": [ + { + "id": "android-tzdata 0.1.1", + "target": "android_tzdata" + }, + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "i686-pc-windows-msvc": [ + { + "id": "windows-targets 0.52.5", + "target": "windows_targets" + } + ], + "i686-unknown-freebsd": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "wasm32-unknown-unknown": [ { "id": "js-sys 0.3.69", "target": "js_sys" @@ -2163,23 +2289,57 @@ "target": "wasm_bindgen" } ], - "cfg(target_os = \"android\")": [ + "x86_64-apple-darwin": [ { - "id": "android-tzdata 0.1.1", - "target": "android_tzdata" + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" } ], - "cfg(unix)": [ + "x86_64-apple-ios": [ { "id": "iana-time-zone 0.1.60", "target": "iana_time_zone" } ], - "cfg(windows)": [ + "x86_64-fuchsia": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "x86_64-linux-android": [ + { + "id": "android-tzdata 0.1.1", + "target": "android_tzdata" + }, + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "x86_64-pc-windows-msvc": [ { "id": "windows-targets 0.52.5", "target": "windows_targets" } + ], + "x86_64-unknown-freebsd": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } + ], + "x86_64-unknown-nixos-gnu": [ + { + "id": "iana-time-zone 0.1.60", + "target": "iana_time_zone" + } ] } }, @@ -9484,61 +9644,199 @@ } ], "selects": { - "cfg(unix)": [ + "aarch64-apple-darwin": [ { "id": "libc 0.2.154", "target": "libc" } - ] - } - }, - "edition": "2018", - "version": "0.8.5" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rand_chacha 0.3.1": { - "name": "rand_chacha", - "version": "0.3.1", - "package_url": "https://github.com/rust-random/rand", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rand_chacha/0.3.1/download", - "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rand_chacha", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rand_chacha", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "std" - ], - "selects": {} - }, - "deps": { - "common": [ + ], + "aarch64-apple-ios": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-fuchsia": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-linux-android": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "armv7-linux-androideabi": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "armv7-unknown-linux-gnueabi": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-apple-darwin": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-linux-android": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-unknown-freebsd": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-apple-darwin": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-apple-ios": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-fuchsia": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-linux-android": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-unknown-nixos-gnu": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ] + } + }, + "edition": "2018", + "version": "0.8.5" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "rand_chacha 0.3.1": { + "name": "rand_chacha", + "version": "0.3.1", + "package_url": "https://github.com/rust-random/rand", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rand_chacha/0.3.1/download", + "sha256": "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" + } + }, + "targets": [ + { + "Library": { + "crate_name": "rand_chacha", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "rand_chacha", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "std" + ], + "selects": {} + }, + "deps": { + "common": [ { "id": "ppv-lite86 0.2.17", "target": "ppv_lite86" @@ -10070,50 +10368,54 @@ } ], "selects": { - "cfg(not(target_arch = \"wasm32\"))": [ + "aarch64-apple-darwin": [ { - "id": "encoding_rs 0.8.34", - "target": "encoding_rs" + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { - "id": "h2 0.3.26", - "target": "h2" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "http-body 0.4.6", - "target": "http_body" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "hyper 0.14.28", - "target": "hyper" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "aarch64-apple-ios": [ { "id": "hyper-rustls 0.24.2", "target": "hyper_rustls" }, { - "id": "ipnet 2.9.0", - "target": "ipnet" - }, - { - "id": "log 0.4.21", - "target": "log" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "mime 0.3.17", - "target": "mime" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "once_cell 1.19.0", - "target": "once_cell" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "percent-encoding 2.3.1", - "target": "percent_encoding" - }, + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "aarch64-apple-ios-sim": [ { - "id": "pin-project-lite 0.2.14", - "target": "pin_project_lite" + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { "id": "rustls 0.21.12", @@ -10123,10 +10425,6 @@ "id": "rustls-pemfile 1.0.4", "target": "rustls_pemfile" }, - { - "id": "tokio 1.37.0", - "target": "tokio" - }, { "id": "tokio-rustls 0.24.1", "target": "tokio_rustls" @@ -10136,232 +10434,1724 @@ "target": "webpki_roots" } ], - "cfg(target_arch = \"wasm32\")": [ + "aarch64-fuchsia": [ { - "id": "js-sys 0.3.69", - "target": "js_sys" + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { - "id": "serde_json 1.0.117", - "target": "serde_json" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "wasm-bindgen 0.2.92", - "target": "wasm_bindgen" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "wasm-bindgen-futures 0.4.42", - "target": "wasm_bindgen_futures" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "web-sys 0.3.69", - "target": "web_sys" + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" } ], - "cfg(target_os = \"macos\")": [ + "aarch64-linux-android": [ { - "id": "system-configuration 0.5.1", - "target": "system_configuration" + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" } ], - "cfg(windows)": [ + "aarch64-pc-windows-msvc": [ { - "id": "winreg 0.50.0", - "target": "winreg" - } - ] - } - }, - "edition": "2021", - "version": "0.11.27" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "reqwest 0.12.4": { - "name": "reqwest", - "version": "0.12.4", - "package_url": "https://github.com/seanmonstar/reqwest", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/reqwest/0.12.4/download", - "sha256": "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" - } - }, - "targets": [ - { - "Library": { - "crate_name": "reqwest", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "reqwest", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "__rustls", - "__tls", - "rustls-pki-types", - "rustls-tls", - "rustls-tls-webpki-roots" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "base64 0.22.1", - "target": "base64" - }, - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "futures-core 0.3.30", - "target": "futures_core" - }, - { - "id": "futures-util 0.3.30", - "target": "futures_util" - }, - { - "id": "http 1.1.0", - "target": "http" - }, - { - "id": "serde 1.0.202", - "target": "serde" - }, - { - "id": "serde_urlencoded 0.7.1", - "target": "serde_urlencoded" - }, - { - "id": "sync_wrapper 0.1.2", - "target": "sync_wrapper" - }, - { - "id": "tower-service 0.3.2", - "target": "tower_service" - }, - { - "id": "url 2.5.0", - "target": "url" - } - ], - "selects": { - "cfg(not(target_arch = \"wasm32\"))": [ + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, { - "id": "http-body 1.0.0", - "target": "http_body" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "http-body-util 0.1.1", - "target": "http_body_util" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "hyper 1.3.1", - "target": "hyper" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "hyper-rustls 0.26.0", + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.24.2", "target": "hyper_rustls" }, { - "id": "hyper-util 0.1.3", - "target": "hyper_util" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "ipnet 2.9.0", - "target": "ipnet" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "log 0.4.21", - "target": "log" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "mime 0.3.17", - "target": "mime" + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { - "id": "once_cell 1.19.0", - "target": "once_cell" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "percent-encoding 2.3.1", - "target": "percent_encoding" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "pin-project-lite 0.2.14", - "target": "pin_project_lite" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "rustls 0.22.4", + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", "target": "rustls" }, { - "id": "rustls-pemfile 2.1.2", + "id": "rustls-pemfile 1.0.4", "target": "rustls_pemfile" }, { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "tokio 1.37.0", - "target": "tokio" + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { - "id": "tokio-rustls 0.25.0", + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", "target": "tokio_rustls" }, { - "id": "webpki-roots 0.26.1", + "id": "webpki-roots 0.25.4", "target": "webpki_roots" } ], - "cfg(target_arch = \"wasm32\")": [ + "armv7-linux-androideabi": [ { - "id": "js-sys 0.3.69", - "target": "js_sys" + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" }, { - "id": "serde_json 1.0.117", - "target": "serde_json" + "id": "rustls 0.21.12", + "target": "rustls" }, { - "id": "wasm-bindgen 0.2.92", - "target": "wasm_bindgen" + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" }, { - "id": "wasm-bindgen-futures 0.4.42", - "target": "wasm_bindgen_futures" + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" }, { - "id": "web-sys 0.3.69", - "target": "web_sys" + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" } ], - "cfg(windows)": [ + "armv7-unknown-linux-gnueabi": [ { - "id": "winreg 0.52.0", + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "cfg(not(target_arch = \"wasm32\"))": [ + { + "id": "encoding_rs 0.8.34", + "target": "encoding_rs" + }, + { + "id": "h2 0.3.26", + "target": "h2" + }, + { + "id": "http-body 0.4.6", + "target": "http_body" + }, + { + "id": "hyper 0.14.28", + "target": "hyper" + }, + { + "id": "ipnet 2.9.0", + "target": "ipnet" + }, + { + "id": "log 0.4.21", + "target": "log" + }, + { + "id": "mime 0.3.17", + "target": "mime" + }, + { + "id": "once_cell 1.19.0", + "target": "once_cell" + }, + { + "id": "percent-encoding 2.3.1", + "target": "percent_encoding" + }, + { + "id": "pin-project-lite 0.2.14", + "target": "pin_project_lite" + }, + { + "id": "tokio 1.37.0", + "target": "tokio" + } + ], + "cfg(target_arch = \"wasm32\")": [ + { + "id": "js-sys 0.3.69", + "target": "js_sys" + }, + { + "id": "serde_json 1.0.117", + "target": "serde_json" + }, + { + "id": "wasm-bindgen 0.2.92", + "target": "wasm_bindgen" + }, + { + "id": "wasm-bindgen-futures 0.4.42", + "target": "wasm_bindgen_futures" + }, + { + "id": "web-sys 0.3.69", + "target": "web_sys" + } + ], + "cfg(target_os = \"macos\")": [ + { + "id": "system-configuration 0.5.1", + "target": "system_configuration" + } + ], + "cfg(windows)": [ + { + "id": "winreg 0.50.0", "target": "winreg" } + ], + "i686-apple-darwin": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "i686-linux-android": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "i686-pc-windows-msvc": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "i686-unknown-freebsd": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "riscv32imc-unknown-none-elf": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "riscv64gc-unknown-none-elf": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "thumbv7em-none-eabi": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "thumbv8m.main-none-eabi": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-apple-darwin": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-apple-ios": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-fuchsia": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-linux-android": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-pc-windows-msvc": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-unknown-nixos-gnu": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ], + "x86_64-unknown-none": [ + { + "id": "hyper-rustls 0.24.2", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.21.12", + "target": "rustls" + }, + { + "id": "rustls-pemfile 1.0.4", + "target": "rustls_pemfile" + }, + { + "id": "tokio-rustls 0.24.1", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.25.4", + "target": "webpki_roots" + } + ] + } + }, + "edition": "2021", + "version": "0.11.27" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "reqwest 0.12.4": { + "name": "reqwest", + "version": "0.12.4", + "package_url": "https://github.com/seanmonstar/reqwest", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/reqwest/0.12.4/download", + "sha256": "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" + } + }, + "targets": [ + { + "Library": { + "crate_name": "reqwest", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "reqwest", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "__rustls", + "__tls", + "rustls-pki-types", + "rustls-tls", + "rustls-tls-webpki-roots" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "base64 0.22.1", + "target": "base64" + }, + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "futures-core 0.3.30", + "target": "futures_core" + }, + { + "id": "futures-util 0.3.30", + "target": "futures_util" + }, + { + "id": "http 1.1.0", + "target": "http" + }, + { + "id": "serde 1.0.202", + "target": "serde" + }, + { + "id": "serde_urlencoded 0.7.1", + "target": "serde_urlencoded" + }, + { + "id": "sync_wrapper 0.1.2", + "target": "sync_wrapper" + }, + { + "id": "tower-service 0.3.2", + "target": "tower_service" + }, + { + "id": "url 2.5.0", + "target": "url" + } + ], + "selects": { + "aarch64-apple-darwin": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-apple-ios": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-fuchsia": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-linux-android": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-pc-windows-msvc": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "armv7-linux-androideabi": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "armv7-unknown-linux-gnueabi": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "cfg(not(target_arch = \"wasm32\"))": [ + { + "id": "http-body 1.0.0", + "target": "http_body" + }, + { + "id": "http-body-util 0.1.1", + "target": "http_body_util" + }, + { + "id": "hyper 1.3.1", + "target": "hyper" + }, + { + "id": "hyper-util 0.1.3", + "target": "hyper_util" + }, + { + "id": "ipnet 2.9.0", + "target": "ipnet" + }, + { + "id": "log 0.4.21", + "target": "log" + }, + { + "id": "mime 0.3.17", + "target": "mime" + }, + { + "id": "once_cell 1.19.0", + "target": "once_cell" + }, + { + "id": "percent-encoding 2.3.1", + "target": "percent_encoding" + }, + { + "id": "pin-project-lite 0.2.14", + "target": "pin_project_lite" + }, + { + "id": "tokio 1.37.0", + "target": "tokio" + } + ], + "cfg(target_arch = \"wasm32\")": [ + { + "id": "js-sys 0.3.69", + "target": "js_sys" + }, + { + "id": "serde_json 1.0.117", + "target": "serde_json" + }, + { + "id": "wasm-bindgen 0.2.92", + "target": "wasm_bindgen" + }, + { + "id": "wasm-bindgen-futures 0.4.42", + "target": "wasm_bindgen_futures" + }, + { + "id": "web-sys 0.3.69", + "target": "web_sys" + } + ], + "cfg(windows)": [ + { + "id": "winreg 0.52.0", + "target": "winreg" + } + ], + "i686-apple-darwin": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "i686-linux-android": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "i686-pc-windows-msvc": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "i686-unknown-freebsd": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "riscv32imc-unknown-none-elf": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "riscv64gc-unknown-none-elf": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "thumbv7em-none-eabi": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "thumbv8m.main-none-eabi": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-apple-darwin": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-apple-ios": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-fuchsia": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-linux-android": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-pc-windows-msvc": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-unknown-nixos-gnu": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } + ], + "x86_64-unknown-none": [ + { + "id": "hyper-rustls 0.26.0", + "target": "hyper_rustls" + }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" + } ] } }, @@ -10817,19 +12607,173 @@ } ], "selects": { + "aarch64-apple-darwin": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-apple-ios": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-fuchsia": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-linux-android": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "armv7-linux-androideabi": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ { - "id": "linux-raw-sys 0.4.13", - "target": "linux_raw_sys" + "id": "linux-raw-sys 0.4.13", + "target": "linux_raw_sys" + } + ], + "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))": [ + { + "id": "linux-raw-sys 0.4.13", + "target": "linux_raw_sys" + } + ], + "cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "cfg(windows)": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ], + "i686-apple-darwin": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-linux-android": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "i686-unknown-freebsd": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" } ], - "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))": [ + "s390x-unknown-linux-gnu": [ { - "id": "linux-raw-sys 0.4.13", - "target": "linux_raw_sys" + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" } ], - "cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ + "wasm32-wasi": [ { "id": "errno 0.3.9", "target": "errno", @@ -10840,15 +12784,59 @@ "target": "libc" } ], - "cfg(windows)": [ + "x86_64-apple-darwin": [ { "id": "errno 0.3.9", "target": "errno", "alias": "libc_errno" }, { - "id": "windows-sys 0.52.0", - "target": "windows_sys" + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-apple-ios": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-fuchsia": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-linux-android": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" + }, + { + "id": "libc 0.2.154", + "target": "libc" } ] } @@ -13308,11 +15296,151 @@ } ], "selects": { + "aarch64-apple-darwin": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-apple-ios": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-fuchsia": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-linux-android": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-unknown-linux-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-unknown-nixos-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "aarch64-unknown-nto-qnx710": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "arm-unknown-linux-gnueabi": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "armv7-linux-androideabi": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "armv7-unknown-linux-gnueabi": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], "cfg(unix)": [ { "id": "libc 0.2.154", "target": "libc" - }, + } + ], + "i686-apple-darwin": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "i686-linux-android": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "i686-unknown-freebsd": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "i686-unknown-linux-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "powerpc-unknown-linux-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "s390x-unknown-linux-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-apple-darwin": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-apple-ios": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-fuchsia": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-linux-android": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-unknown-freebsd": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-unknown-linux-gnu": [ + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ], + "x86_64-unknown-nixos-gnu": [ { "id": "xattr 1.3.1", "target": "xattr" @@ -13878,7 +16006,56 @@ "sync", "time" ], - "aarch64-apple-ios": [ + "aarch64-apple-ios": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "aarch64-apple-ios-sim": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "aarch64-fuchsia": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "aarch64-linux-android": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "aarch64-pc-windows-msvc": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" + ], + "aarch64-unknown-linux-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "aarch64-unknown-nixos-gnu": [ "bytes", "default", "io-std", @@ -13886,7 +16063,7 @@ "sync", "time" ], - "aarch64-apple-ios-sim": [ + "aarch64-unknown-nto-qnx710": [ "bytes", "default", "io-std", @@ -13894,285 +16071,642 @@ "sync", "time" ], - "aarch64-fuchsia": [ + "arm-unknown-linux-gnueabi": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "armv7-linux-androideabi": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "armv7-unknown-linux-gnueabi": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "i686-apple-darwin": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "i686-linux-android": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "i686-pc-windows-msvc": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" + ], + "i686-unknown-freebsd": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "i686-unknown-linux-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "powerpc-unknown-linux-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "riscv32imc-unknown-none-elf": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "riscv64gc-unknown-none-elf": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "s390x-unknown-linux-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "thumbv7em-none-eabi": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "thumbv8m.main-none-eabi": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-apple-darwin": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-apple-ios": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-fuchsia": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-linux-android": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-pc-windows-msvc": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" + ], + "x86_64-unknown-freebsd": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-unknown-linux-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-unknown-nixos-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-unknown-none": [ "bytes", "default", "io-std", "io-util", "sync", "time" + ] + } + }, + "deps": { + "common": [ + { + "id": "mio 0.8.11", + "target": "mio" + }, + { + "id": "num_cpus 1.16.0", + "target": "num_cpus" + }, + { + "id": "pin-project-lite 0.2.14", + "target": "pin_project_lite" + } + ], + "selects": { + "aarch64-apple-darwin": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } + ], + "aarch64-apple-ios": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } + ], + "aarch64-apple-ios-sim": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } + ], + "aarch64-fuchsia": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "aarch64-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "aarch64-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.48.0", + "target": "windows_sys" + } ], "aarch64-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "aarch64-unknown-nixos-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "aarch64-unknown-nto-qnx710": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "arm-unknown-linux-gnueabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "armv7-linux-androideabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "armv7-unknown-linux-gnueabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } + ], + "cfg(tokio_taskdump)": [ + { + "id": "backtrace 0.3.71", + "target": "backtrace" + } ], "i686-apple-darwin": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "i686-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "i686-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.48.0", + "target": "windows_sys" + } ], "i686-unknown-freebsd": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "i686-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "powerpc-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "riscv32imc-unknown-none-elf": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "riscv64gc-unknown-none-elf": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } + ], + "riscv64gc-unknown-none-elf": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "s390x-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "thumbv7em-none-eabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "thumbv8m.main-none-eabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "x86_64-apple-darwin": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "x86_64-apple-ios": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "x86_64-fuchsia": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "x86_64-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + } ], "x86_64-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" + }, + { + "id": "windows-sys 0.48.0", + "target": "windows_sys" + } ], "x86_64-unknown-freebsd": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-unknown-nixos-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-unknown-none": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ] - } - }, - "deps": { - "common": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "mio 0.8.11", - "target": "mio" - }, - { - "id": "num_cpus 1.16.0", - "target": "num_cpus" - }, - { - "id": "pin-project-lite 0.2.14", - "target": "pin_project_lite" - } - ], - "selects": { - "cfg(not(target_family = \"wasm\"))": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, { "id": "socket2 0.5.7", "target": "socket2" } ], - "cfg(tokio_taskdump)": [ + "x86_64-unknown-linux-gnu": [ { - "id": "backtrace 0.3.71", - "target": "backtrace" + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" } ], - "cfg(unix)": [ + "x86_64-unknown-nixos-gnu": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, { "id": "libc 0.2.154", "target": "libc" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" } ], - "cfg(windows)": [ + "x86_64-unknown-none": [ { - "id": "windows-sys 0.48.0", - "target": "windows_sys" + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "socket2 0.5.7", + "target": "socket2" } ] } @@ -18818,7 +21352,8 @@ "aarch64-pc-windows-msvc" ], "aarch64-unknown-linux-gnu": [ - "aarch64-unknown-linux-gnu" + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu" ], "aarch64-unknown-nixos-gnu": [ "aarch64-unknown-nixos-gnu" @@ -18905,9 +21440,6 @@ "aarch64-apple-ios-sim" ], "cfg(all(target_arch = \"loongarch64\", target_os = \"linux\"))": [], - "cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))": [ - "wasm32-unknown-unknown" - ], "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [ "i686-unknown-linux-gnu" ], @@ -19175,40 +21707,6 @@ "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" ], - "cfg(not(target_family = \"wasm\"))": [ - "aarch64-apple-darwin", - "aarch64-apple-ios", - "aarch64-apple-ios-sim", - "aarch64-fuchsia", - "aarch64-linux-android", - "aarch64-pc-windows-msvc", - "aarch64-unknown-linux-gnu", - "aarch64-unknown-nixos-gnu", - "aarch64-unknown-nto-qnx710", - "arm-unknown-linux-gnueabi", - "armv7-linux-androideabi", - "armv7-unknown-linux-gnueabi", - "i686-apple-darwin", - "i686-linux-android", - "i686-pc-windows-msvc", - "i686-unknown-freebsd", - "i686-unknown-linux-gnu", - "powerpc-unknown-linux-gnu", - "riscv32imc-unknown-none-elf", - "riscv64gc-unknown-none-elf", - "s390x-unknown-linux-gnu", - "thumbv7em-none-eabi", - "thumbv8m.main-none-eabi", - "x86_64-apple-darwin", - "x86_64-apple-ios", - "x86_64-fuchsia", - "x86_64-linux-android", - "x86_64-pc-windows-msvc", - "x86_64-unknown-freebsd", - "x86_64-unknown-linux-gnu", - "x86_64-unknown-nixos-gnu", - "x86_64-unknown-none" - ], "cfg(not(windows))": [ "aarch64-apple-darwin", "aarch64-apple-ios", @@ -19374,7 +21872,8 @@ "x86_64-unknown-freebsd" ], "x86_64-unknown-linux-gnu": [ - "x86_64-unknown-linux-gnu" + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu" ], "x86_64-unknown-nixos-gnu": [ "x86_64-unknown-nixos-gnu" From b8bc73ee4c96b4b75302cc84639003fb36e6c97c Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 12:45:48 +0200 Subject: [PATCH 039/176] [rust] Include --debug flag in test (for debugging) --- rust/tests/stable_browser_tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/rust/tests/stable_browser_tests.rs b/rust/tests/stable_browser_tests.rs index 37a8e21c8f0ee..0f190f285f1e6 100644 --- a/rust/tests/stable_browser_tests.rs +++ b/rust/tests/stable_browser_tests.rs @@ -34,6 +34,7 @@ fn stable_browser_test(#[case] browser_name: String) { "stable", "--output", "json", + "--debug", ]) .assert() .success() From 2fae93bc3faa01d08d5b0c96aeeaca10e1d8f2be Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 15:25:13 +0200 Subject: [PATCH 040/176] [rust] Remove duplicated test logic for beta browsers --- rust/tests/browser_download_tests.rs | 7 ++----- rust/tests/browser_tests.rs | 23 ----------------------- 2 files changed, 2 insertions(+), 28 deletions(-) diff --git a/rust/tests/browser_download_tests.rs b/rust/tests/browser_download_tests.rs index 6698422e563c8..39d9dc6acdb60 100644 --- a/rust/tests/browser_download_tests.rs +++ b/rust/tests/browser_download_tests.rs @@ -53,11 +53,8 @@ fn browser_latest_download_test(#[case] browser: String) { #[case("firefox", "beta")] #[case("firefox", "esr")] #[case("edge", "beta")] -fn browser_version_download_test(#[case] browser: String, #[case] mut browser_version: String) { +fn browser_version_download_test(#[case] browser: String, #[case] browser_version: String) { let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); - if !OS.eq("windows") { - browser_version = "stable".to_string(); - } cmd.args([ "--browser", &browser, @@ -72,7 +69,7 @@ fn browser_version_download_test(#[case] browser: String, #[case] mut browser_ve .code(0); assert_driver(&mut cmd); - if !OS.eq("windows") { + if !OS.eq("windows") && !browser.eq("edge") { assert_browser(&mut cmd); } } diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index f30e1ed63ebe0..b768a30bf735b 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -118,29 +118,6 @@ fn invalid_geckodriver_version_test() { ); } -#[rstest] -#[case("chrome", "chromedriver")] -#[case("edge", "msedgedriver")] -#[case("firefox", "geckodriver")] -fn browser_beta_test(#[case] browser: String, #[case] driver_name: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); - let assert = cmd - .args([ - "--browser", - &browser, - "--browser-version", - "beta", - "--avoid-browser-download", - "--debug", - ]) - .assert(); - - let stdout = &assert.get_output().stdout; - let output = std::str::from_utf8(stdout).unwrap(); - println!("output {}", output); - assert!(output.contains(&driver_name) || output.contains("ERROR")); -} - #[rstest] #[case( "windows", From 936ced06fa5f545653ccdb72884684d2f0d32034 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 16:00:01 +0200 Subject: [PATCH 041/176] [rust] Include --debug flag in config test --- rust/tests/config_tests.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index 71c1b62af446e..71fb02241d14d 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -41,6 +41,7 @@ fn config_test(#[case] browser_name: String) { let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); cmd.args([ + "--debug", "--output", "json", "--cache-path", From 7af4f1995d3dcb64b730e133574c0a5b4ca7ab28 Mon Sep 17 00:00:00 2001 From: bgermann Date: Tue, 11 Jun 2024 16:02:58 +0200 Subject: [PATCH 042/176] [rust] Enable Firefox nightly for linux on arm64 (#14099) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Boni García --- rust/src/firefox.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rust/src/firefox.rs b/rust/src/firefox.rs index a976b4aa56948..3a5aacb9d4a7f 100644 --- a/rust/src/firefox.rs +++ b/rust/src/firefox.rs @@ -569,7 +569,11 @@ impl SeleniumManager for FirefoxManager { if X32.is(arch) { platform_label = "linux-i686"; } else if self.is_nightly(browser_version) { - platform_label = "linux64"; + if ARM64.is(arch) { + platform_label = "linux64-aarch64"; + } else { + platform_label = "linux64"; + } } else { platform_label = "linux-x86_64"; } From c2e60880c915f5df11372dca1afbe41ad2d0ddaa Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 16:10:23 +0200 Subject: [PATCH 043/176] [rust] Refactor logic to get SM CLI binary in tests --- rust/tests/browser_download_tests.rs | 8 ++++---- rust/tests/browser_tests.rs | 12 ++++++------ rust/tests/cache_tests.rs | 6 +++--- rust/tests/common.rs | 5 +++++ rust/tests/config_tests.rs | 8 ++++---- rust/tests/exec_driver_tests.rs | 6 +++--- rust/tests/grid_tests.rs | 10 +++++----- rust/tests/iexplorer_tests.rs | 9 ++++++--- rust/tests/mirror_tests.rs | 5 ++--- rust/tests/offline_tests.rs | 7 +++++-- rust/tests/output_tests.rs | 11 +++++++---- rust/tests/proxy_tests.rs | 10 +++++----- rust/tests/safari_tests.rs | 7 +++++-- rust/tests/stable_browser_tests.rs | 6 +++--- rust/tests/timeout_tests.rs | 6 ++++-- rust/tests/webview_tests.rs | 5 ++--- 16 files changed, 69 insertions(+), 52 deletions(-) diff --git a/rust/tests/browser_download_tests.rs b/rust/tests/browser_download_tests.rs index 39d9dc6acdb60..2de79d0a50382 100644 --- a/rust/tests/browser_download_tests.rs +++ b/rust/tests/browser_download_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_browser, assert_driver}; -use assert_cmd::Command; +use crate::common::{assert_browser, assert_driver, get_selenium_manager}; + use rstest::rstest; use std::env::consts::OS; @@ -28,7 +28,7 @@ mod common; #[case("edge")] fn browser_latest_download_test(#[case] browser: String) { if !browser.eq("edge") || !OS.eq("windows") { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", &browser, @@ -54,7 +54,7 @@ fn browser_latest_download_test(#[case] browser: String) { #[case("firefox", "esr")] #[case("edge", "beta")] fn browser_version_download_test(#[case] browser: String, #[case] browser_version: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", &browser, diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index b768a30bf735b..b4515559a23ed 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::assert_output; -use assert_cmd::Command; +use crate::common::{assert_output, get_selenium_manager}; + use exitcode::DATAERR; use rstest::rstest; use std::env::consts::OS; @@ -39,7 +39,7 @@ fn browser_version_test( #[case] browser_version: String, #[case] driver_version: String, ) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", &browser, @@ -79,7 +79,7 @@ fn wrong_parameters_test( #[case] driver_version: String, #[case] error_code: i32, ) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd .args([ "--debug", @@ -98,7 +98,7 @@ fn wrong_parameters_test( #[test] fn invalid_geckodriver_version_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd .args([ "--browser", @@ -142,7 +142,7 @@ fn invalid_geckodriver_version_test() { )] fn browser_path_test(#[case] os: String, #[case] browser: String, #[case] browser_path: String) { if OS.eq(&os) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", &browser, "--browser-path", &browser_path]) .assert() .success() diff --git a/rust/tests/cache_tests.rs b/rust/tests/cache_tests.rs index 11b46d33b3f84..68478fb73826f 100644 --- a/rust/tests/cache_tests.rs +++ b/rust/tests/cache_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::get_driver_path; -use assert_cmd::Command; +use crate::common::{get_driver_path, get_selenium_manager}; + use rstest::rstest; use std::fs; use std::path::Path; @@ -28,7 +28,7 @@ mod common; #[case("../áèîö")] #[case("../テスト")] fn cache_path_test(#[case] tmp_cache_folder_name: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", "chrome", diff --git a/rust/tests/common.rs b/rust/tests/common.rs index 5e94aad6cd75a..7c3c5fba26fb1 100644 --- a/rust/tests/common.rs +++ b/rust/tests/common.rs @@ -26,6 +26,11 @@ use std::borrow::BorrowMut; use std::env::consts::OS; use std::path::Path; +#[allow(dead_code)] +pub fn get_selenium_manager() -> Command { + Command::new(env!("CARGO_BIN_EXE_selenium-manager")) +} + #[allow(dead_code)] pub fn assert_driver(cmd: &mut Command) { let stdout = &cmd.unwrap().stdout; diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index 71fb02241d14d..a3ecd3e4d9fbf 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -15,10 +15,10 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_browser, assert_driver}; -use assert_cmd::Command; +use crate::common::{assert_browser, assert_driver, get_selenium_manager}; + use rstest::rstest; -use std::env; + use std::fs::File; use std::io::{BufWriter, Write}; use tempfile::Builder; @@ -39,7 +39,7 @@ fn config_test(#[case] browser_name: String) { .unwrap(); writer.flush().unwrap(); - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--debug", "--output", diff --git a/rust/tests/exec_driver_tests.rs b/rust/tests/exec_driver_tests.rs index 327bdcb2cb419..da6db43ecb304 100644 --- a/rust/tests/exec_driver_tests.rs +++ b/rust/tests/exec_driver_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_browser, assert_driver, exec_driver}; -use assert_cmd::Command; +use crate::common::{assert_browser, assert_driver, exec_driver, get_selenium_manager}; + use rstest::rstest; use std::env::consts::OS; @@ -28,7 +28,7 @@ mod common; #[case("firefox", "geckodriver")] #[case("iexplorer", "IEDriverServer")] fn exec_driver_test(#[case] browser_name: String, #[case] driver_name: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", &browser_name, "--output", "json"]) .assert() .success() diff --git a/rust/tests/grid_tests.rs b/rust/tests/grid_tests.rs index 99bbc590d53e3..33a908732b38f 100644 --- a/rust/tests/grid_tests.rs +++ b/rust/tests/grid_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::assert_output; -use assert_cmd::Command; +use crate::common::{assert_output, get_selenium_manager}; + use exitcode::DATAERR; use rstest::rstest; use selenium_manager::logger::JsonOutput; @@ -27,7 +27,7 @@ mod common; #[test] fn grid_latest_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--grid", "--output", "json"]) .assert() .success() @@ -55,7 +55,7 @@ fn grid_latest_test() { #[case("4.9.0")] #[case("4.10.0")] fn grid_version_test(#[case] grid_version: &str) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--grid", grid_version, "--output", "json"]) .assert() .success() @@ -75,7 +75,7 @@ fn grid_version_test(#[case] grid_version: &str) { #[case("bad-version")] #[case("99.99.99")] fn grid_error_test(#[case] grid_version: &str) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd.args(["--grid", grid_version]).assert().try_success(); assert_output(&mut cmd, result, vec!["There was an error"], DATAERR); diff --git a/rust/tests/iexplorer_tests.rs b/rust/tests/iexplorer_tests.rs index b424845834d4d..3cb8c1277453c 100644 --- a/rust/tests/iexplorer_tests.rs +++ b/rust/tests/iexplorer_tests.rs @@ -15,14 +15,17 @@ // specific language governing permissions and limitations // under the License. -use assert_cmd::Command; +use crate::common::get_selenium_manager; + use rstest::rstest; +mod common; + #[rstest] #[case("4.8.0")] #[case("4.8.1")] fn iexplorer_test(#[case] driver_version: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let cmd_assert = cmd .args([ "--browser", @@ -42,7 +45,7 @@ fn iexplorer_test(#[case] driver_version: String) { #[case("internet-explorer")] #[case("internet_explorer")] fn ie_name_test(#[case] browser_name: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let cmd_assert = cmd.args(["--browser", &browser_name]).assert(); cmd_assert.success(); } diff --git a/rust/tests/mirror_tests.rs b/rust/tests/mirror_tests.rs index f8712f32ff8b0..127fb37f17b86 100644 --- a/rust/tests/mirror_tests.rs +++ b/rust/tests/mirror_tests.rs @@ -15,14 +15,13 @@ // specific language governing permissions and limitations // under the License. -use crate::common::assert_driver; -use assert_cmd::Command; +use crate::common::{assert_driver, get_selenium_manager}; mod common; #[test] fn mirror_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", "chrome", diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index df74f6d4c2148..91a1fe401d401 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -15,12 +15,15 @@ // specific language governing permissions and limitations // under the License. -use assert_cmd::Command; +use crate::common::get_selenium_manager; + use std::str; +mod common; + #[test] fn offline_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--debug", "--browser", "chrome", "--offline"]) .assert() .success() diff --git a/rust/tests/output_tests.rs b/rust/tests/output_tests.rs index d01e74d1e71fe..0f7fa516f78d9 100644 --- a/rust/tests/output_tests.rs +++ b/rust/tests/output_tests.rs @@ -15,14 +15,17 @@ // specific language governing permissions and limitations // under the License. -use assert_cmd::Command; +use crate::common::get_selenium_manager; + use selenium_manager::logger::{JsonOutput, MinimalJson, DRIVER_PATH}; use std::path::Path; use std::str; +mod common; + #[test] fn json_output_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", "chrome", "--output", "json"]) .assert() .success() @@ -44,7 +47,7 @@ fn json_output_test() { #[test] fn shell_output_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", "chrome", "--output", "shell"]) .assert() .success() @@ -58,7 +61,7 @@ fn shell_output_test() { #[test] fn mixed_output_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", "chrome", "--output", "mixed"]) .assert() .success() diff --git a/rust/tests/proxy_tests.rs b/rust/tests/proxy_tests.rs index 3f9c15f3804c7..f66cc0a2b1037 100644 --- a/rust/tests/proxy_tests.rs +++ b/rust/tests/proxy_tests.rs @@ -15,15 +15,15 @@ // specific language governing permissions and limitations // under the License. -use crate::common::assert_output; -use assert_cmd::Command; +use crate::common::{assert_output, get_selenium_manager}; + use exitcode::DATAERR; mod common; #[tokio::test] async fn wrong_proxy_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd .args([ "--debug", @@ -39,7 +39,7 @@ async fn wrong_proxy_test() { } #[test] fn wrong_protocol_proxy_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd .args(["--browser", "chrome", "--proxy", "wrong:://proxy"]) .assert() @@ -50,7 +50,7 @@ fn wrong_protocol_proxy_test() { #[test] fn wrong_port_proxy_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let result = cmd .args([ "--browser", diff --git a/rust/tests/safari_tests.rs b/rust/tests/safari_tests.rs index a5aca85f9e3f8..f6c2764cca549 100644 --- a/rust/tests/safari_tests.rs +++ b/rust/tests/safari_tests.rs @@ -15,12 +15,15 @@ // specific language governing permissions and limitations // under the License. -use assert_cmd::Command; +use crate::common::get_selenium_manager; + use std::env::consts::OS; +mod common; + #[test] fn safari_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); let safari_assert = cmd.args(["--browser", "safari"]).assert(); if OS.eq("macos") { diff --git a/rust/tests/stable_browser_tests.rs b/rust/tests/stable_browser_tests.rs index 0f190f285f1e6..c51ab8720889e 100644 --- a/rust/tests/stable_browser_tests.rs +++ b/rust/tests/stable_browser_tests.rs @@ -15,8 +15,8 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_browser, assert_driver}; -use assert_cmd::Command; +use crate::common::{assert_browser, assert_driver, get_selenium_manager}; + use rstest::rstest; mod common; @@ -26,7 +26,7 @@ mod common; #[case("firefox")] #[case("edge")] fn stable_browser_test(#[case] browser_name: String) { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", &browser_name, diff --git a/rust/tests/timeout_tests.rs b/rust/tests/timeout_tests.rs index e2d5e5f488665..a86f5d90e3b57 100644 --- a/rust/tests/timeout_tests.rs +++ b/rust/tests/timeout_tests.rs @@ -15,11 +15,13 @@ // specific language governing permissions and limitations // under the License. -use assert_cmd::Command; +use crate::common::get_selenium_manager; + +mod common; #[test] fn timeout_error_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--debug", "--browser", "edge", "--timeout", "-1"]) .assert() .failure(); diff --git a/rust/tests/webview_tests.rs b/rust/tests/webview_tests.rs index dd54f960b12fc..1356f6973652e 100644 --- a/rust/tests/webview_tests.rs +++ b/rust/tests/webview_tests.rs @@ -15,14 +15,13 @@ // specific language governing permissions and limitations // under the License. -use crate::common::assert_driver; -use assert_cmd::Command; +use crate::common::{assert_driver, get_selenium_manager}; mod common; #[test] fn webview2_test() { - let mut cmd = Command::new(env!("CARGO_BIN_EXE_selenium-manager")); + let mut cmd = get_selenium_manager(); cmd.args(["--browser", "webview2", "--output", "json"]) .assert() .success() From 1150098dc0dca9fc00adb0ba67d7786573a1f751 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 17:09:52 +0200 Subject: [PATCH 044/176] [rust] Enable --trace in test to debug flaky test in CI --- rust/tests/config_tests.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index a3ecd3e4d9fbf..d1198606c88d7 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -41,16 +41,11 @@ fn config_test(#[case] browser_name: String) { let mut cmd = get_selenium_manager(); cmd.args([ - "--debug", - "--output", - "json", + "--trace", "--cache-path", tmp_dir.path().to_str().unwrap(), ]) .assert() .success() .code(0); - - assert_driver(&mut cmd); - assert_browser(&mut cmd); } From 5355685df0ddaf8466c1f60a5e6f1b3ecb87658f Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 17:22:07 +0200 Subject: [PATCH 045/176] [rust] Format config test --- rust/tests/config_tests.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index d1198606c88d7..03d4d90af44fb 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -40,12 +40,8 @@ fn config_test(#[case] browser_name: String) { writer.flush().unwrap(); let mut cmd = get_selenium_manager(); - cmd.args([ - "--trace", - "--cache-path", - tmp_dir.path().to_str().unwrap(), - ]) - .assert() - .success() - .code(0); + cmd.args(["--trace", "--cache-path", tmp_dir.path().to_str().unwrap()]) + .assert() + .success() + .code(0); } From 15c47415a3c727d7966e04554b5505893b51e905 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 17:31:26 +0200 Subject: [PATCH 046/176] [rust] Clean crate import in test --- rust/tests/config_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index 03d4d90af44fb..c8ecc27805573 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_browser, assert_driver, get_selenium_manager}; +use crate::common::get_selenium_manager; use rstest::rstest; From 96531e7628e98758ffef709ff8ca0ae020b03df2 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 18:32:39 +0200 Subject: [PATCH 047/176] [rust] Refactor logic to read stdout and stderr in tests --- rust/tests/browser_tests.rs | 21 +++++++++------------ rust/tests/common.rs | 17 ++++++++++++----- rust/tests/config_tests.rs | 6 +++++- rust/tests/grid_tests.rs | 15 +++++---------- rust/tests/offline_tests.rs | 11 ++++------- rust/tests/output_tests.rs | 28 +++++++++------------------- 6 files changed, 44 insertions(+), 54 deletions(-) diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index b4515559a23ed..8090c4281a490 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_output, get_selenium_manager}; +use crate::common::{assert_output, get_selenium_manager, get_stdout}; use exitcode::DATAERR; use rstest::rstest; @@ -54,15 +54,13 @@ fn browser_version_test( .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = std::str::from_utf8(stdout).unwrap(); - println!("{}", output); + let stdout = get_stdout(&mut cmd); - assert!(output.contains(&driver_name)); - if !browser_version.is_empty() && output.contains("cache") { - assert!(output.contains(&driver_version)); + assert!(stdout.contains(&driver_name)); + if !browser_version.is_empty() && stdout.contains("cache") { + assert!(stdout.contains(&driver_version)); } - assert!(!output.contains("Error sending stats")); + assert!(!stdout.contains("Error sending stats")); } #[rstest] @@ -148,9 +146,8 @@ fn browser_path_test(#[case] os: String, #[case] browser: String, #[case] browse .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = std::str::from_utf8(stdout).unwrap(); - println!("{}", output); - assert!(!output.contains("WARN")); + let stdout = get_stdout(&mut cmd); + + assert!(!stdout.contains("WARN")); } } diff --git a/rust/tests/common.rs b/rust/tests/common.rs index 7c3c5fba26fb1..eb65568d0b7b2 100644 --- a/rust/tests/common.rs +++ b/rust/tests/common.rs @@ -33,11 +33,9 @@ pub fn get_selenium_manager() -> Command { #[allow(dead_code)] pub fn assert_driver(cmd: &mut Command) { - let stdout = &cmd.unwrap().stdout; - let output = std::str::from_utf8(stdout).unwrap(); - println!("{}", output); + let stdout = get_stdout(cmd); - let json: JsonOutput = serde_json::from_str(output).unwrap(); + let json: JsonOutput = serde_json::from_str(&stdout).unwrap(); let driver_path = Path::new(&json.result.driver_path); assert!(driver_path.exists()); assert!(is_executable(driver_path)); @@ -72,10 +70,19 @@ pub fn exec_driver(cmd: &mut Command) -> String { } #[allow(dead_code)] -pub fn display_output(cmd: &mut Command) { +pub fn get_stdout(cmd: &mut Command) -> String { let stdout = &cmd.unwrap().stdout; let output = std::str::from_utf8(stdout).unwrap(); println!("{}", output); + output.to_string() +} + +#[allow(dead_code)] +pub fn get_stderr(cmd: &mut Command) -> String { + let stderr = &cmd.unwrap().stderr; + let err_output = std::str::from_utf8(stderr).unwrap(); + println!("stderr: {}", err_output); + err_output.to_string() } #[allow(dead_code)] diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index c8ecc27805573..e3854be5cc0d3 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::get_selenium_manager; +use crate::common::{get_selenium_manager, get_stdout}; use rstest::rstest; @@ -44,4 +44,8 @@ fn config_test(#[case] browser_name: String) { .assert() .success() .code(0); + + let stdout = get_stdout(&mut cmd); + + assert!(!stdout.contains("WARN") && !stdout.contains("ERROR")); } diff --git a/rust/tests/grid_tests.rs b/rust/tests/grid_tests.rs index 33a908732b38f..2d3f4d20901cb 100644 --- a/rust/tests/grid_tests.rs +++ b/rust/tests/grid_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_output, get_selenium_manager}; +use crate::common::{assert_output, get_selenium_manager, get_stdout}; use exitcode::DATAERR; use rstest::rstest; @@ -33,11 +33,8 @@ fn grid_latest_test() { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("{}", output); - - let json: JsonOutput = serde_json::from_str(output).unwrap(); + let stdout = get_stdout(&mut cmd); + let json: JsonOutput = serde_json::from_str(&stdout).unwrap(); assert!(!json.logs.is_empty()); let output_code = json.result.code; @@ -61,11 +58,9 @@ fn grid_version_test(#[case] grid_version: &str) { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("{}", output); + let stdout = get_stdout(&mut cmd); - let json: JsonOutput = serde_json::from_str(output).unwrap(); + let json: JsonOutput = serde_json::from_str(&stdout).unwrap(); let jar = Path::new(&json.result.driver_path); let jar_name = jar.file_name().unwrap().to_str().unwrap(); assert!(jar_name.contains(grid_version)); diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index 91a1fe401d401..2d1020a4532f3 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -15,9 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::get_selenium_manager; - -use std::str; +use crate::common::{get_selenium_manager, get_stdout}; mod common; @@ -29,8 +27,7 @@ fn offline_test() { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("{output}"); - assert!(output.contains("offline mode")); + let stdout = get_stdout(&mut cmd); + + assert!(stdout.contains("offline mode")); } diff --git a/rust/tests/output_tests.rs b/rust/tests/output_tests.rs index 0f7fa516f78d9..96eb7104c5d21 100644 --- a/rust/tests/output_tests.rs +++ b/rust/tests/output_tests.rs @@ -15,11 +15,10 @@ // specific language governing permissions and limitations // under the License. -use crate::common::get_selenium_manager; +use crate::common::{get_selenium_manager, get_stderr, get_stdout}; use selenium_manager::logger::{JsonOutput, MinimalJson, DRIVER_PATH}; use std::path::Path; -use std::str; mod common; @@ -31,11 +30,9 @@ fn json_output_test() { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("{}", output); + let stdout = get_stdout(&mut cmd); - let json: JsonOutput = serde_json::from_str(output).unwrap(); + let json: JsonOutput = serde_json::from_str(&stdout).unwrap(); assert!(!json.logs.is_empty()); let output_code = json.result.code; @@ -53,10 +50,8 @@ fn shell_output_test() { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("{}", output); - assert!(output.contains(DRIVER_PATH)); + let stdout = get_stdout(&mut cmd); + assert!(stdout.contains(DRIVER_PATH)); } #[test] @@ -67,16 +62,11 @@ fn mixed_output_test() { .success() .code(0); - let stdout = &cmd.unwrap().stdout; - let output = str::from_utf8(stdout).unwrap(); - println!("stdout: {}", output); - - let json: MinimalJson = serde_json::from_str(output).unwrap(); + let stdout = get_stdout(&mut cmd); + let json: MinimalJson = serde_json::from_str(&stdout).unwrap(); let driver = Path::new(&json.driver_path); assert!(driver.exists()); - let stderr = &cmd.unwrap().stderr; - let err_output = str::from_utf8(stderr).unwrap(); - println!("stderr: {}", err_output); - assert!(!err_output.is_empty()); + let stderr = get_stderr(&mut cmd); + assert!(!stderr.is_empty()); } From eed125dfa5a8adcda99421e26832491efa6e3937 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 18:38:32 +0200 Subject: [PATCH 048/176] [rust] Display logs when running tests in CI --- .github/workflows/ci-rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index b23f74c55da3b..5e4c93bfb7b5b 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -40,7 +40,7 @@ jobs: name: Tests (${{ matrix.os }}) cache-key: rust-test os: ${{ matrix.os }} - run: bazel test --test_env=RUST_BACKTRACE=1 --flaky_test_attempts=3 //rust/... + run: bazel test --test_env=RUST_BACKTRACE=1 --test_env=RUST_TEST_NOCAPTURE=1 --flaky_test_attempts=3 //rust/... windows-stable: name: "Windows Stable" From 71321af35d0f5e95282fb3f326bb9fdf9fe4c22d Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 18:55:44 +0200 Subject: [PATCH 049/176] [rust] Enable verbose backtrace when running tests in CI --- .github/workflows/ci-rust.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index 5e4c93bfb7b5b..6b165b69cc05f 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -40,7 +40,7 @@ jobs: name: Tests (${{ matrix.os }}) cache-key: rust-test os: ${{ matrix.os }} - run: bazel test --test_env=RUST_BACKTRACE=1 --test_env=RUST_TEST_NOCAPTURE=1 --flaky_test_attempts=3 //rust/... + run: bazel test --test_env=RUST_BACKTRACE=full --test_env=RUST_TEST_NOCAPTURE=1 --flaky_test_attempts=3 //rust/... windows-stable: name: "Windows Stable" From e3e9de2b9a0327341080bdbb203edc76c48bbc1d Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Tue, 11 Jun 2024 19:14:34 +0200 Subject: [PATCH 050/176] [rust] Revert --trace in config test --- rust/tests/config_tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index e3854be5cc0d3..8023323a78811 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -40,7 +40,7 @@ fn config_test(#[case] browser_name: String) { writer.flush().unwrap(); let mut cmd = get_selenium_manager(); - cmd.args(["--trace", "--cache-path", tmp_dir.path().to_str().unwrap()]) + cmd.args(["--debug", "--cache-path", tmp_dir.path().to_str().unwrap()]) .assert() .success() .code(0); From 65e5ce78ae2bbb9ea325fea0e813cb6bce1301f9 Mon Sep 17 00:00:00 2001 From: Alex Rodionov Date: Tue, 11 Jun 2024 11:19:04 -0700 Subject: [PATCH 051/176] [ci] Run related builds when updating deps --- renovate.json | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/renovate.json b/renovate.json index 5db72dd6a94fc..2c2f111c27b98 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,35 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended" - ] + "extends": ["config:recommended"], + "packageRules": [ + { + "matchPackageNames": ["bazel", "bazelisk"], + "commitMessageSuffix": "[dotnet][java][js][py][rb][rust]" + }, + { + "matchPackageNames": ["nuget"], + "commitMessagePrefix": "[dotnet]" + }, + { + "matchPackageNames": ["maven"], + "commitMessagePrefix": "[java]" + }, + { + "matchPackageNames": ["npm"], + "commitMessagePrefix": "[js]" + }, + { + "matchPackageNames": ["pip_requreiements"], + "commitMessagePrefix": "[py]" + }, + { + "matchPackageNames": ["bundler", "ruby-version"], + "commitMessagePrefix": "[rb]" + }, + { + "matchPackageNames": ["cargo"], + "commitMessagePrefix": "[rust]" + } + ], + "prConcurrentLimit": 5 } From d791fe4afa4aa20c868abd3abf96d1f60ac6eaab Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sat, 8 Jun 2024 11:18:17 -0500 Subject: [PATCH 052/176] [build] move remote_download_minimal setting to remote-ci config as of bazel 7 remote_download toplevel is the default and minimal makes sense for CI specifically --- .bazelrc | 1 - .bazelrc.remote | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.bazelrc b/.bazelrc index c142e913463df..923ebaf7b50a0 100644 --- a/.bazelrc +++ b/.bazelrc @@ -101,7 +101,6 @@ test:ruby_debug --test_output=streamed --test_env=RUBY_DEBUG_FORK_MODE=parent -- build:release --config=remote build:release --stamp -build:release --remote_download_outputs=toplevel # RBE import %workspace%/.bazelrc.remote diff --git a/.bazelrc.remote b/.bazelrc.remote index 075c9efafbcdf..db858bbfaf1f5 100644 --- a/.bazelrc.remote +++ b/.bazelrc.remote @@ -7,9 +7,6 @@ build:remote --remote_cache=grpcs://gypsum.cluster.engflow.com # The number of cores available build:remote -j 50 -# Build Without The Bytes -build:remote --remote_download_minimal - build:remote --define=EXECUTOR=remote build:remote --experimental_inmemory_dotd_files build:remote --experimental_inmemory_jdeps_files @@ -64,6 +61,7 @@ test:remote --test_timeout=600 build:remote-ci --config=remote build:remote-ci --curses=no --color=yes --show_timestamps --show_progress_rate_limit=5 build:remote-ci --bes_upload_mode=wait_for_upload_complete +build:remote-ci --remote_download_minimal # Configuration changes suggested by EngFlow build:remote --grpc_keepalive_time=30s From a226a05ea478762cfc2ed13ad70f887eb079a77a Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 14:44:23 -0500 Subject: [PATCH 053/176] [build] update python nightly target --- .github/workflows/nightly.yml | 4 +--- Rakefile | 4 +++- py/BUILD.bazel | 25 +++++++++---------------- py/private/release_selenium.bzl | 26 ++++++++++++++++++++++++++ 4 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 py/private/release_selenium.bzl diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1181fbd0d6e45..c67970b365ac0 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -66,9 +66,7 @@ jobs: cache-key: python-nightly run: | ./go "py:version[nightly]" - ./go py:build - pip install twine - twine upload --repository testpypi bazel-bin/py/selenium-4*.whl bazel-bin/py/selenium-4*.tar.gz + ./go py:release[nightly] secrets: inherit on-python-failure: name: On Python Failure diff --git a/Rakefile b/Rakefile index 5d0f471babece..a9245c18e23cf 100644 --- a/Rakefile +++ b/Rakefile @@ -586,8 +586,10 @@ namespace :py do desc 'Release Python wheel and sdist to pypi' task :release, [:args] do |_task, arguments| + nightly = arguments[:args].delete('nightly') args = Array(arguments[:args]) || ['--stamp'] - Bazel.execute('run', args, '//py:selenium-release') + command = nightly.nil? ? '//py:selenium-release' : '//py:selenium-release-nightly' + Bazel.execute('run', args, command) end desc 'generate and copy files required for local development' diff --git a/py/BUILD.bazel b/py/BUILD.bazel index 466bbb67cae55..5e5b98e884986 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -9,24 +9,17 @@ load("//common:defs.bzl", "copy_file") load("//py:defs.bzl", "generate_devtools", "py_test_suite") load("//py/private:browsers.bzl", "BROWSERS") load("//py/private:import.bzl", "py_import") +load("//py/private:release_selenium.bzl", "release_selenium") -py_binary( +release_selenium( name = "selenium-release", - srcs = [ - "release-selenium.py", - ], - args = [ - "upload", - "$(location :selenium-wheel)", - "$(location :selenium-sdist)", - ], - data = [ - ":selenium-sdist", - ":selenium-wheel", - ], - main = "release-selenium.py", - deps = [ - requirement("twine"), +) + +release_selenium( + name = "selenium-release-nightly", + additional_args = [ + "--repository", + "testpypi", ], ) diff --git a/py/private/release_selenium.bzl b/py/private/release_selenium.bzl new file mode 100644 index 0000000000000..eaf9459aba2e5 --- /dev/null +++ b/py/private/release_selenium.bzl @@ -0,0 +1,26 @@ +load("@py_dev_requirements//:requirements.bzl", "requirement") + +def release_selenium(name, additional_args = []): + native.py_binary( + name = name, + srcs = [ + "release-selenium.py", + ], + args = [ + "upload", + "$(location :selenium-wheel)", + "$(location :selenium-sdist)", + ] + additional_args, + data = [ + ":selenium-sdist", + ":selenium-wheel", + ], + main = "release-selenium.py", + deps = [ + requirement("twine"), + ], + env = { + "TWINE_USERNAME": "$(TWINE_USERNAME)", + "TWINE_PASSWORD": "$(TWINE_PASSWORD)", + }, + ) From 1ac8fb73e69307876ccf67a5e900e080b7a04d62 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 14:53:54 -0500 Subject: [PATCH 054/176] [build] syntax updates to Rakefile --- Rakefile | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/Rakefile b/Rakefile index a9245c18e23cf..8f1cbc6c45863 100644 --- a/Rakefile +++ b/Rakefile @@ -533,7 +533,6 @@ namespace :node do task :version, [:version] do |_task, arguments| bump_nightly = arguments[:version] === 'nightly' old_version = node_version - new_version = nil # There are three cases we want to deal with: # 1. Switching from a release build to a nightly one @@ -1157,11 +1156,7 @@ namespace :all do desc 'Update everything in preparation for a release' task :prepare, [:channel] do |_task, arguments| - chrome_channel = if arguments[:channel].nil? - 'Stable' - else - arguments[:channel] - end + chrome_channel = arguments[:channel] || 'Stable' args = Array(chrome_channel) ? ['--', "--chrome_channel=#{chrome_channel.capitalize}"] : [] Bazel.execute('run', args, '//scripts:pinned_browsers') commit!('Update pinned browser versions', ['common/repositories.bzl']) @@ -1353,16 +1348,6 @@ def restore_git(origin_reference) false end -def previous_version(version) - current = version.split(/\.|-/) - if current.size > 3 - current.pop while current.size > 3 - else - current[1] = (current[1].to_i - 1).to_s - current[2] = '0' - end -end - def previous_tag(current_version, language=nil) version = current_version.split(/\.|-/) if version.size > 3 From 6e060d31c25263f14b1c5f25543a35338390d9a2 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 14:55:55 -0500 Subject: [PATCH 055/176] [build] naming updates and logic fixes for .NET build, package and release --- Rakefile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Rakefile b/Rakefile index 8f1cbc6c45863..11987069bd3e7 100644 --- a/Rakefile +++ b/Rakefile @@ -831,12 +831,12 @@ namespace :dotnet do Bazel.execute('build', args, '//dotnet:all') end - desc 'Create zipped assets for .NET for uploading to GitHub' - task :zip_assets, [:args] do |_task, arguments| + desc 'Package .NET bindings into zipped assets and stage for release' + task :package, [:args] do |_task, arguments| args = Array(arguments[:args]) || ['--stamp'] Rake::Task['dotnet:build'].invoke(args) mkdir_p 'build/dist' - FileUtils.rm_f('build/dist/*dotnet*') + FileUtils.rm_f(Dir.glob('build/dist/*dotnet*')) FileUtils.copy('bazel-bin/dotnet/release.zip', "build/dist/selenium-dotnet-#{dotnet_version}.zip") FileUtils.chmod(0666, "build/dist/selenium-dotnet-#{dotnet_version}.zip") @@ -847,8 +847,7 @@ namespace :dotnet do desc 'Upload nupkg files to Nuget' task :release, [:args] do |_task, arguments| args = Array(arguments[:args]) || ['--stamp'] - Rake::Task['dotnet:build'].invoke(args) - Rake::Task['dotnet:zip_assets'].invoke(args) + Rake::Task['dotnet:package'].invoke(args) release_version = dotnet_version api_key = ENV.fetch('NUGET_API_KEY', nil) From 42ce63a2d31bcfe05c19b7a7e7d09ee42ffc947e Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 15:20:36 -0500 Subject: [PATCH 056/176] [build] update java build and packaging to allow RBE --- .github/workflows/nightly.yml | 4 +--- Rakefile | 42 ++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index c67970b365ac0..f6a59406c08e3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -151,9 +151,7 @@ jobs: with: name: Nightly Grid Release cache-key: grid-nightly - run: | - echo build --stamp >>.bazelrc.local - ./go java-release-zip + run: ./go java:package[--config=release] nightly-release-files: build/dist/*.* on-grid-failure: name: On Grid Failure diff --git a/Rakefile b/Rakefile index 11987069bd3e7..c2410c572bcf9 100644 --- a/Rakefile +++ b/Rakefile @@ -332,23 +332,11 @@ task ios_driver: [ '//javascript/webdriver/atoms/fragments:get_location_in_view:ios' ] -desc 'Create zipped assets for Java for uploading to GitHub' +# This task does not allow running RBE, to run stamped with RBE use +# ./go java:package['--config=release'] +desc 'Create stamped zipped assets for Java for uploading to GitHub' task :'java-release-zip' do - Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium:client-zip') - Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium/grid:server-zip') - Bazel.execute('build', ['--stamp'], '//java/src/org/openqa/selenium/grid:executable-grid') - mkdir_p 'build/dist' - Dir.glob('build/dist/*{java,server}*').each { |file| FileUtils.rm_f(file) } - - FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip', - "build/dist/selenium-server-#{java_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-server-#{java_version}.zip") - FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/client-zip.zip', - "build/dist/selenium-java-#{java_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-java-#{java_version}.zip") - FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/selenium', - "build/dist/selenium-server-#{java_version}.jar") - FileUtils.chmod(0777, "build/dist/selenium-server-#{java_version}.jar") + Rake::Task['java:package'].invoke(['--stamp']) end task 'release-java': %i[java-release-zip publish-maven] @@ -956,11 +944,25 @@ namespace :java do Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:grid') end - desc 'Package Java bindings and grid into releasable packages' + desc 'Package Java bindings and grid into releasable packages and stage for release' task :package, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] - Rake::Task['java:build'].invoke(args) - Rake::Task['java-release-zip'].invoke + args = Array(arguments[:args]) || ['--stamp'] + Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-zip') + Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:server-zip') + Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid') + + mkdir_p 'build/dist' + Dir.glob('build/dist/*{java,server}*').each { |file| FileUtils.rm_f(file) } + + FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip', + "build/dist/selenium-server-#{java_version}.zip") + FileUtils.chmod(0666, "build/dist/selenium-server-#{java_version}.zip") + FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/client-zip.zip', + "build/dist/selenium-java-#{java_version}.zip") + FileUtils.chmod(0666, "build/dist/selenium-java-#{java_version}.zip") + FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/selenium', + "build/dist/selenium-server-#{java_version}.jar") + FileUtils.chmod(0777, "build/dist/selenium-server-#{java_version}.jar") end desc 'Deploy all jars to Maven' From 93f95ffb40abf46bf8d8b6a7abe7b2297f12357b Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 21:18:58 -0500 Subject: [PATCH 057/176] [build] simplify version update logic --- Rakefile | 149 +++++++++++++------------------------------------------ 1 file changed, 34 insertions(+), 115 deletions(-) diff --git a/Rakefile b/Rakefile index c2410c572bcf9..73aeeeadbaa13 100644 --- a/Rakefile +++ b/Rakefile @@ -519,33 +519,9 @@ namespace :node do desc 'Update Node version' task :version, [:version] do |_task, arguments| - bump_nightly = arguments[:version] === 'nightly' old_version = node_version - - # There are three cases we want to deal with: - # 1. Switching from a release build to a nightly one - # 2. Updating a nightly build for the next nightly build - # 3. Switching from nightlies to a release build. - - if bump_nightly && old_version.include?('-nightly') - # This is the case where we are updating a nightly build to the next nightly build. - # This change is usually done by the CI system and never committed. - # The "-nightlyYmdHM" is removed to add a new timestamp. - new_version = old_version.gsub(/\-nightly\d+$/, '') + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - elsif bump_nightly - # This is the case after a production release and the version number is configured - # to start doing nightly builds. - new_version = old_version + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - else - if old_version.include?('-nightly') - # From a nightly build to a release build. - new_version = old_version.gsub(/\-nightly\d+$/, '') - else - # From a release build to a nightly build. We use npm version for this. - new_version = updated_version(old_version.gsub(/\-nightly\d+$/, ''), arguments[:version]) - new_version = new_version + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - end - end + nightly = "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" + new_version = updated_version(old_version, arguments[:version], nightly) ['javascript/node/selenium-webdriver/package.json', 'package-lock.json', @@ -554,7 +530,7 @@ namespace :node do File.open(file, "w") { |f| f.puts text } end - Rake::Task['node:changelog'].invoke unless new_version.include?('-nightly') || bump_nightly + Rake::Task['node:changelog'].invoke unless new_version.include?(nightly) end end @@ -648,32 +624,9 @@ namespace :py do desc 'Update Python version' task :version, [:version] do |_task, arguments| - bump_nightly = arguments[:version] === 'nightly' old_version = python_version - new_version = nil - - # There are three cases we want to deal with: - # 1. Switching from a release build to a nightly one - # 2. Updating a nightly build for the next nightly build - # 3. Switching from nightlies to a release build. - - if bump_nightly && old_version.include?('.dev') - # This is the case where we are updating a nightly build to the next nightly build. - # This change is usually done by the CI system and never committed. - # The ".dev" is removed to have the pushed package in TestPyPi be shown as latest. - new_version = old_version.gsub(/\.dev\d+$/, '') + + ".#{Time.now.strftime("%Y%m%d%H%M")}" - elsif bump_nightly - # This is the case after a production release and the version number is configured - # to start doing nightly builds. - new_version = old_version + ".dev#{Time.now.strftime("%Y%m%d%H%M")}" - else - if old_version.include?('.dev') - new_version = old_version.gsub(/\.dev\d+$/, '') - else - new_version = updated_version(old_version.gsub(/\.dev\d+$/, ''), arguments[:version]) - new_version = new_version + ".dev#{Time.now.strftime("%Y%m%d%H%M")}" - end - end + nightly = ".dev#{Time.now.strftime("%Y%m%d%H%M")}" + new_version = updated_version(old_version, arguments[:version], nightly) ['py/setup.py', 'py/BUILD.bazel', @@ -690,7 +643,7 @@ namespace :py do text = File.read('py/docs/source/conf.py').gsub(old_short_version, new_short_version) File.open('py/docs/source/conf.py', "w") { |f| f.puts text } - Rake::Task['py:changelog'].invoke unless new_version.include?('.dev') || bump_nightly + Rake::Task['py:changelog'].invoke unless new_version.include?(nightly) end desc 'Update Python Syntax' @@ -790,14 +743,13 @@ namespace :rb do desc 'Update Ruby version' task :version, [:version] do |_task, arguments| old_version = ruby_version - new_version = updated_version(old_version, arguments[:version]) - new_version += '.nightly' unless old_version.include?('nightly') + new_version = updated_version(old_version, arguments[:version], '.nightly') file = 'rb/lib/selenium/webdriver/version.rb' text = File.read(file).gsub(old_version, new_version) File.open(file, "w") { |f| f.puts text } - Rake::Task['rb:changelog'].invoke unless new_version.include?('nightly') + Rake::Task['rb:changelog'].invoke unless new_version.include?('.nightly') sh 'cd rb && bundle --version && bundle update' end @@ -896,38 +848,15 @@ namespace :dotnet do desc 'Update .NET version' task :version, [:version] do |_task, arguments| - bump_nightly = arguments[:version] === 'nightly' old_version = dotnet_version - new_version = nil - - # There are three cases we want to deal with: - # 1. Switching from a release build to a nightly one - # 2. Updating a nightly build for the next nightly build - # 3. Switching from nightlies to a release build. - - if bump_nightly && old_version.include?('-nightly') - # This is the case where we are updating a nightly build to the next nightly build. - # This change is usually done by the CI system and never committed. - # The "-nightlyYmdHM" is removed to add a new timestamp. - new_version = old_version.gsub(/\-nightly\d+$/, '') + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - elsif bump_nightly - # This is the case after a production release and the version number is configured - # to start doing nightly builds. - new_version = old_version + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - else - if old_version.include?('-nightly') - new_version = old_version.gsub(/\-nightly\d+$/, '') - else - new_version = updated_version(old_version.gsub(/\-nightly\d+$/, ''), arguments[:version]) - new_version = new_version + "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" - end - end + nightly = "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" + new_version = updated_version(old_version, arguments[:version], nightly) file = 'dotnet/selenium-dotnet-version.bzl' text = File.read(file).gsub(old_version, new_version) File.open(file, "w") { |f| f.puts text } - Rake::Task['dotnet:changelog'].invoke unless new_version.include?('-nightly') || bump_nightly + Rake::Task['dotnet:changelog'].invoke unless new_version.include?(nightly) end end @@ -1025,13 +954,12 @@ namespace :java do desc 'Update Java version' task :version, [:version] do |_task, arguments| old_version = java_version - new_version = updated_version(old_version, arguments[:version]) - new_version += '-SNAPSHOT' unless old_version.include?('SNAPSHOT') + new_version = updated_version(old_version, arguments[:version], '-SNAPSHOT') file = 'java/version.bzl' text = File.read(file).gsub(old_version, new_version) File.open(file, "w") { |f| f.puts text } - Rake::Task['java:changelog'].invoke if old_version.include?('SNAPSHOT') + Rake::Task['java:changelog'].invoke unless new_version.include?('-SNAPSHOT') end end @@ -1069,16 +997,15 @@ namespace :rust do else old_version.split('.').tap(&:shift).append('0').join('.') end - converted_version = updated_version(equivalent_version, arguments[:version]) - new_version = converted_version.split('.').unshift("0").tap(&:pop).join('.') - new_version += '-nightly' unless old_version.include?('nightly') + updated = updated_version(equivalent_version, arguments[:version], '-nightly') + new_version = updated.split(/\.|-/).tap {|v| v.delete_at(2)}.unshift("0").join('.').gsub('.nightly', '-nightly') ['rust/Cargo.toml', 'rust/BUILD.bazel'].each do |file| text = File.read(file).gsub(old_version, new_version) File.open(file, "w") { |f| f.puts text } end - Rake::Task['rust:changelog'].invoke unless new_version.include?('nightly') + Rake::Task['rust:changelog'].invoke unless new_version.include?('-nightly') Rake::Task['rust:update'].invoke end @@ -1210,19 +1137,13 @@ namespace :all do desc 'Update all versions' task :version, [:version] do |_task, arguments| - version = arguments[:version] - if version == 'nightly' - Rake::Task['java:version'].invoke - Rake::Task['rb:version'].invoke - Rake::Task['rust:version'].invoke - Rake::Task['py:version'].invoke - else - Rake::Task['java:version'].invoke(version) - Rake::Task['rb:version'].invoke(version) - Rake::Task['node:version'].invoke(version) - Rake::Task['py:version'].invoke(version) - Rake::Task['dotnet:version'].invoke(version) - end + version = arguments[:version] || 'nightly' + + Rake::Task['java:version'].invoke(version) + Rake::Task['rb:version'].invoke(version) + Rake::Task['node:version'].invoke(version) + Rake::Task['py:version'].invoke(version) + Rake::Task['dotnet:version'].invoke(version) end end @@ -1263,20 +1184,18 @@ task :create_release_notes do puts "Release notes have been generated at: #{release_notes_file}" end -def updated_version(current, desired = nil) - puts "Calculating " - version = desired ? desired.split('.') : current.split(/\.|-/) - if desired - # Allows user to pass in only major/minor versions - version << "0" while version.size < 3 - elsif version.size > 3 - # Assumes a pre-release version which means removing the pre-release portion - version.pop while version.size > 3 - else - version[1] = (version[1].to_i + 1).to_s - version[2] = '0' +def updated_version(current, desired = nil, nightly = nil) + if !desired.nil? && desired != 'nightly' + # If desired is present, return full 3 digit version + desired.split('.').tap {|v| v << 0 while v.size < 3}.join('.') + elsif current.split(/\.|-/).size > 3 + # if current version is already nightly, just need to bump it; this will be noop for some languages + pattern = /-?\.?(nightly|SNAPSHOT|dev)\d*$/ + current.gsub(pattern, nightly) + elsif current.split(/\.|-/).size == 3 + # if current version is not nightly, need to bump the version and make nightly + "#{current.split(/\.|-/).tap { |i| (i[1] = i[1].to_i + 1) && (i[2] = 0) }.join('.')}#{nightly}" end - version.join('.') end def update_gh_pages From c433f1070074baf8c3b54ed0e1a39cc0213c04d9 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 21:34:24 -0500 Subject: [PATCH 058/176] [build] update nightly versions by default when doing a nightly release --- .github/workflows/nightly.yml | 21 +++++++-------------- Rakefile | 23 ++++++++++++++++++----- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index f6a59406c08e3..3683cb41069cc 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -35,10 +35,9 @@ jobs: with: name: Nightly Ruby Release cache-key: rb-nightly-${{ matrix.gem }} - run: | - export GEM_HOST_API_KEY="Bearer $GITHUB_TOKEN" - bazel run //rb:${{ matrix.gem }}-bump-nightly-version ${{ inputs.version }} - bazel run //rb:${{ matrix.gem }}-release-nightly + env: + GEM_HOST_API_KEY: "Bearer $GITHUB_TOKEN" + run: ./go rb:release['nightly', '--config=release'] on-ruby-failure: name: On Ruby Failure runs-on: ubuntu-latest @@ -64,9 +63,7 @@ jobs: with: name: Nightly Python Release cache-key: python-nightly - run: | - ./go "py:version[nightly]" - ./go py:release[nightly] + run: ./go py:release['nightly', '--config=release'] secrets: inherit on-python-failure: name: On Python Failure @@ -93,8 +90,7 @@ jobs: with: name: Nightly Java Release cache-key: java-nightly - run: | - ./go publish-maven-snapshot + run: ./go publish-maven-snapshot secrets: inherit on-java-failure: name: On Java Failure @@ -122,9 +118,7 @@ jobs: name: Nightly DotNet Release cache-key: dotnet-nightly dotnet-version: '6.x' - run: | - ./go "dotnet:version[nightly]" - ./go dotnet:release + run: ./go dotnet:release['nightly', '--config=release'] secrets: inherit on-dotnet-failure: name: On .NET Failure @@ -185,8 +179,7 @@ jobs: echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc echo "@seleniumhq:registry=https://npm.pkg.github.com" >> ~/.npmrc echo "always-auth=true" >> ~/.npmrc - ./go "node:version[nightly]" - ./go node:release + ./go node:release['nightly', '--config=release'] secrets: inherit on-javascript-failure: name: On JavaScript Failure diff --git a/Rakefile b/Rakefile index 73aeeeadbaa13..8375ee0344c92 100644 --- a/Rakefile +++ b/Rakefile @@ -488,8 +488,12 @@ namespace :node do end desc 'Release Node npm package' - task :release do - Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish') + task :release, [:args] do |_task, arguments| + args = Array(arguments[:args]) || ['--stamp'] + nightly = args.delete('nightly') + Rake::Task['node:version'].invoke('nightly') if nightly + + Bazel.execute('run', args, '//javascript/node/selenium-webdriver:selenium-webdriver.publish') end desc 'Release Node npm package' @@ -549,8 +553,10 @@ namespace :py do desc 'Release Python wheel and sdist to pypi' task :release, [:args] do |_task, arguments| - nightly = arguments[:args].delete('nightly') args = Array(arguments[:args]) || ['--stamp'] + nightly = args.delete('nightly') + Rake::Task['py:version'].invoke('nightly') if nightly + command = nightly.nil? ? '//py:selenium-release' : '//py:selenium-release-nightly' Bazel.execute('run', args, command) end @@ -717,8 +723,12 @@ namespace :rb do desc 'Push Ruby gems to rubygems' task :release, [:args] do |_task, arguments| args = Array(arguments[:args]) || ['--stamp'] - Bazel.execute('run', args, '//rb:selenium-webdriver-release') - Bazel.execute('run', args, '//rb:selenium-devtools-release') + nightly = args.delete('nightly') + wd_target = nightly ? '//rb:selenium-webdriver-release' : '//rb:selenium-webdriver-release-nightly' + cdp_target = nightly ? '//rb:selenium-devtools-release' : '//rb:selenium-devtools-release-nightly' + + Bazel.execute('run', args, wd_target) + Bazel.execute('run', args, cdp_target) end desc 'Generate Ruby documentation' @@ -787,6 +797,9 @@ namespace :dotnet do desc 'Upload nupkg files to Nuget' task :release, [:args] do |_task, arguments| args = Array(arguments[:args]) || ['--stamp'] + nightly = args.delete('nightly') + Rake::Task['dotnet:version'].invoke('nightly') if nightly + Rake::Task['dotnet:package'].invoke(args) release_version = dotnet_version From 0bd6fa4d114eccc8dad5b07e29dfec1d364cba05 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 22:38:09 -0500 Subject: [PATCH 059/176] [build] fix logic for stamping defaults --- Rakefile | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/Rakefile b/Rakefile index 8375ee0344c92..42dd3b8c2a59e 100644 --- a/Rakefile +++ b/Rakefile @@ -489,7 +489,7 @@ namespace :node do desc 'Release Node npm package' task :release, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) nightly = args.delete('nightly') Rake::Task['node:version'].invoke('nightly') if nightly @@ -553,7 +553,7 @@ namespace :py do desc 'Release Python wheel and sdist to pypi' task :release, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) nightly = args.delete('nightly') Rake::Task['py:version'].invoke('nightly') if nightly @@ -722,7 +722,7 @@ namespace :rb do desc 'Push Ruby gems to rubygems' task :release, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) nightly = args.delete('nightly') wd_target = nightly ? '//rb:selenium-webdriver-release' : '//rb:selenium-webdriver-release-nightly' cdp_target = nightly ? '//rb:selenium-devtools-release' : '//rb:selenium-devtools-release-nightly' @@ -764,8 +764,9 @@ namespace :rb do end desc 'Update Ruby Syntax' - task :lint do - `cd rb && bundle exec rubocop -a` + task :lint, [:args] do |_task, arguments| + args = Array(arguments[:args] || ['--stamp']) + Bazel.execute('run', args, '//rb:lint') end end @@ -783,7 +784,7 @@ namespace :dotnet do desc 'Package .NET bindings into zipped assets and stage for release' task :package, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) Rake::Task['dotnet:build'].invoke(args) mkdir_p 'build/dist' FileUtils.rm_f(Dir.glob('build/dist/*dotnet*')) @@ -796,7 +797,7 @@ namespace :dotnet do desc 'Upload nupkg files to Nuget' task :release, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) nightly = args.delete('nightly') Rake::Task['dotnet:version'].invoke('nightly') if nightly @@ -888,7 +889,7 @@ namespace :java do desc 'Package Java bindings and grid into releasable packages and stage for release' task :package, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:server-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid') @@ -909,7 +910,7 @@ namespace :java do desc 'Deploy all jars to Maven' task :release, [:args] do |_task, arguments| - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) Rake::Task['java:package'].invoke(args) Rake::Task['publish-maven'].invoke end @@ -1066,7 +1067,7 @@ namespace :all do tag = @git.add_tag("selenium-#{java_version}") @git.push('origin', tag.name) - args = Array(arguments[:args]) || ['--stamp'] + args = Array(arguments[:args] || ['--stamp']) Rake::Task['java:release'].invoke(args) Rake::Task['py:release'].invoke(args) Rake::Task['rb:release'].invoke(args) From 6247666f85d1315e8ec5b3be8c7867c2fc75d544 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 12 Jun 2024 01:08:46 -0500 Subject: [PATCH 060/176] [build] pre-release PR should set to merge directly to trunk --- .github/workflows/pre-release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 86a8cb2442860..fd68efa05af03 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -91,6 +91,7 @@ jobs: author: Selenium CI Bot delete-branch: true branch: release-preparation-${{ github.event.inputs.version }} + base: trunk title: "[build] Prepare for release of Selenium ${{ github.event.inputs.version }}" body: | **Warning: Manually update the changelogs before merging** From 6453efdd1c27e8e50fe62aff33b9cbd37fe189cf Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 11 Jun 2024 23:23:24 -0500 Subject: [PATCH 061/176] [build] improve rb:build command logic --- Rakefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Rakefile b/Rakefile index 42dd3b8c2a59e..27f472f359b7c 100644 --- a/Rakefile +++ b/Rakefile @@ -706,9 +706,12 @@ end namespace :rb do desc 'Generate Ruby gems' task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] - webdriver = args.reject! { |item| item == 'webdriver' } - devtools = args.reject! { |item| item == 'devtools' } + args = Array(arguments[:args]) + puts "args #{args}" + webdriver = !args.delete('devtools') + puts "wd #{webdriver}" + devtools = !args.delete('webdriver') + puts "cdp #{devtools}" Bazel.execute('build', args, '//rb:selenium-webdriver') if webdriver Bazel.execute('build', args, '//rb:selenium-devtools') if devtools end From a4d1b02100cf967ff337d1f832d864623fd91927 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Wed, 12 Jun 2024 13:27:02 +0530 Subject: [PATCH 062/176] Add preference to enable CDP in Firefox by default (#14091) Related to #11736 --- .../src/webdriver/Firefox/FirefoxOptions.cs | 3 ++ java/.idea/workspace.xml | 49 +++++++++++++++++++ .../selenium/firefox/FirefoxOptions.java | 4 ++ javascript/node/selenium-webdriver/firefox.js | 3 ++ .../test/firefox/options_test.js | 8 ++- py/selenium/webdriver/firefox/options.py | 3 ++ .../firefox/firefox_options_tests.py | 2 +- .../webdriver/remote/new_session_tests.py | 4 +- rb/lib/selenium/webdriver/firefox/options.rb | 3 ++ .../selenium/webdriver/firefox/driver_spec.rb | 7 ++- .../webdriver/firefox/options_spec.rb | 8 +-- 11 files changed, 84 insertions(+), 10 deletions(-) create mode 100644 java/.idea/workspace.xml diff --git a/dotnet/src/webdriver/Firefox/FirefoxOptions.cs b/dotnet/src/webdriver/Firefox/FirefoxOptions.cs index a5c8c0a5d494e..b2eb933805526 100644 --- a/dotnet/src/webdriver/Firefox/FirefoxOptions.cs +++ b/dotnet/src/webdriver/Firefox/FirefoxOptions.cs @@ -88,6 +88,9 @@ public FirefoxOptions() this.AddKnownCapabilityName(FirefoxOptions.FirefoxLegacyProfileCapability, "Profile property"); this.AddKnownCapabilityName(FirefoxOptions.FirefoxLegacyBinaryCapability, "BrowserExecutableLocation property"); this.AddKnownCapabilityName(FirefoxOptions.FirefoxEnableDevToolsProtocolCapability, "EnableDevToolsProtocol property"); + // Firefox 129 onwards the CDP protocol will not be enabled by default. Setting this preference will enable it. + // https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/. + this.SetPreference("remote.active-protocols", 3); } /// diff --git a/java/.idea/workspace.xml b/java/.idea/workspace.xml new file mode 100644 index 0000000000000..c24b8f6be3837 --- /dev/null +++ b/java/.idea/workspace.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + 1717749164217 + + + + + + + \ No newline at end of file diff --git a/java/src/org/openqa/selenium/firefox/FirefoxOptions.java b/java/src/org/openqa/selenium/firefox/FirefoxOptions.java index ddde5e5402c51..6f514c79aec60 100644 --- a/java/src/org/openqa/selenium/firefox/FirefoxOptions.java +++ b/java/src/org/openqa/selenium/firefox/FirefoxOptions.java @@ -63,6 +63,10 @@ public FirefoxOptions() { setCapability(CapabilityType.BROWSER_NAME, FIREFOX.browserName()); setAcceptInsecureCerts(true); setCapability("moz:debuggerAddress", true); + // Firefox 129 onwards the CDP protocol will not be enabled by default. Setting this preference + // will enable it. + // https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/. + addPreference("remote.active-protocols", 3); } public FirefoxOptions(Capabilities source) { diff --git a/javascript/node/selenium-webdriver/firefox.js b/javascript/node/selenium-webdriver/firefox.js index d3fd0c60e9280..f6cd1cf1e9d7e 100644 --- a/javascript/node/selenium-webdriver/firefox.js +++ b/javascript/node/selenium-webdriver/firefox.js @@ -246,6 +246,9 @@ class Options extends Capabilities { constructor(other) { super(other) this.setBrowserName(Browser.FIREFOX) + // Firefox 129 onwards the CDP protocol will not be enabled by default. Setting this preference will enable it. + // https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/. + this.setPreference('remote.active-protocols', 3) } /** diff --git a/javascript/node/selenium-webdriver/test/firefox/options_test.js b/javascript/node/selenium-webdriver/test/firefox/options_test.js index 50f8441a05373..6e0706d3b12c2 100644 --- a/javascript/node/selenium-webdriver/test/firefox/options_test.js +++ b/javascript/node/selenium-webdriver/test/firefox/options_test.js @@ -87,7 +87,13 @@ suite( it('allows setting android activity', function () { let options = new firefox.Options().enableMobile() let firefoxOptions = options.firefoxOptions_() - assert.deepStrictEqual({ androidPackage: 'org.mozilla.firefox' }, firefoxOptions) + assert.deepStrictEqual( + { + androidPackage: 'org.mozilla.firefox', + prefs: { 'remote.active-protocols': 3 }, + }, + firefoxOptions, + ) }) }) diff --git a/py/selenium/webdriver/firefox/options.py b/py/selenium/webdriver/firefox/options.py index 1cb3a2bdd08a4..b16622b03dd93 100644 --- a/py/selenium/webdriver/firefox/options.py +++ b/py/selenium/webdriver/firefox/options.py @@ -41,6 +41,9 @@ def __init__(self) -> None: super().__init__() self._binary_location = "" self._preferences: dict = {} + # Firefox 129 onwards the CDP protocol will not be enabled by default. Setting this preference will enable it. + # https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/. + self._preferences["remote.active-protocols"] = 3 self._profile = None self.log = Log() diff --git a/py/test/unit/selenium/webdriver/firefox/firefox_options_tests.py b/py/test/unit/selenium/webdriver/firefox/firefox_options_tests.py index a4a5ecbfbb09a..7086bd4778cdb 100644 --- a/py/test/unit/selenium/webdriver/firefox/firefox_options_tests.py +++ b/py/test/unit/selenium/webdriver/firefox/firefox_options_tests.py @@ -79,7 +79,7 @@ def test_set_proxy_isnt_in_moz_prefix(options): caps = options.to_capabilities() assert caps["proxy"]["proxyType"] == "manual" - assert caps.get("moz:firefoxOptions") is None + assert caps.get("moz:firefoxOptions") == {"prefs": {"remote.active-protocols": 3}} def test_raises_exception_if_proxy_is_not_proxy_object(options): diff --git a/py/test/unit/selenium/webdriver/remote/new_session_tests.py b/py/test/unit/selenium/webdriver/remote/new_session_tests.py index 95195f6e89a3f..f4fc9b3b39f7c 100644 --- a/py/test/unit/selenium/webdriver/remote/new_session_tests.py +++ b/py/test/unit/selenium/webdriver/remote/new_session_tests.py @@ -52,7 +52,7 @@ def test_works_as_context_manager(mocker): @pytest.mark.parametrize("browser_name", ["firefox", "chrome", "ie"]) -def test_accepts_options_to_remote_driver(mocker, browser_name): +def test_acepts_options_to_remote_driver(mocker, browser_name): options = import_module(f"selenium.webdriver.{browser_name}.options") mock = mocker.patch("selenium.webdriver.remote.webdriver.WebDriver.start_session") @@ -103,7 +103,7 @@ def test_first_match_when_2_different_option_types(): "browserName": "firefox", "acceptInsecureCerts": True, "moz:debuggerAddress": True, - "moz:firefoxOptions": {"args": ["foo"]}, + "moz:firefoxOptions": {"args": ["foo"], "prefs": {"remote.active-protocols": 3}}, }, ], } diff --git a/rb/lib/selenium/webdriver/firefox/options.rb b/rb/lib/selenium/webdriver/firefox/options.rb index 23a9014ba12b0..c702600b3bc28 100644 --- a/rb/lib/selenium/webdriver/firefox/options.rb +++ b/rb/lib/selenium/webdriver/firefox/options.rb @@ -64,6 +64,9 @@ def initialize(log_level: nil, **opts) @options[:args] ||= [] @options[:prefs] ||= {} + # Firefox 129 onwards the CDP protocol will not be enabled by default. Setting this preference will enable it. + # https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/. + @options[:prefs]['remote.active-protocols'] = 3 @options[:env] ||= {} @options[:log] ||= {level: log_level} if log_level diff --git a/rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb b/rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb index 1d9a56b6e7f14..9c65604ce6aa4 100644 --- a/rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb +++ b/rb/spec/unit/selenium/webdriver/firefox/driver_spec.rb @@ -38,7 +38,7 @@ module Firefox def expect_request(body: nil, endpoint: nil) body = (body || {capabilities: {alwaysMatch: {acceptInsecureCerts: true, browserName: 'firefox', - 'moz:firefoxOptions': {}, + 'moz:firefoxOptions': {prefs: {'remote.active-protocols' => 3}}, 'moz:debuggerAddress': true}}}).to_json endpoint ||= "#{service_manager.uri}/session" stub_request(:post, endpoint).with(body: body).to_return(valid_response) @@ -79,7 +79,10 @@ def expect_request(body: nil, endpoint: nil) opts = {args: ['-f']} expect_request(body: {capabilities: {alwaysMatch: {acceptInsecureCerts: true, browserName: 'firefox', - 'moz:firefoxOptions': opts, + 'moz:firefoxOptions': { + args: ['-f'], + prefs: {'remote.active-protocols' => 3} + }, 'moz:debuggerAddress': true}}}) expect { described_class.new(options: Options.new(**opts)) }.not_to raise_exception end diff --git a/rb/spec/unit/selenium/webdriver/firefox/options_spec.rb b/rb/spec/unit/selenium/webdriver/firefox/options_spec.rb index c849054f8dc12..911dd9ff9c99d 100644 --- a/rb/spec/unit/selenium/webdriver/firefox/options_spec.rb +++ b/rb/spec/unit/selenium/webdriver/firefox/options_spec.rb @@ -154,7 +154,7 @@ module Firefox options.add_preference('intl.accepted_languages', 'en-US') prefs = options.as_json['moz:firefoxOptions']['prefs'] - expected = {'intl.accepted_languages' => 'en-US'} + expected = {'intl.accepted_languages' => 'en-US', 'remote.active-protocols' => 3} expect(prefs).to eq(expected) end end @@ -185,7 +185,7 @@ module Firefox it 'returns empty options by default' do expect(options.as_json).to eq('browserName' => 'firefox', 'acceptInsecureCerts' => true, - 'moz:firefoxOptions' => {}, + 'moz:firefoxOptions' => {'prefs' => {'remote.active-protocols' => 3}}, 'moz:debuggerAddress' => true) end @@ -195,7 +195,7 @@ module Firefox 'browserName' => 'firefox', 'foo:bar' => {'foo' => 'bar'}, 'moz:debuggerAddress' => true, - 'moz:firefoxOptions' => {}) + 'moz:firefoxOptions' => {'prefs' => {'remote.active-protocols' => 3}}) end it 'converts to a json hash' do @@ -240,7 +240,7 @@ module Firefox 'moz:debuggerAddress' => true, key => {'args' => %w[foo bar], 'binary' => '/foo/bar', - 'prefs' => {'foo' => 'bar'}, + 'prefs' => {'foo' => 'bar', 'remote.active-protocols' => 3}, 'env' => {'FOO' => 'bar'}, 'profile' => 'encoded_profile', 'log' => {'level' => 'debug'}, From d743a2c886e4042ea89193e017688ff3c60d7ecc Mon Sep 17 00:00:00 2001 From: Simon Stewart Date: Wed, 12 Jun 2024 13:34:19 +0100 Subject: [PATCH 063/176] [bazel + js]: Get small js tests running on the rbe (#14123) --- .github/workflows/ci-javascript.yml | 11 +------- .../node/selenium-webdriver/BUILD.bazel | 16 +++++------- .../selenium-webdriver/test/driver_factory.js | 8 +++--- .../selenium-webdriver/test/io/io_test.js | 2 +- .../selenium-webdriver/test/io/zip_test.js | 6 ++--- .../selenium-webdriver/test/lib/by_test.js | 2 +- .../test/lib/credentials_test.js | 2 +- .../selenium-webdriver/test/lib/error_test.js | 2 +- .../selenium-webdriver/test/lib/http_test.js | 14 +++++------ .../selenium-webdriver/test/lib/input_test.js | 8 +++--- .../test/lib/logging_test.js | 2 +- .../test/lib/promise_test.js | 2 +- .../selenium-webdriver/test/lib/until_test.js | 10 ++++---- .../lib/virtualauthenticatoroptions_test.js | 6 ++--- .../test/lib/webdriver_test.js | 18 ++++++------- .../selenium-webdriver/test/logging_test.js | 2 +- .../selenium-webdriver/test/net/index_test.js | 2 +- .../test/net/portprober_test.js | 2 +- javascript/private/mocha_test.bzl | 25 ++++++++++++------- 19 files changed, 67 insertions(+), 73 deletions(-) diff --git a/.github/workflows/ci-javascript.yml b/.github/workflows/ci-javascript.yml index 94b1f4777bb02..732696666d2fd 100644 --- a/.github/workflows/ci-javascript.yml +++ b/.github/workflows/ci-javascript.yml @@ -13,18 +13,9 @@ jobs: cache-key: javascript-build run: bazel build //javascript/node/selenium-webdriver:selenium-webdriver - small-tests: - name: Small Tests - needs: build - uses: ./.github/workflows/bazel.yml - with: - name: Small Tests - cache-key: javascript-small-tests - run: bazel test //javascript/node/selenium-webdriver:small-tests - browser-tests: name: Browser Tests - needs: small-tests + needs: build uses: ./.github/workflows/bazel.yml strategy: fail-fast: false diff --git a/javascript/node/selenium-webdriver/BUILD.bazel b/javascript/node/selenium-webdriver/BUILD.bazel index da4b876134347..d23855820173b 100644 --- a/javascript/node/selenium-webdriver/BUILD.bazel +++ b/javascript/node/selenium-webdriver/BUILD.bazel @@ -38,6 +38,11 @@ js_library( "common/*.js", "bidi/*.js", ]), + deps = [ + ":node_modules/jszip", + ":node_modules/tmp", + ":node_modules/ws", + ], ) npm_package( @@ -117,27 +122,18 @@ js_library( mocha_test( name = "small-tests", size = "small", + args = ["./**/*test.js"], chdir = package_name(), data = [ ":node_modules/@bazel/runfiles", - ":node_modules/jszip", ":node_modules/mocha", ":node_modules/mocha-junit-reporter", ":node_modules/sinon", - ":node_modules/tmp", - ":node_modules/ws", ":small-test-srcs", ":test-data", "//:node_modules/selenium-webdriver", "//common/extensions:js-lib", "//common/src/web:js-lib", - "//javascript/node/selenium-webdriver/lib/atoms:find-elements", - "//javascript/node/selenium-webdriver/lib/atoms:get_attribute", - "//javascript/node/selenium-webdriver/lib/atoms:is_displayed", - "//javascript/node/selenium-webdriver/lib/atoms:mutation-listener", - ], - tags = [ - "skip-remote", ], ) diff --git a/javascript/node/selenium-webdriver/test/driver_factory.js b/javascript/node/selenium-webdriver/test/driver_factory.js index 14c3d606a7a9c..739a916ca3b66 100644 --- a/javascript/node/selenium-webdriver/test/driver_factory.js +++ b/javascript/node/selenium-webdriver/test/driver_factory.js @@ -19,10 +19,10 @@ const fs = require('node:fs') const os = require('node:os') const path = require('node:path') -const { Browser } = require('../index') -const { Environment } = require('../testing') -const chrome = require('../chrome') -const firefox = require('../firefox') +const { Browser } = require('selenium-webdriver/index') +const { Environment } = require('selenium-webdriver/testing') +const chrome = require('selenium-webdriver/chrome') +const firefox = require('selenium-webdriver/firefox') const { runfiles } = require('@bazel/runfiles') function GetBrowserForTests() { diff --git a/javascript/node/selenium-webdriver/test/io/io_test.js b/javascript/node/selenium-webdriver/test/io/io_test.js index 4b0f18d34550f..d8e2866e15e1f 100644 --- a/javascript/node/selenium-webdriver/test/io/io_test.js +++ b/javascript/node/selenium-webdriver/test/io/io_test.js @@ -21,7 +21,7 @@ const assert = require('node:assert'), fs = require('node:fs'), path = require('node:path') -const io = require('../../io') +const io = require('selenium-webdriver/io') describe('io', function () { describe('copy', function () { diff --git a/javascript/node/selenium-webdriver/test/io/zip_test.js b/javascript/node/selenium-webdriver/test/io/zip_test.js index 5ba71e470c1b9..7401dc0138d87 100644 --- a/javascript/node/selenium-webdriver/test/io/zip_test.js +++ b/javascript/node/selenium-webdriver/test/io/zip_test.js @@ -21,9 +21,9 @@ const assert = require('node:assert') const fs = require('node:fs') const path = require('node:path') -const io = require('../../io') -const zip = require('../../io/zip') -const { InvalidArgumentError } = require('../../lib/error') +const io = require('selenium-webdriver/io') +const zip = require('selenium-webdriver/io/zip') +const { InvalidArgumentError } = require('selenium-webdriver/lib/error') const { locate } = require('../../lib/test/resources') const XPI_PATH = locate('common/extensions/webextensions-selenium-example.xpi') diff --git a/javascript/node/selenium-webdriver/test/lib/by_test.js b/javascript/node/selenium-webdriver/test/lib/by_test.js index ef861ab022958..c1ca751cc6c44 100644 --- a/javascript/node/selenium-webdriver/test/lib/by_test.js +++ b/javascript/node/selenium-webdriver/test/lib/by_test.js @@ -18,7 +18,7 @@ 'use strict' const assert = require('node:assert') -const by = require('../../lib/by') +const by = require('selenium-webdriver/lib/by') describe('by', function () { describe('By', function () { diff --git a/javascript/node/selenium-webdriver/test/lib/credentials_test.js b/javascript/node/selenium-webdriver/test/lib/credentials_test.js index 358605dfa5bad..bab48a666a44e 100644 --- a/javascript/node/selenium-webdriver/test/lib/credentials_test.js +++ b/javascript/node/selenium-webdriver/test/lib/credentials_test.js @@ -18,7 +18,7 @@ 'use strict' const assert = require('node:assert') -const virtualAuthenticatorCredential = require('../../lib/virtual_authenticator').Credential +const virtualAuthenticatorCredential = require('selenium-webdriver/lib/virtual_authenticator').Credential describe('Credentials', function () { const BASE64_ENCODED_PK = `MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDbBOu5Lhs4vpowbCnmCyLUpIE7JM9sm9QXzye2G+jr+Kr diff --git a/javascript/node/selenium-webdriver/test/lib/error_test.js b/javascript/node/selenium-webdriver/test/lib/error_test.js index 612f348b1c4ce..a18f5537026c4 100644 --- a/javascript/node/selenium-webdriver/test/lib/error_test.js +++ b/javascript/node/selenium-webdriver/test/lib/error_test.js @@ -19,7 +19,7 @@ describe('error', function () { let assert = require('node:assert') - let error = require('../../lib/error') + let error = require('selenium-webdriver/lib/error') describe('encodeError', function () { describe('defaults to an unknown error', function () { diff --git a/javascript/node/selenium-webdriver/test/lib/http_test.js b/javascript/node/selenium-webdriver/test/lib/http_test.js index da7855e94ef20..cf6f1a514e52b 100644 --- a/javascript/node/selenium-webdriver/test/lib/http_test.js +++ b/javascript/node/selenium-webdriver/test/lib/http_test.js @@ -20,13 +20,13 @@ const assert = require('node:assert'), sinon = require('sinon') -const Capabilities = require('../../lib/capabilities').Capabilities, - Command = require('../../lib/command').Command, - CommandName = require('../../lib/command').Name, - error = require('../../lib/error'), - http = require('../../lib/http'), - Session = require('../../lib/session').Session, - WebElement = require('../../lib/webdriver').WebElement +const Capabilities = require('selenium-webdriver/lib/capabilities').Capabilities, + Command = require('selenium-webdriver/lib/command').Command, + CommandName = require('selenium-webdriver/lib/command').Name, + error = require('selenium-webdriver/lib/error'), + http = require('selenium-webdriver/lib/http'), + Session = require('selenium-webdriver/lib/session').Session, + WebElement = require('selenium-webdriver/lib/webdriver').WebElement describe('http', function () { describe('buildPath', function () { diff --git a/javascript/node/selenium-webdriver/test/lib/input_test.js b/javascript/node/selenium-webdriver/test/lib/input_test.js index b71a5343aff45..640cbdebfca28 100644 --- a/javascript/node/selenium-webdriver/test/lib/input_test.js +++ b/javascript/node/selenium-webdriver/test/lib/input_test.js @@ -18,10 +18,10 @@ 'use strict' const assert = require('node:assert') -const command = require('../../lib/command') -const error = require('../../lib/error') -const input = require('../../lib/input') -const { WebElement } = require('../../lib/webdriver') +const command = require('selenium-webdriver/lib/command') +const error = require('selenium-webdriver/lib/error') +const input = require('selenium-webdriver/lib/input') +const { WebElement } = require('selenium-webdriver/lib/webdriver') describe('input.Actions', function () { class StubExecutor { diff --git a/javascript/node/selenium-webdriver/test/lib/logging_test.js b/javascript/node/selenium-webdriver/test/lib/logging_test.js index d7ce7eb0effbf..5fe885b62defc 100644 --- a/javascript/node/selenium-webdriver/test/lib/logging_test.js +++ b/javascript/node/selenium-webdriver/test/lib/logging_test.js @@ -19,7 +19,7 @@ const assert = require('node:assert') const sinon = require('sinon') -const logging = require('../../lib/logging') +const logging = require('selenium-webdriver/lib/logging') describe('logging', function () { let mgr, root, clock diff --git a/javascript/node/selenium-webdriver/test/lib/promise_test.js b/javascript/node/selenium-webdriver/test/lib/promise_test.js index 03e958894c60c..f4d1222ba0f8a 100644 --- a/javascript/node/selenium-webdriver/test/lib/promise_test.js +++ b/javascript/node/selenium-webdriver/test/lib/promise_test.js @@ -20,7 +20,7 @@ const assert = require('node:assert') const testutil = require('./testutil') -const promise = require('../../lib/promise') +const promise = require('selenium-webdriver/lib/promise') // Aliases for readability. const NativePromise = Promise diff --git a/javascript/node/selenium-webdriver/test/lib/until_test.js b/javascript/node/selenium-webdriver/test/lib/until_test.js index 5f73d3a3fd0d5..93f0743b458aa 100644 --- a/javascript/node/selenium-webdriver/test/lib/until_test.js +++ b/javascript/node/selenium-webdriver/test/lib/until_test.js @@ -19,11 +19,11 @@ const assert = require('node:assert') -const By = require('../../lib/by').By -const CommandName = require('../../lib/command').Name -const error = require('../../lib/error') -const until = require('../../lib/until') -const webdriver = require('../../lib/webdriver') +const By = require('selenium-webdriver/lib/by').By +const CommandName = require('selenium-webdriver/lib/command').Name +const error = require('selenium-webdriver/lib/error') +const until = require('selenium-webdriver/lib/until') +const webdriver = require('selenium-webdriver/lib/webdriver') const WebElement = webdriver.WebElement describe('until', function () { diff --git a/javascript/node/selenium-webdriver/test/lib/virtualauthenticatoroptions_test.js b/javascript/node/selenium-webdriver/test/lib/virtualauthenticatoroptions_test.js index f5fa4b445d0c2..0480a7be37a7c 100644 --- a/javascript/node/selenium-webdriver/test/lib/virtualauthenticatoroptions_test.js +++ b/javascript/node/selenium-webdriver/test/lib/virtualauthenticatoroptions_test.js @@ -18,9 +18,9 @@ 'use strict' const assert = require('node:assert') -const virtualAuthenticatorOptions = require('../../lib/virtual_authenticator').VirtualAuthenticatorOptions -const Transport = require('../../lib/virtual_authenticator').Transport -const Protocol = require('../../lib/virtual_authenticator').Protocol +const virtualAuthenticatorOptions = require('selenium-webdriver/lib/virtual_authenticator').VirtualAuthenticatorOptions +const Transport = require('selenium-webdriver/lib/virtual_authenticator').Transport +const Protocol = require('selenium-webdriver/lib/virtual_authenticator').Protocol let options diff --git a/javascript/node/selenium-webdriver/test/lib/webdriver_test.js b/javascript/node/selenium-webdriver/test/lib/webdriver_test.js index 2ac37691d8fa0..f850c3e4fcac8 100644 --- a/javascript/node/selenium-webdriver/test/lib/webdriver_test.js +++ b/javascript/node/selenium-webdriver/test/lib/webdriver_test.js @@ -19,15 +19,15 @@ const { StubError, assertIsInstance, assertIsStubError, throwStubError } = require('./testutil') -const error = require('../../lib/error') -const logging = require('../../lib/logging') -const promise = require('../../lib/promise') -const until = require('../../lib/until') -const { Alert, AlertPromise, WebDriver, WebElement, WebElementPromise } = require('../../lib/webdriver') -const { By } = require('../../lib/by') -const { Capabilities } = require('../../lib/capabilities') -const { Name } = require('../../lib/command') -const { Session } = require('../../lib/session') +const error = require('selenium-webdriver/lib/error') +const logging = require('selenium-webdriver/lib/logging') +const promise = require('selenium-webdriver/lib/promise') +const until = require('selenium-webdriver/lib/until') +const { Alert, AlertPromise, WebDriver, WebElement, WebElementPromise } = require('selenium-webdriver/lib/webdriver') +const { By } = require('selenium-webdriver/lib/by') +const { Capabilities } = require('selenium-webdriver/lib/capabilities') +const { Name } = require('selenium-webdriver/lib/command') +const { Session } = require('selenium-webdriver/lib/session') const assert = require('node:assert') const CName = Name diff --git a/javascript/node/selenium-webdriver/test/logging_test.js b/javascript/node/selenium-webdriver/test/logging_test.js index dfbdf0f71b715..51d320718ffca 100644 --- a/javascript/node/selenium-webdriver/test/logging_test.js +++ b/javascript/node/selenium-webdriver/test/logging_test.js @@ -19,7 +19,7 @@ const assert = require('node:assert') const test = require('../lib/test') -const { Browser, logging } = require('..') +const { Browser, logging } = require('selenium-webdriver') test.suite(function (env) { // Logging API is not supported in IE. diff --git a/javascript/node/selenium-webdriver/test/net/index_test.js b/javascript/node/selenium-webdriver/test/net/index_test.js index c9c1f7e3220d4..664e7e33c3144 100644 --- a/javascript/node/selenium-webdriver/test/net/index_test.js +++ b/javascript/node/selenium-webdriver/test/net/index_test.js @@ -18,7 +18,7 @@ 'use strict' const assert = require('node:assert') -const net = require('../../net') +const net = require('selenium-webdriver/net') describe('net.splitHostAndPort', function () { it('hostname with no port', function () { diff --git a/javascript/node/selenium-webdriver/test/net/portprober_test.js b/javascript/node/selenium-webdriver/test/net/portprober_test.js index 86b6a1c04f99f..5705636d8d16a 100644 --- a/javascript/node/selenium-webdriver/test/net/portprober_test.js +++ b/javascript/node/selenium-webdriver/test/net/portprober_test.js @@ -19,7 +19,7 @@ const assert = require('node:assert') const net = require('node:net') -const portprober = require('../../net/portprober') +const portprober = require('selenium-webdriver/net/portprober') const host = '127.0.0.1' describe('isFree', function () { diff --git a/javascript/private/mocha_test.bzl b/javascript/private/mocha_test.bzl index 39a459c0733b9..a3f8bce252ea1 100644 --- a/javascript/private/mocha_test.bzl +++ b/javascript/private/mocha_test.bzl @@ -1,16 +1,23 @@ load("@npm//javascript/node/selenium-webdriver:mocha/package_json.bzl", mocha_bin = "bin") -def mocha_test(name, deps = [], args = [], data = [], env = {}, **kwargs): - env = dict(env, **{ - # Add environment variable so that mocha writes its test xml - # to the location Bazel expects. - "MOCHA_FILE": "$$XML_OUTPUT_FILE", - }) +_TIMEOUTS = { + "small": "60000", + "medium": "300000", + "large": "900000", +} +def mocha_test(name, args = [], env = {}, size = None, **kwargs): mocha_bin.mocha_test( name = name, - args = args, - data = data, - env = env, + size = size, + args = args + [ + "--timeout", + _TIMEOUTS.get(size, "60000"), + ], + env = env | { + # Add environment variable so that mocha writes its test xml + # to the location Bazel expects. + "MOCHA_FILE": "$$XML_OUTPUT_FILE", + }, **kwargs ) From 2c45d7c5217e635bd6999162a428c7c303ddd29e Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Wed, 12 Jun 2024 14:43:21 +0200 Subject: [PATCH 064/176] [rust] Improve logic to locate wmic.exe in Windows --- .bazelrc | 1 + rust/src/config.rs | 4 ++-- rust/src/lib.rs | 27 +++++++++++++++++++++++---- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/.bazelrc b/.bazelrc index 923ebaf7b50a0..d1b01120e5d4e 100644 --- a/.bazelrc +++ b/.bazelrc @@ -93,6 +93,7 @@ test --test_env=JRUBY_OPTS="--dev" test:windows --test_env=LOCALAPPDATA test:windows --test_env=PROGRAMFILES="C:\\Program Files" test:windows --test_env=PROGRAMFILES(X86)="C:\\Program Files (x86)" +test:windows --test_env=SYSTEMROOT="C:\\Windows" test --test_timeout=1800 diff --git a/rust/src/config.rs b/rust/src/config.rs index a3a2699bee6f1..b07d879da907a 100644 --- a/rust/src/config.rs +++ b/rust/src/config.rs @@ -18,7 +18,7 @@ use crate::config::OS::{LINUX, MACOS, WINDOWS}; use crate::shell::run_shell_command_by_os; use crate::{ - default_cache_folder, format_one_arg, path_to_string, Command, REQUEST_TIMEOUT_SEC, + default_cache_folder, format_one_arg, get_wmic, path_to_string, Command, REQUEST_TIMEOUT_SEC, UNAME_COMMAND, }; use crate::{ARCH_AMD64, ARCH_ARM64, ARCH_X86, TTL_SEC, WMIC_COMMAND_OS}; @@ -66,7 +66,7 @@ impl ManagerConfig { let self_os = OS; let self_arch = if WINDOWS.is(self_os) { - let wmic_command = Command::new_single(WMIC_COMMAND_OS.to_string()); + let wmic_command = Command::new_single(format_one_arg(WMIC_COMMAND_OS, &get_wmic())); let wmic_output = run_shell_command_by_os(self_os, wmic_command).unwrap_or_default(); if wmic_output.contains("32") { ARCH_X86.to_string() diff --git a/rust/src/lib.rs b/rust/src/lib.rs index b01a7e4822618..8356737273d61 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -74,8 +74,10 @@ pub const DEV: &str = "dev"; pub const CANARY: &str = "canary"; pub const NIGHTLY: &str = "nightly"; pub const ESR: &str = "esr"; -pub const WMIC_COMMAND: &str = r#"wmic datafile where name='{}' get Version /value"#; -pub const WMIC_COMMAND_OS: &str = r#"wmic os get osarchitecture"#; +pub const WMIC: &str = "wmic"; +pub const WMIC_DEFAULT_PATH: &str = r#"{}\System32\Wbem\WMIC.exe"#; +pub const WMIC_COMMAND: &str = r#"{} datafile where name='{}' get Version /value"#; +pub const WMIC_COMMAND_OS: &str = r#"{} os get osarchitecture"#; pub const REG_VERSION_ARG: &str = "version"; pub const REG_CURRENT_VERSION_ARG: &str = "CurrentVersion"; pub const REG_PV_ARG: &str = "pv"; @@ -93,6 +95,7 @@ pub const SINGLE_QUOTE: &str = "'"; pub const ENV_PROGRAM_FILES: &str = "PROGRAMFILES"; pub const ENV_PROGRAM_FILES_X86: &str = "PROGRAMFILES(X86)"; pub const ENV_LOCALAPPDATA: &str = "LOCALAPPDATA"; +pub const ENV_SYSTEMROOT: &str = "SYSTEMROOT"; pub const ENV_X86: &str = " (x86)"; pub const ARCH_X86: &str = "x86"; pub const ARCH_AMD64: &str = "amd64"; @@ -1073,8 +1076,11 @@ pub trait SeleniumManager { if WINDOWS.is(self.get_os()) { if !escaped_browser_path.is_empty() { - let wmic_command = - Command::new_single(format_one_arg(WMIC_COMMAND, &escaped_browser_path)); + let wmic_command = Command::new_single(format_two_args( + WMIC_COMMAND, + &get_wmic(), + &escaped_browser_path, + )); commands.push(wmic_command); } if !self.is_browser_version_unstable() { @@ -1549,6 +1555,19 @@ pub fn format_three_args(string: &str, arg1: &str, arg2: &str, arg3: &str) -> St .replacen("{}", arg3, 1) } +pub fn get_wmic() -> String { + let system_root = env::var(ENV_SYSTEMROOT).unwrap_or_default(); + let wmic_default_path = format_one_arg(WMIC_DEFAULT_PATH, &system_root); + let wmic_path = Path::new(&wmic_default_path); + if !wmic_path.exists() { + return match which(WMIC) { + Ok(path) => path_to_string(&path), + Err(_) => WMIC.to_string(), + }; + } + path_to_string(wmic_path) +} + // ---------------------------------------------------------- // Private functions // ---------------------------------------------------------- From c7f8095fb409776cc0be26bed7649f9efa109583 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 12 Jun 2024 13:38:45 -0500 Subject: [PATCH 065/176] [build] fix rake task arguments to allow variable number of values want to allow passing along an arbitrary number of task arguments to bazel execution code was written as if the argument could be an array, this worked when calling #invoke, but not when calling from command line --- Rakefile | 110 +++++++++++++++++++++++++++---------------------------- 1 file changed, 54 insertions(+), 56 deletions(-) diff --git a/Rakefile b/Rakefile index 27f472f359b7c..221d5416bd71d 100644 --- a/Rakefile +++ b/Rakefile @@ -336,7 +336,7 @@ task ios_driver: [ # ./go java:package['--config=release'] desc 'Create stamped zipped assets for Java for uploading to GitHub' task :'java-release-zip' do - Rake::Task['java:package'].invoke(['--stamp']) + Rake::Task['java:package'].invoke('--stamp') end task 'release-java': %i[java-release-zip publish-maven] @@ -478,8 +478,8 @@ namespace :node do end desc 'Build Node npm package' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :build do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//javascript/node/selenium-webdriver') end @@ -488,8 +488,8 @@ namespace :node do end desc 'Release Node npm package' - task :release, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :release do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['node:version'].invoke('nightly') if nightly @@ -545,15 +545,15 @@ def python_version end namespace :py do desc 'Build Python wheel and sdist with optional arguments' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :build do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//py:selenium-wheel') Bazel.execute('build', args, '//py:selenium-sdist') end desc 'Release Python wheel and sdist to pypi' - task :release, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :release, do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['py:version'].invoke('nightly') if nightly @@ -705,15 +705,13 @@ def ruby_version end namespace :rb do desc 'Generate Ruby gems' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) - puts "args #{args}" - webdriver = !args.delete('devtools') - puts "wd #{webdriver}" - devtools = !args.delete('webdriver') - puts "cdp #{devtools}" - Bazel.execute('build', args, '//rb:selenium-webdriver') if webdriver - Bazel.execute('build', args, '//rb:selenium-devtools') if devtools + task :build do |_task, arguments| + args = arguments.to_a.compact + webdriver = args.delete('webdriver') + devtools = args.delete('devtools') + + Bazel.execute('build', args, '//rb:selenium-webdriver') if (webdriver || !devtools) + Bazel.execute('build', args, '//rb:selenium-devtools') if (devtools || !webdriver) end desc 'Update generated Ruby files for local development' @@ -724,8 +722,8 @@ namespace :rb do end desc 'Push Ruby gems to rubygems' - task :release, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :release do |_task, arguments| + args = arguments.to_a.compact nightly = args.delete('nightly') wd_target = nightly ? '//rb:selenium-webdriver-release' : '//rb:selenium-webdriver-release-nightly' cdp_target = nightly ? '//rb:selenium-devtools-release' : '//rb:selenium-devtools-release-nightly' @@ -767,8 +765,8 @@ namespace :rb do end desc 'Update Ruby Syntax' - task :lint, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :lint do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('run', args, '//rb:lint') end end @@ -780,15 +778,15 @@ def dotnet_version end namespace :dotnet do desc 'Build nupkg files' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :build do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//dotnet:all') end desc 'Package .NET bindings into zipped assets and stage for release' - task :package, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) - Rake::Task['dotnet:build'].invoke(args) + task :package do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + Rake::Task['dotnet:build'].invoke(*args) mkdir_p 'build/dist' FileUtils.rm_f(Dir.glob('build/dist/*dotnet*')) @@ -799,12 +797,12 @@ namespace :dotnet do end desc 'Upload nupkg files to Nuget' - task :release, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :release do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['dotnet:version'].invoke('nightly') if nightly - Rake::Task['dotnet:package'].invoke(args) + Rake::Task['dotnet:package'].invoke(*args) release_version = dotnet_version api_key = ENV.fetch('NUGET_API_KEY', nil) @@ -879,20 +877,20 @@ end namespace :java do desc 'Build Java Client Jars' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :build do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-combined') end desc 'Build Grid Jar' - task :grid, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :grid do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:grid') end desc 'Package Java bindings and grid into releasable packages and stage for release' - task :package, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) + task :package do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:server-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid') @@ -912,9 +910,9 @@ namespace :java do end desc 'Deploy all jars to Maven' - task :release, [:args] do |_task, arguments| - args = Array(arguments[:args] || ['--stamp']) - Rake::Task['java:package'].invoke(args) + task :release do |_task, arguments| + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + Rake::Task['java:package'].invoke(*args) Rake::Task['publish-maven'].invoke end @@ -987,8 +985,8 @@ def rust_version end namespace :rust do desc 'Build Selenium Manager' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] + task :build do |_task, arguments| + args = arguments.to_a.compact Bazel.execute('build', args, '//rust:selenium-manager') end @@ -1055,28 +1053,28 @@ namespace :all do end desc 'Build all artifacts for all language bindings' - task :build, [:args] do |_task, arguments| - args = Array(arguments[:args]) || [] - Rake::Task['java:build'].invoke(args) - Rake::Task['py:build'].invoke(args) - Rake::Task['rb:build'].invoke(args) - Rake::Task['dotnet:build'].invoke(args) - Rake::Task['node:build'].invoke(args) + task :build do |_task, arguments| + args = arguments.to_a.compact + Rake::Task['java:build'].invoke(*args) + Rake::Task['py:build'].invoke(*args) + Rake::Task['rb:build'].invoke(*args) + Rake::Task['dotnet:build'].invoke(*args) + Rake::Task['node:build'].invoke(*args) end desc 'Release all artifacts for all language bindings' - task :release, [:args] do |_task, arguments| + task :release do |_task, arguments| Rake::Task['clean'].invoke tag = @git.add_tag("selenium-#{java_version}") @git.push('origin', tag.name) - args = Array(arguments[:args] || ['--stamp']) - Rake::Task['java:release'].invoke(args) - Rake::Task['py:release'].invoke(args) - Rake::Task['rb:release'].invoke(args) - Rake::Task['dotnet:release'].invoke(args) - Rake::Task['node:release'].invoke(args) - Rake::Task['create_release_notes'].invoke(args) + args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + Rake::Task['java:release'].invoke(*args) + Rake::Task['py:release'].invoke(*args) + Rake::Task['rb:release'].invoke(*args) + Rake::Task['dotnet:release'].invoke(*args) + Rake::Task['node:release'].invoke(*args) + Rake::Task['create_release_notes'].invoke Rake::Task['all:docs'].invoke Rake::Task['all:version'].invoke('nightly') From 89dfe2d3f9cd227bf5ecd8dda81f4bc5aaa4bd45 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 12 Jun 2024 13:47:52 -0500 Subject: [PATCH 066/176] [py] dataclasses dependency not needed for python 3.8+ --- py/requirements.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/py/requirements.txt b/py/requirements.txt index 3d8cf9e2b6baf..a7a909703056d 100644 --- a/py/requirements.txt +++ b/py/requirements.txt @@ -3,7 +3,6 @@ attrs==23.2.0 certifi==2023.11.17 cffi==1.16.0 cryptography==42.0.7 -dataclasses==0.8 debugpy==1.8.1 h11==0.14.0 idna==3.7 From a51ddee3b10e4e0708f6f936668420bfccc72275 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 12 Jun 2024 13:52:59 -0500 Subject: [PATCH 067/176] [py] allow using enable_bidi property on options class enable_bidi is a boolean property that defaults to False and can be set to True by user web_socket_url is a string property that defaults to None and is set by the remote response --- py/selenium/webdriver/common/options.py | 57 ++++++++++++++++++- .../webdriver/common/common_options_tests.py | 20 +++++++ 2 files changed, 76 insertions(+), 1 deletion(-) diff --git a/py/selenium/webdriver/common/options.py b/py/selenium/webdriver/common/options.py index 2f1579115dcce..3856a58a366c2 100644 --- a/py/selenium/webdriver/common/options.py +++ b/py/selenium/webdriver/common/options.py @@ -44,12 +44,23 @@ def __init__(self, name): self.name = name def __get__(self, obj, cls): + if self.name == "enableBidi": + # whether BiDi is or will be enabled + value = obj._caps.get("webSocketUrl") + return value is True or isinstance(value, str) + if self.name == "webSocketUrl": + # Return socket url or None if not created yet + value = obj._caps.get(self.name) + return None if not isinstance(value, str) else value if self.name in ("acceptInsecureCerts", "strictFileInteractability", "setWindowRect", "se:downloadsEnabled"): return obj._caps.get(self.name, False) return obj._caps.get(self.name) def __set__(self, obj, value): - obj.set_capability(self.name, value) + if self.name == "enableBidi": + obj.set_capability("webSocketUrl", value) + else: + obj.set_capability(self.name, value) class _PageLoadStrategyDescriptor: @@ -249,6 +260,50 @@ class BaseOptions(metaclass=ABCMeta): - `None` """ + enable_bidi = _BaseOptionsDescriptor("enableBidi") + """Gets and Set whether the session has WebDriverBiDi enabled. + + Usage + ----- + - Get + - `self.enable_bidi` + - Set + - `self.enable_bidi` = `value` + + Parameters + ---------- + `value`: `bool` + + Returns + ------- + - Get + - `bool` + - Set + - `None` + """ + + web_socket_url = _BaseOptionsDescriptor("webSocketUrl") + """Gets and Set whether the session accepts insecure certificates. + + Usage + ----- + - Get + - `self.web_socket_url` + - Set + - `self.web_socket_url` = `value` + + Parameters + ---------- + `value`: `str` + + Returns + ------- + - Get + - `str` or `None` + - Set + - `None` + """ + page_load_strategy = _PageLoadStrategyDescriptor("pageLoadStrategy") """:Gets and Sets page load strategy, the default is "normal". diff --git a/py/test/unit/selenium/webdriver/common/common_options_tests.py b/py/test/unit/selenium/webdriver/common/common_options_tests.py index 5d6efdcbdc1eb..fcb6303fd7298 100644 --- a/py/test/unit/selenium/webdriver/common/common_options_tests.py +++ b/py/test/unit/selenium/webdriver/common/common_options_tests.py @@ -75,3 +75,23 @@ def test_add_proxy(): assert options.proxy == proxy assert caps.get("proxy") == proxy.to_capabilities() + + +def test_default_bidi(): + options = ArgOptions() + assert options.enable_bidi is False + assert options.web_socket_url is None + + +def test_enable_bidi(): + options = ArgOptions() + options.enable_bidi = True + assert options.enable_bidi is True + assert options.web_socket_url is None + + +def test_set_socket_url(): + options = ArgOptions() + options.web_socket_url = 'socket_url' + assert options.enable_bidi is True + assert options.web_socket_url is 'socket_url' From 59a25c7bd589c6a58f3dd71394d89c3f71f2accb Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 13 Jun 2024 10:29:12 +0530 Subject: [PATCH 068/176] [bidi][js] Add callback handlers for logging APIs (#14120) --- .../selenium-webdriver/bidi/logInspector.js | 140 ++++++++++++++---- .../test/bidi/log_inspector_test.js | 132 +++++++++++++++++ 2 files changed, 242 insertions(+), 30 deletions(-) diff --git a/javascript/node/selenium-webdriver/bidi/logInspector.js b/javascript/node/selenium-webdriver/bidi/logInspector.js index 811fc4ce483a8..13f7a8c78dbbf 100644 --- a/javascript/node/selenium-webdriver/bidi/logInspector.js +++ b/javascript/node/selenium-webdriver/bidi/logInspector.js @@ -21,16 +21,31 @@ const { ConsoleLogEntry, JavascriptLogEntry, GenericLogEntry } = require('./logE const LOG = { TYPE_CONSOLE: 'console', TYPE_JS_LOGS: 'javascript', + TYPE_JS_EXCEPTION: 'javascriptException', + TYPE_LOGS: 'logs', + TYPE_CONSOLE_FILTER: 'console_filter', + TYPE_JS_LOGS_FILTER: 'javascript_filter', + TYPE_JS_EXCEPTION_FILTER: 'javascriptException_filter', + TYPE_LOGS_FILTER: 'logs_filter', } class LogInspector { bidi ws + #callbackId = 0 constructor(driver, browsingContextIds) { this._driver = driver this._browsingContextIds = browsingContextIds - this.listener = {} + this.listener = new Map() + this.listener.set(LOG.TYPE_CONSOLE, new Map()) + this.listener.set(LOG.TYPE_JS_LOGS, new Map()) + this.listener.set(LOG.TYPE_JS_EXCEPTION, new Map()) + this.listener.set(LOG.TYPE_LOGS, new Map()) + this.listener.set(LOG.TYPE_CONSOLE_FILTER, new Map()) + this.listener.set(LOG.TYPE_JS_LOGS_FILTER, new Map()) + this.listener.set(LOG.TYPE_JS_EXCEPTION_FILTER, new Map()) + this.listener.set(LOG.TYPE_LOGS_FILTER, new Map()) } /** @@ -42,12 +57,41 @@ class LogInspector { await this.bidi.subscribe('log.entryAdded', this._browsingContextIds) } - /** - * @param kind - */ - logListener(kind) { - if (!(kind in this.listener)) { - this.listener[kind] = [] + addCallback(eventType, callback) { + const id = ++this.#callbackId + + const eventCallbackMap = this.listener.get(eventType) + eventCallbackMap.set(id, callback) + return id + } + + removeCallback(id) { + for (const [, callbacks] of this.listener) { + if (callbacks.has(id)) { + callbacks.delete(id) + } + } + } + + invokeCallbacks(eventType, data) { + const callbacks = this.listener.get(eventType) + if (callbacks) { + for (const [, callback] of callbacks) { + callback(data) + } + } + } + + invokeCallbacksWithFilter(eventType, data, filterLevel) { + const callbacks = this.listener.get(eventType) + if (callbacks) { + for (const [, value] of callbacks) { + const callback = value.callback + const filter = value.filter + if (filterLevel === filter.getLevel()) { + callback(data) + } + } } } @@ -55,13 +99,21 @@ class LogInspector { * Listen to Console logs * @param callback * @param filterBy - * @returns {Promise} + * @returns {Promise} */ async onConsoleEntry(callback, filterBy = undefined) { if (filterBy !== undefined && !(filterBy instanceof FilterBy)) { throw Error(`Pass valid FilterBy object. Received: ${filterBy}`) } + let id + + if (filterBy !== undefined) { + id = this.addCallback(LOG.TYPE_CONSOLE_FILTER, { callback: callback, filter: filterBy }) + } else { + id = this.addCallback(LOG.TYPE_CONSOLE, callback) + } + this.ws = await this.bidi.socket this.ws.on('message', (event) => { @@ -81,27 +133,37 @@ class LogInspector { if (filterBy !== undefined) { if (params?.level === filterBy.getLevel()) { - callback(consoleEntry) + this.invokeCallbacksWithFilter(LOG.TYPE_CONSOLE_FILTER, consoleEntry, filterBy.getLevel()) } return } - callback(consoleEntry) + this.invokeCallbacks(LOG.TYPE_CONSOLE, consoleEntry) } }) + + return id } /** * Listen to JS logs * @param callback * @param filterBy - * @returns {Promise} + * @returns {Promise} */ async onJavascriptLog(callback, filterBy = undefined) { if (filterBy !== undefined && !(filterBy instanceof FilterBy)) { throw Error(`Pass valid FilterBy object. Received: ${filterBy}`) } + let id + + if (filterBy !== undefined) { + id = this.addCallback(LOG.TYPE_JS_LOGS_FILTER, { callback: callback, filter: filterBy }) + } else { + id = this.addCallback(LOG.TYPE_JS_LOGS, callback) + } + this.ws = await this.bidi.socket this.ws.on('message', (event) => { @@ -118,29 +180,26 @@ class LogInspector { if (filterBy !== undefined) { if (params?.level === filterBy.getLevel()) { - callback(jsEntry) + this.invokeCallbacksWithFilter(LOG.TYPE_JS_LOGS_FILTER, jsEntry, filterBy.getLevel()) } return } - callback(jsEntry) + this.invokeCallbacks(LOG.TYPE_JS_LOGS, jsEntry) } }) + + return id } /** * Listen to JS Exceptions * @param callback - * @returns {Promise} + * @returns {Promise} */ async onJavascriptException(callback) { + const id = this.addCallback(LOG.TYPE_JS_EXCEPTION, callback) this.ws = await this.bidi.socket - let enabled = LOG.TYPE_JS_EXCEPTION in this.listener || this.logListener(LOG.TYPE_JS_EXCEPTION) - this.listener[LOG.TYPE_JS_EXCEPTION].push(callback) - - if (enabled) { - return - } this.ws.on('message', (event) => { const { params } = JSON.parse(Buffer.from(event.toString())) @@ -153,24 +212,31 @@ class LogInspector { params.stackTrace, ) - this.listener[LOG.TYPE_JS_EXCEPTION].forEach((listener) => { - listener(jsErrorEntry) - }) + this.invokeCallbacks(LOG.TYPE_JS_EXCEPTION, jsErrorEntry) } }) + + return id } /** * Listen to any logs * @param callback * @param filterBy - * @returns {Promise} + * @returns {Promise} */ async onLog(callback, filterBy = undefined) { if (filterBy !== undefined && !(filterBy instanceof FilterBy)) { throw Error(`Pass valid FilterBy object. Received: ${filterBy}`) } + let id + if (filterBy !== undefined) { + id = this.addCallback(LOG.TYPE_LOGS_FILTER, { callback: callback, filter: filterBy }) + } else { + id = this.addCallback(LOG.TYPE_LOGS, callback) + } + this.ws = await this.bidi.socket this.ws.on('message', (event) => { @@ -191,7 +257,16 @@ class LogInspector { return } - callback(jsEntry) + if (filterBy !== undefined) { + if (params?.level === filterBy.getLevel()) { + { + this.invokeCallbacksWithFilter(LOG.TYPE_LOGS_FILTER, jsEntry, filterBy.getLevel()) + } + return + } + } + + this.invokeCallbacks(LOG.TYPE_LOGS, jsEntry) return } @@ -209,12 +284,12 @@ class LogInspector { if (filterBy !== undefined) { if (params?.level === filterBy.getLevel()) { - callback(consoleEntry) + this.invokeCallbacksWithFilter(LOG.TYPE_LOGS_FILTER, consoleEntry, filterBy.getLevel()) } return } - callback(consoleEntry) + this.invokeCallbacks(LOG.TYPE_LOGS, consoleEntry) return } @@ -229,14 +304,19 @@ class LogInspector { if (filterBy !== undefined) { if (params?.level === filterBy.getLevel()) { - callback(genericEntry) + { + this.invokeCallbacksWithFilter(LOG.TYPE_LOGS_FILTER, genericEntry, filterBy.getLevel()) + } + return } - return } - callback(genericEntry) + this.invokeCallbacks(LOG.TYPE_LOGS, genericEntry) + return } }) + + return id } /** diff --git a/javascript/node/selenium-webdriver/test/bidi/log_inspector_test.js b/javascript/node/selenium-webdriver/test/bidi/log_inspector_test.js index 601291fd16619..2790d4c09c27b 100644 --- a/javascript/node/selenium-webdriver/test/bidi/log_inspector_test.js +++ b/javascript/node/selenium-webdriver/test/bidi/log_inspector_test.js @@ -35,6 +35,10 @@ suite( await driver.quit() }) + function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)) + } + describe('Log Inspector', function () { it('can listen to console log', async function () { const inspector = await logInspector(driver) @@ -109,6 +113,41 @@ suite( await inspector.close() }) + it('can call multiple callbacks for console log', async function () { + let logEntry1 = null + let logEntry2 = null + let logEntry3 = null + let logEntry4 = null + const inspector = await logInspector(driver) + await inspector.onConsoleEntry(function (log) { + logEntry1 = log + }) + + await inspector.onConsoleEntry(function (log) { + logEntry2 = log + }) + + await inspector.onConsoleEntry(function (log) { + logEntry3 = log + }, filterBy.FilterBy.logLevel('info')) + + await inspector.onConsoleEntry(function (log) { + logEntry4 = log + }, filterBy.FilterBy.logLevel('error')) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'consoleLog' }).click() + + await delay(3000) + + assert.notEqual(logEntry1, null) + assert.notEqual(logEntry2, null) + assert.notEqual(logEntry3, null) + assert.equal(logEntry4, null) + + await inspector.close() + }) + it('can listen to javascript log', async function () { let logEntry = null const inspector = await logInspector(driver) @@ -155,6 +194,41 @@ suite( await inspector.close() }) + it('can call multiple callbacks for javascript log', async function () { + let logEntry1 = null + let logEntry2 = null + let logEntry3 = null + let logEntry4 = null + const inspector = await logInspector(driver) + await inspector.onJavascriptLog(function (log) { + logEntry1 = log + }) + + await inspector.onJavascriptLog(function (log) { + logEntry2 = log + }) + + await inspector.onJavascriptLog(function (log) { + logEntry3 = log + }, filterBy.FilterBy.logLevel('error')) + + await inspector.onJavascriptLog(function (log) { + logEntry4 = log + }, filterBy.FilterBy.logLevel('info')) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'jsException' }).click() + + await delay(3000) + + assert.notEqual(logEntry1, null) + assert.notEqual(logEntry2, null) + assert.notEqual(logEntry3, null) + assert.equal(logEntry4, null) + + await inspector.close() + }) + it('can listen to javascript error log', async function () { let logEntry = null const inspector = await logInspector(driver) @@ -240,6 +314,64 @@ suite( await inspector.close() }) + + it('can call multiple callbacks for any log', async function () { + let logEntry1 = null + let logEntry2 = null + let logEntry3 = null + let logEntry4 = null + const inspector = await logInspector(driver) + await inspector.onLog(function (log) { + logEntry1 = log + }) + + await inspector.onLog(function (log) { + logEntry2 = log + }) + + await inspector.onLog(function (log) { + logEntry3 = log + }, filterBy.FilterBy.logLevel('error')) + + await inspector.onLog(function (log) { + logEntry4 = log + }, filterBy.FilterBy.logLevel('info')) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'jsException' }).click() + + await delay(3000) + + assert.notEqual(logEntry1, null) + assert.notEqual(logEntry2, null) + assert.notEqual(logEntry3, null) + assert.equal(logEntry4, null) + + await inspector.close() + }) + + it('can call multiple callbacks for any log with filter', async function () { + let logEntry1 = null + let logEntry2 = null + const inspector = await logInspector(driver) + await inspector.onLog(function (log) { + logEntry1 = log + }, filterBy.FilterBy.logLevel('error')) + + await inspector.onLog(function (log) { + logEntry2 = log + }, filterBy.FilterBy.logLevel('error')) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'jsException' }).click() + + await delay(3000) + + assert.notEqual(logEntry1, null) + assert.notEqual(logEntry2, null) + + await inspector.close() + }) }) }, { browsers: [Browser.FIREFOX, Browser.CHROME, Browser.EDGE] }, From 29290aa1f167d1c3c011f4f3541e469f8a8b84d6 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 09:40:41 +0200 Subject: [PATCH 069/176] Revert "[rust] Improve logic to locate wmic.exe in Windows" This reverts commit 2c45d7c5217e635bd6999162a428c7c303ddd29e. --- .bazelrc | 1 - rust/src/config.rs | 4 ++-- rust/src/lib.rs | 27 ++++----------------------- 3 files changed, 6 insertions(+), 26 deletions(-) diff --git a/.bazelrc b/.bazelrc index d1b01120e5d4e..923ebaf7b50a0 100644 --- a/.bazelrc +++ b/.bazelrc @@ -93,7 +93,6 @@ test --test_env=JRUBY_OPTS="--dev" test:windows --test_env=LOCALAPPDATA test:windows --test_env=PROGRAMFILES="C:\\Program Files" test:windows --test_env=PROGRAMFILES(X86)="C:\\Program Files (x86)" -test:windows --test_env=SYSTEMROOT="C:\\Windows" test --test_timeout=1800 diff --git a/rust/src/config.rs b/rust/src/config.rs index b07d879da907a..a3a2699bee6f1 100644 --- a/rust/src/config.rs +++ b/rust/src/config.rs @@ -18,7 +18,7 @@ use crate::config::OS::{LINUX, MACOS, WINDOWS}; use crate::shell::run_shell_command_by_os; use crate::{ - default_cache_folder, format_one_arg, get_wmic, path_to_string, Command, REQUEST_TIMEOUT_SEC, + default_cache_folder, format_one_arg, path_to_string, Command, REQUEST_TIMEOUT_SEC, UNAME_COMMAND, }; use crate::{ARCH_AMD64, ARCH_ARM64, ARCH_X86, TTL_SEC, WMIC_COMMAND_OS}; @@ -66,7 +66,7 @@ impl ManagerConfig { let self_os = OS; let self_arch = if WINDOWS.is(self_os) { - let wmic_command = Command::new_single(format_one_arg(WMIC_COMMAND_OS, &get_wmic())); + let wmic_command = Command::new_single(WMIC_COMMAND_OS.to_string()); let wmic_output = run_shell_command_by_os(self_os, wmic_command).unwrap_or_default(); if wmic_output.contains("32") { ARCH_X86.to_string() diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 8356737273d61..b01a7e4822618 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -74,10 +74,8 @@ pub const DEV: &str = "dev"; pub const CANARY: &str = "canary"; pub const NIGHTLY: &str = "nightly"; pub const ESR: &str = "esr"; -pub const WMIC: &str = "wmic"; -pub const WMIC_DEFAULT_PATH: &str = r#"{}\System32\Wbem\WMIC.exe"#; -pub const WMIC_COMMAND: &str = r#"{} datafile where name='{}' get Version /value"#; -pub const WMIC_COMMAND_OS: &str = r#"{} os get osarchitecture"#; +pub const WMIC_COMMAND: &str = r#"wmic datafile where name='{}' get Version /value"#; +pub const WMIC_COMMAND_OS: &str = r#"wmic os get osarchitecture"#; pub const REG_VERSION_ARG: &str = "version"; pub const REG_CURRENT_VERSION_ARG: &str = "CurrentVersion"; pub const REG_PV_ARG: &str = "pv"; @@ -95,7 +93,6 @@ pub const SINGLE_QUOTE: &str = "'"; pub const ENV_PROGRAM_FILES: &str = "PROGRAMFILES"; pub const ENV_PROGRAM_FILES_X86: &str = "PROGRAMFILES(X86)"; pub const ENV_LOCALAPPDATA: &str = "LOCALAPPDATA"; -pub const ENV_SYSTEMROOT: &str = "SYSTEMROOT"; pub const ENV_X86: &str = " (x86)"; pub const ARCH_X86: &str = "x86"; pub const ARCH_AMD64: &str = "amd64"; @@ -1076,11 +1073,8 @@ pub trait SeleniumManager { if WINDOWS.is(self.get_os()) { if !escaped_browser_path.is_empty() { - let wmic_command = Command::new_single(format_two_args( - WMIC_COMMAND, - &get_wmic(), - &escaped_browser_path, - )); + let wmic_command = + Command::new_single(format_one_arg(WMIC_COMMAND, &escaped_browser_path)); commands.push(wmic_command); } if !self.is_browser_version_unstable() { @@ -1555,19 +1549,6 @@ pub fn format_three_args(string: &str, arg1: &str, arg2: &str, arg3: &str) -> St .replacen("{}", arg3, 1) } -pub fn get_wmic() -> String { - let system_root = env::var(ENV_SYSTEMROOT).unwrap_or_default(); - let wmic_default_path = format_one_arg(WMIC_DEFAULT_PATH, &system_root); - let wmic_path = Path::new(&wmic_default_path); - if !wmic_path.exists() { - return match which(WMIC) { - Ok(path) => path_to_string(&path), - Err(_) => WMIC.to_string(), - }; - } - path_to_string(wmic_path) -} - // ---------------------------------------------------------- // Private functions // ---------------------------------------------------------- From 5bb35150669a712fcdbecd363808879495126f0f Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 09:44:54 +0200 Subject: [PATCH 070/176] [rust] Include PATH env for testing SM in CI --- .bazelrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.bazelrc b/.bazelrc index 923ebaf7b50a0..4c9ebcfd307a6 100644 --- a/.bazelrc +++ b/.bazelrc @@ -90,6 +90,7 @@ test --test_env=JRUBY_OPTS="--dev" # Expose necessary variables for Selenium-Manager. +test:windows --test_env=PATH test:windows --test_env=LOCALAPPDATA test:windows --test_env=PROGRAMFILES="C:\\Program Files" test:windows --test_env=PROGRAMFILES(X86)="C:\\Program Files (x86)" From 9a6104393aa159cfdc679f6df2d6718979419fdf Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 10:02:08 +0200 Subject: [PATCH 071/176] [rust] Restore assert driver and browser in config test --- rust/tests/config_tests.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index 8023323a78811..df41f9c29bf01 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{get_selenium_manager, get_stdout}; +use crate::common::{assert_browser, assert_driver, get_selenium_manager, get_stdout}; use rstest::rstest; @@ -40,12 +40,20 @@ fn config_test(#[case] browser_name: String) { writer.flush().unwrap(); let mut cmd = get_selenium_manager(); - cmd.args(["--debug", "--cache-path", tmp_dir.path().to_str().unwrap()]) - .assert() - .success() - .code(0); + cmd.args([ + "--output", + "json", + "--debug", + "--cache-path", + tmp_dir.path().to_str().unwrap(), + ]) + .assert() + .success() + .code(0); let stdout = get_stdout(&mut cmd); assert!(!stdout.contains("WARN") && !stdout.contains("ERROR")); + assert_driver(&mut cmd); + assert_browser(&mut cmd); } From 54ee66bed0a7b9fa5e62f4b47ae03d514f6289b2 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 11:20:11 +0200 Subject: [PATCH 072/176] [rust] Bump dependencies to latest versions --- rust/Cargo.Bazel.lock | 333 ++++++++++++++++++++---------------------- rust/Cargo.lock | 71 ++++----- rust/Cargo.toml | 18 +-- 3 files changed, 201 insertions(+), 221 deletions(-) diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index 2b73e7078de80..c48de36cfb872 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "2e222054f92b335737da8a14f5d38655c2ed374a00dd12dc161b161e4d1a62b9", + "checksum": "851386c55f06722dc475b840ed4494699eaa40a7d3dd2278b598ce36296dfd25", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -656,7 +656,7 @@ "target": "scroll" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -664,7 +664,7 @@ "target": "serde_xml_rs" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" } ], @@ -766,7 +766,7 @@ "target": "scroll" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -786,7 +786,7 @@ "target": "signature" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" }, { @@ -1978,10 +1978,6 @@ "id": "jobserver 0.1.31", "target": "jobserver" }, - { - "id": "libc 0.2.154", - "target": "libc" - }, { "id": "once_cell 1.19.0", "target": "once_cell" @@ -2148,7 +2144,7 @@ "target": "num_traits" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" } ], @@ -2353,14 +2349,14 @@ ], "license_file": "LICENSE.txt" }, - "clap 4.5.4": { + "clap 4.5.7": { "name": "clap", - "version": "4.5.4", + "version": "4.5.7", "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://static.crates.io/crates/clap/4.5.4/download", - "sha256": "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" + "url": "https://static.crates.io/crates/clap/4.5.7/download", + "sha256": "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" } }, "targets": [ @@ -2399,7 +2395,7 @@ "deps": { "common": [ { - "id": "clap_builder 4.5.2", + "id": "clap_builder 4.5.7", "target": "clap_builder" } ], @@ -2409,13 +2405,13 @@ "proc_macro_deps": { "common": [ { - "id": "clap_derive 4.5.4", + "id": "clap_derive 4.5.5", "target": "clap_derive" } ], "selects": {} }, - "version": "4.5.4" + "version": "4.5.7" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -2424,14 +2420,14 @@ ], "license_file": "LICENSE-APACHE" }, - "clap_builder 4.5.2": { + "clap_builder 4.5.7": { "name": "clap_builder", - "version": "4.5.2", + "version": "4.5.7", "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://static.crates.io/crates/clap_builder/4.5.2/download", - "sha256": "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" + "url": "https://static.crates.io/crates/clap_builder/4.5.7/download", + "sha256": "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" } }, "targets": [ @@ -2487,7 +2483,7 @@ "selects": {} }, "edition": "2021", - "version": "4.5.2" + "version": "4.5.7" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -2496,14 +2492,14 @@ ], "license_file": "LICENSE-APACHE" }, - "clap_derive 4.5.4": { + "clap_derive 4.5.5": { "name": "clap_derive", - "version": "4.5.4", - "package_url": "https://github.com/clap-rs/clap/tree/master/clap_derive", + "version": "4.5.5", + "package_url": "https://github.com/clap-rs/clap", "repository": { "Http": { - "url": "https://static.crates.io/crates/clap_derive/4.5.4/download", - "sha256": "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" + "url": "https://static.crates.io/crates/clap_derive/4.5.5/download", + "sha256": "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" } }, "targets": [ @@ -2553,7 +2549,7 @@ "selects": {} }, "edition": "2021", - "version": "4.5.4" + "version": "4.5.5" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -2828,7 +2824,7 @@ "target": "simple_file_manifest" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" } ], @@ -2998,14 +2994,14 @@ ], "license_file": "LICENSES" }, - "crc32fast 1.4.0": { + "crc32fast 1.4.2": { "name": "crc32fast", - "version": "1.4.0", + "version": "1.4.2", "package_url": "https://github.com/srijs/rust-crc32fast", "repository": { "Http": { - "url": "https://static.crates.io/crates/crc32fast/1.4.0/download", - "sha256": "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" + "url": "https://static.crates.io/crates/crc32fast/1.4.2/download", + "sha256": "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" } }, "targets": [ @@ -3020,18 +3016,6 @@ ] } } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } } ], "library_target_name": "crc32fast", @@ -3051,21 +3035,12 @@ { "id": "cfg-if 1.0.0", "target": "cfg_if" - }, - { - "id": "crc32fast 1.4.0", - "target": "build_script_build" } ], "selects": {} }, "edition": "2015", - "version": "1.4.0" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ] + "version": "1.4.2" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -3074,14 +3049,14 @@ ], "license_file": "LICENSE-APACHE" }, - "crossbeam-utils 0.8.19": { + "crossbeam-utils 0.8.20": { "name": "crossbeam-utils", - "version": "0.8.19", + "version": "0.8.20", "package_url": "https://github.com/crossbeam-rs/crossbeam", "repository": { "Http": { - "url": "https://static.crates.io/crates/crossbeam-utils/0.8.19/download", - "sha256": "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + "url": "https://static.crates.io/crates/crossbeam-utils/0.8.20/download", + "sha256": "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" } }, "targets": [ @@ -3125,14 +3100,14 @@ "deps": { "common": [ { - "id": "crossbeam-utils 0.8.19", + "id": "crossbeam-utils 0.8.20", "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.8.19" + "version": "0.8.20" }, "build_script_attrs": { "data_glob": [ @@ -3343,7 +3318,7 @@ "target": "log" }, { - "id": "tar 0.4.40", + "id": "tar 0.4.41", "target": "tar" }, { @@ -4017,7 +3992,7 @@ "target": "log" }, { - "id": "regex 1.10.4", + "id": "regex 1.10.5", "target": "regex" } ], @@ -4475,7 +4450,7 @@ "deps": { "common": [ { - "id": "crc32fast 1.4.0", + "id": "crc32fast 1.4.2", "target": "crc32fast" }, { @@ -5782,7 +5757,7 @@ "target": "slab" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -6600,7 +6575,7 @@ "target": "socket2" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -6703,7 +6678,7 @@ "target": "smallvec" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -6770,7 +6745,7 @@ "target": "rustls" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -6848,7 +6823,7 @@ "alias": "pki_types" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -6947,7 +6922,7 @@ "target": "socket2" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -7385,14 +7360,14 @@ ], "license_file": "LICENSE" }, - "infer 0.15.0": { + "infer 0.16.0": { "name": "infer", - "version": "0.15.0", + "version": "0.16.0", "package_url": "https://github.com/bojand/infer", "repository": { "Http": { - "url": "https://static.crates.io/crates/infer/0.15.0/download", - "sha256": "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" + "url": "https://static.crates.io/crates/infer/0.16.0/download", + "sha256": "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" } }, "targets": [ @@ -7433,7 +7408,7 @@ "selects": {} }, "edition": "2018", - "version": "0.15.0" + "version": "0.16.0" }, "license": "MIT", "license_ids": [ @@ -10001,7 +9976,7 @@ "target": "libredox" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" } ], @@ -10016,14 +9991,14 @@ ], "license_file": "LICENSE" }, - "regex 1.10.4": { + "regex 1.10.5": { "name": "regex", - "version": "1.10.4", + "version": "1.10.5", "package_url": "https://github.com/rust-lang/regex", "repository": { "Http": { - "url": "https://static.crates.io/crates/regex/1.10.4/download", - "sha256": "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" + "url": "https://static.crates.io/crates/regex/1.10.5/download", + "sha256": "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" } }, "targets": [ @@ -10089,7 +10064,7 @@ "selects": {} }, "edition": "2021", - "version": "1.10.4" + "version": "1.10.5" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -10347,7 +10322,7 @@ "target": "http" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -10674,7 +10649,7 @@ "target": "pin_project_lite" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" } ], @@ -11226,7 +11201,7 @@ "target": "http" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -11601,7 +11576,7 @@ "target": "pin_project_lite" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" } ], @@ -12410,7 +12385,7 @@ "target": "quote" }, { - "id": "regex 1.10.4", + "id": "regex 1.10.5", "target": "regex" }, { @@ -13638,7 +13613,7 @@ "target": "bzip2" }, { - "id": "clap 4.5.4", + "id": "clap 4.5.7", "target": "clap" }, { @@ -13662,7 +13637,7 @@ "target": "flate2" }, { - "id": "infer 0.15.0", + "id": "infer 0.16.0", "target": "infer" }, { @@ -13670,7 +13645,7 @@ "target": "log" }, { - "id": "regex 1.10.4", + "id": "regex 1.10.5", "target": "regex" }, { @@ -13678,7 +13653,7 @@ "target": "reqwest" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -13690,7 +13665,7 @@ "target": "sevenz_rust" }, { - "id": "tar 0.4.40", + "id": "tar 0.4.41", "target": "tar" }, { @@ -13698,11 +13673,11 @@ "target": "tempfile" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { - "id": "toml 0.8.13", + "id": "toml 0.8.14", "target": "toml" }, { @@ -13714,7 +13689,7 @@ "target": "which" }, { - "id": "zip 1.3.1", + "id": "zip 2.1.3", "target": "zip" } ], @@ -13818,14 +13793,14 @@ ], "license_file": "LICENSE-APACHE" }, - "serde 1.0.202": { + "serde 1.0.203": { "name": "serde", - "version": "1.0.202", + "version": "1.0.203", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde/1.0.202/download", - "sha256": "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" + "url": "https://static.crates.io/crates/serde/1.0.203/download", + "sha256": "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" } }, "targets": [ @@ -13871,7 +13846,7 @@ "deps": { "common": [ { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "build_script_build" } ], @@ -13881,13 +13856,13 @@ "proc_macro_deps": { "common": [ { - "id": "serde_derive 1.0.202", + "id": "serde_derive 1.0.203", "target": "serde_derive" } ], "selects": {} }, - "version": "1.0.202" + "version": "1.0.203" }, "build_script_attrs": { "data_glob": [ @@ -13937,11 +13912,11 @@ "target": "log" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" }, { @@ -13960,14 +13935,14 @@ ], "license_file": "LICENSE" }, - "serde_derive 1.0.202": { + "serde_derive 1.0.203": { "name": "serde_derive", - "version": "1.0.202", + "version": "1.0.203", "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_derive/1.0.202/download", - "sha256": "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" + "url": "https://static.crates.io/crates/serde_derive/1.0.203/download", + "sha256": "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" } }, "targets": [ @@ -14013,7 +13988,7 @@ "selects": {} }, "edition": "2015", - "version": "1.0.202" + "version": "1.0.203" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -14081,7 +14056,7 @@ "target": "ryu" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -14144,7 +14119,7 @@ "deps": { "common": [ { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" } ], @@ -14204,7 +14179,7 @@ "target": "ryu" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" } ], @@ -15252,14 +15227,14 @@ ], "license_file": null }, - "tar 0.4.40": { + "tar 0.4.41": { "name": "tar", - "version": "0.4.40", + "version": "0.4.41", "package_url": "https://github.com/alexcrichton/tar-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/tar/0.4.40/download", - "sha256": "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" + "url": "https://static.crates.io/crates/tar/0.4.41/download", + "sha256": "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" } }, "targets": [ @@ -15448,10 +15423,10 @@ ] } }, - "edition": "2018", - "version": "0.4.40" + "edition": "2021", + "version": "0.4.41" }, - "license": "MIT/Apache-2.0", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" @@ -15561,14 +15536,14 @@ ], "license_file": "LICENSE" }, - "thiserror 1.0.60": { + "thiserror 1.0.61": { "name": "thiserror", - "version": "1.0.60", + "version": "1.0.61", "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://static.crates.io/crates/thiserror/1.0.60/download", - "sha256": "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" + "url": "https://static.crates.io/crates/thiserror/1.0.61/download", + "sha256": "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" } }, "targets": [ @@ -15605,7 +15580,7 @@ "deps": { "common": [ { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "build_script_build" } ], @@ -15615,13 +15590,13 @@ "proc_macro_deps": { "common": [ { - "id": "thiserror-impl 1.0.60", + "id": "thiserror-impl 1.0.61", "target": "thiserror_impl" } ], "selects": {} }, - "version": "1.0.60" + "version": "1.0.61" }, "build_script_attrs": { "data_glob": [ @@ -15635,14 +15610,14 @@ ], "license_file": "LICENSE-APACHE" }, - "thiserror-impl 1.0.60": { + "thiserror-impl 1.0.61": { "name": "thiserror-impl", - "version": "1.0.60", + "version": "1.0.61", "package_url": "https://github.com/dtolnay/thiserror", "repository": { "Http": { - "url": "https://static.crates.io/crates/thiserror-impl/1.0.60/download", - "sha256": "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" + "url": "https://static.crates.io/crates/thiserror-impl/1.0.61/download", + "sha256": "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" } }, "targets": [ @@ -15682,7 +15657,7 @@ "selects": {} }, "edition": "2021", - "version": "1.0.60" + "version": "1.0.61" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -15956,14 +15931,14 @@ ], "license_file": "LICENSE-APACHE.md" }, - "tokio 1.37.0": { + "tokio 1.38.0": { "name": "tokio", - "version": "1.37.0", + "version": "1.38.0", "package_url": "https://github.com/tokio-rs/tokio", "repository": { "Http": { - "url": "https://static.crates.io/crates/tokio/1.37.0/download", - "sha256": "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" + "url": "https://static.crates.io/crates/tokio/1.38.0/download", + "sha256": "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" } }, "targets": [ @@ -16715,13 +16690,13 @@ "proc_macro_deps": { "common": [ { - "id": "tokio-macros 2.2.0", + "id": "tokio-macros 2.3.0", "target": "tokio_macros" } ], "selects": {} }, - "version": "1.37.0" + "version": "1.38.0" }, "license": "MIT", "license_ids": [ @@ -16729,14 +16704,14 @@ ], "license_file": "LICENSE" }, - "tokio-macros 2.2.0": { + "tokio-macros 2.3.0": { "name": "tokio-macros", - "version": "2.2.0", + "version": "2.3.0", "package_url": "https://github.com/tokio-rs/tokio", "repository": { "Http": { - "url": "https://static.crates.io/crates/tokio-macros/2.2.0/download", - "sha256": "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" + "url": "https://static.crates.io/crates/tokio-macros/2.3.0/download", + "sha256": "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" } }, "targets": [ @@ -16776,7 +16751,7 @@ "selects": {} }, "edition": "2021", - "version": "2.2.0" + "version": "2.3.0" }, "license": "MIT", "license_ids": [ @@ -16828,7 +16803,7 @@ "target": "rustls" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" } ], @@ -16894,7 +16869,7 @@ "alias": "pki_types" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" } ], @@ -16966,7 +16941,7 @@ "target": "pin_project_lite" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" } ], @@ -16981,14 +16956,14 @@ ], "license_file": "LICENSE" }, - "toml 0.8.13": { + "toml 0.8.14": { "name": "toml", - "version": "0.8.13", + "version": "0.8.14", "package_url": "https://github.com/toml-rs/toml", "repository": { "Http": { - "url": "https://static.crates.io/crates/toml/0.8.13/download", - "sha256": "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" + "url": "https://static.crates.io/crates/toml/0.8.14/download", + "sha256": "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" } }, "targets": [ @@ -17021,7 +16996,7 @@ "deps": { "common": [ { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -17033,14 +17008,14 @@ "target": "toml_datetime" }, { - "id": "toml_edit 0.22.13", + "id": "toml_edit 0.22.14", "target": "toml_edit" } ], "selects": {} }, "edition": "2021", - "version": "0.8.13" + "version": "0.8.14" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -17087,7 +17062,7 @@ "deps": { "common": [ { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" } ], @@ -17103,14 +17078,14 @@ ], "license_file": "LICENSE-APACHE" }, - "toml_edit 0.22.13": { + "toml_edit 0.22.14": { "name": "toml_edit", - "version": "0.22.13", + "version": "0.22.14", "package_url": "https://github.com/toml-rs/toml", "repository": { "Http": { - "url": "https://static.crates.io/crates/toml_edit/0.22.13/download", - "sha256": "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" + "url": "https://static.crates.io/crates/toml_edit/0.22.14/download", + "sha256": "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" } }, "targets": [ @@ -17147,7 +17122,7 @@ "target": "indexmap" }, { - "id": "serde 1.0.202", + "id": "serde 1.0.203", "target": "serde" }, { @@ -17166,7 +17141,7 @@ "selects": {} }, "edition": "2021", - "version": "0.22.13" + "version": "0.22.14" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -17239,7 +17214,7 @@ "target": "pin_project_lite" }, { - "id": "tokio 1.37.0", + "id": "tokio 1.38.0", "target": "tokio" }, { @@ -20689,7 +20664,7 @@ "target": "spki" }, { - "id": "thiserror 1.0.60", + "id": "thiserror 1.0.61", "target": "thiserror" }, { @@ -20981,14 +20956,14 @@ ], "license_file": "LICENSE-APACHE" }, - "zip 1.3.1": { + "zip 2.1.3": { "name": "zip", - "version": "1.3.1", + "version": "2.1.3", "package_url": "https://github.com/zip-rs/zip2.git", "repository": { "Http": { - "url": "https://static.crates.io/crates/zip/1.3.1/download", - "sha256": "1b7a5a9285bd4ee13bdeb3f8a4917eb46557e53f270c783849db8bef37b0ad00" + "url": "https://static.crates.io/crates/zip/2.1.3/download", + "sha256": "775a2b471036342aa69bc5a602bc889cb0a06cda00477d0c69566757d5553d39" } }, "targets": [ @@ -21034,7 +21009,7 @@ "deps": { "common": [ { - "id": "crc32fast 1.4.0", + "id": "crc32fast 1.4.2", "target": "crc32fast" }, { @@ -21046,18 +21021,22 @@ "target": "indexmap" }, { - "id": "thiserror 1.0.60", + "id": "memchr 2.7.2", + "target": "memchr" + }, + { + "id": "thiserror 1.0.61", "target": "thiserror" }, { - "id": "zip 1.3.1", + "id": "zip 2.1.3", "target": "build_script_build" } ], "selects": { "cfg(any(all(target_arch = \"arm\", target_pointer_width = \"32\"), target_arch = \"mips\", target_arch = \"powerpc\"))": [ { - "id": "crossbeam-utils 0.8.19", + "id": "crossbeam-utils 0.8.20", "target": "crossbeam_utils" } ], @@ -21079,7 +21058,7 @@ ], "selects": {} }, - "version": "1.3.1" + "version": "2.1.3" }, "build_script_attrs": { "data_glob": [ @@ -21886,26 +21865,26 @@ "anyhow 1.0.86", "apple-flat-package 0.18.0", "bzip2 0.4.4", - "clap 4.5.4", + "clap 4.5.7", "debpkg 0.6.0", "directories 5.0.1", "env_logger 0.11.3", "exitcode 1.1.2", "flate2 1.0.30", - "infer 0.15.0", + "infer 0.16.0", "log 0.4.21", - "regex 1.10.4", + "regex 1.10.5", "reqwest 0.12.4", - "serde 1.0.202", + "serde 1.0.203", "serde_json 1.0.117", "sevenz-rust 0.6.0", - "tar 0.4.40", + "tar 0.4.41", "tempfile 3.10.1", - "tokio 1.37.0", - "toml 0.8.13", + "tokio 1.38.0", + "toml 0.8.14", "walkdir 2.5.0", "which 6.0.1", - "zip 1.3.1" + "zip 2.1.3" ], "direct_dev_deps": [ "assert_cmd 2.0.14", diff --git a/rust/Cargo.lock b/rust/Cargo.lock index 6921db2265fb4..e0183375ec213 100644 --- a/rust/Cargo.lock +++ b/rust/Cargo.lock @@ -360,9 +360,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.4" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +checksum = "5db83dced34638ad474f39f250d7fea9598bdd239eaced1bdf45d597da0f433f" dependencies = [ "clap_builder", "clap_derive", @@ -370,9 +370,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.2" +version = "4.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +checksum = "f7e204572485eb3fbf28f871612191521df159bc3e15a9f5064c66dba3a8c05f" dependencies = [ "anstream", "anstyle", @@ -382,9 +382,9 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.4" +version = "4.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +checksum = "c780290ccf4fb26629baa7a1081e68ced113f1d3ec302fa5948f1c381ebf06c6" dependencies = [ "heck", "proc-macro2", @@ -464,18 +464,18 @@ checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] name = "crc32fast" -version = "1.4.0" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] [[package]] name = "crossbeam-utils" -version = "0.8.19" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -1139,9 +1139,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] @@ -1511,9 +1511,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.4" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -1829,7 +1829,7 @@ dependencies = [ "env_logger", "exitcode", "flate2", - "infer 0.15.0", + "infer 0.16.0", "is_executable", "log", "regex", @@ -1855,9 +1855,9 @@ checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] @@ -1876,9 +1876,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.202" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", @@ -2064,9 +2064,9 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ "filetime", "libc", @@ -2093,18 +2093,18 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "thiserror" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579e9083ca58dd9dcf91a9923bb9054071b9ebbd800b342194c9feb0ee89fc18" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2470041c06ec3ac1ab38d0356a6119054dedaea53e12fbefc0de730a1c08524" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", @@ -2158,9 +2158,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.37.0" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -2175,9 +2175,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" dependencies = [ "proc-macro2", "quote", @@ -2220,9 +2220,9 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.13" +version = "0.8.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e43f8cc456c9704c851ae29c67e17ef65d2c30017c17a9765b89c382dc8bba" +checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" dependencies = [ "serde", "serde_spanned", @@ -2241,9 +2241,9 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.22.13" +version = "0.22.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c127785850e8c20836d49732ae6abfa47616e60bf9d9f57c43c250361a9db96c" +checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" dependencies = [ "indexmap 2.2.6", "serde", @@ -2792,9 +2792,9 @@ dependencies = [ [[package]] name = "zip" -version = "1.3.1" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b7a5a9285bd4ee13bdeb3f8a4917eb46557e53f270c783849db8bef37b0ad00" +checksum = "775a2b471036342aa69bc5a602bc889cb0a06cda00477d0c69566757d5553d39" dependencies = [ "arbitrary", "crc32fast", @@ -2802,6 +2802,7 @@ dependencies = [ "displaydoc", "flate2", "indexmap 2.2.6", + "memchr", "thiserror", ] diff --git a/rust/Cargo.toml b/rust/Cargo.toml index 06b39dd64cc0d..ad9af7cdfdf28 100644 --- a/rust/Cargo.toml +++ b/rust/Cargo.toml @@ -12,27 +12,27 @@ Selenium Manager is a CLI tool that automatically manages the browser/driver inf """ [dependencies] -clap = { version = "4.5.4", features = ["derive", "cargo"] } +clap = { version = "4.5.7", features = ["derive", "cargo"] } log = "0.4.21" env_logger = "0.11.3" -regex = "1.10.4" -tokio = { version = "1.37.0", default-features = false, features = ["macros", "net", "rt-multi-thread"] } +regex = "1.10.5" +tokio = { version = "1.38.0", default-features = false, features = ["macros", "net", "rt-multi-thread"] } tempfile = "3.10.1" reqwest = { version = "0.12.4", default-features = false, features = ["rustls-tls"] } -zip = { version = "1.3.0", default-features = false, features = ["deflate-zlib"] } +zip = { version = "2.1.3", default-features = false, features = ["deflate-zlib"] } directories = "5.0.1" -serde = { version = "1.0.202", features = ["derive"] } +serde = { version = "1.0.203", features = ["derive"] } serde_json = "1.0.117" flate2 = "1.0.30" -tar = "0.4.40" -infer = "0.15.0" +tar = "0.4.41" +infer = "0.16.0" exitcode = "1.1.2" -toml = "0.8.13" +toml = "0.8.14" bzip2 = "0.4.4" sevenz-rust = "0.6.0" walkdir = "2.5.0" debpkg = "0.6.0" -anyhow = { version = "1.0.84", default-features = false, features = ["backtrace", "std"] } +anyhow = { version = "1.0.86", default-features = false, features = ["backtrace", "std"] } apple-flat-package = "0.18.0" which = "6.0.1" From 7cba9cfdab55f4e7687874fb9973aa9a4c6d3d41 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 11:34:10 +0200 Subject: [PATCH 073/176] [rust] Update Cargo.Bazel.lock file --- rust/Cargo.Bazel.lock | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index c48de36cfb872..2d5ad31197603 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "851386c55f06722dc475b840ed4494699eaa40a7d3dd2278b598ce36296dfd25", + "checksum": "11219ebc06847400b45e4149dbf89b68fce48fd990ff6e117d4de3353419d87a", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -1978,6 +1978,10 @@ "id": "jobserver 0.1.31", "target": "jobserver" }, + { + "id": "libc 0.2.154", + "target": "libc" + }, { "id": "once_cell 1.19.0", "target": "once_cell" From f49c6157043e095c5f78f290cf8ab3e365090561 Mon Sep 17 00:00:00 2001 From: Simon Mavi Stewart Date: Thu, 13 Jun 2024 13:03:38 +0100 Subject: [PATCH 074/176] [py] Ensure test is reliable in the RBE --- .../webdriver/common/w3c_interaction_tests.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/py/test/selenium/webdriver/common/w3c_interaction_tests.py b/py/test/selenium/webdriver/common/w3c_interaction_tests.py index 5ecd33a715b12..d0a00ac26a2d4 100644 --- a/py/test/selenium/webdriver/common/w3c_interaction_tests.py +++ b/py/test/selenium/webdriver/common/w3c_interaction_tests.py @@ -178,8 +178,18 @@ def test_dragging_element_with_mouse_fires_events(driver, pages): @pytest.mark.xfail_remote def test_pen_pointer_properties(driver, pages): pages.load("pointerActionsPage.html") - pointerArea = driver.find_element(By.CSS_SELECTOR, "#pointerArea") + pointer_input = PointerInput(interaction.POINTER_PEN, "pen") + + # Make sure the pointer starts in a known location + reset_actions = ActionBuilder(driver, mouse=pointer_input) + reset_actions.pointer_action.move_to_location(x=0, y=0) + reset_actions.perform() + # Clear the events state + driver.execute_script("allEvents.events = [];") + + pointerArea = driver.find_element(By.CSS_SELECTOR, "#pointerArea") + actions = ActionBuilder(driver, mouse=pointer_input) center = _get_inview_center(pointerArea.rect, _get_viewport_rect(driver)) actions.pointer_action.move_to(pointerArea).pointer_down(pressure=0.36, tilt_x=-72, tilt_y=9, twist=86).move_to( From 03bee54e257cf104f9c6b077176582e8110bffbb Mon Sep 17 00:00:00 2001 From: Simon Stewart Date: Thu, 13 Jun 2024 16:03:56 +0100 Subject: [PATCH 075/176] Update bazel to 7.2.0 and rulesets we use (#14129) --- .bazelversion | 2 +- MODULE.bazel | 31 +++++++++++++++++++------------ WORKSPACE | 8 -------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/.bazelversion b/.bazelversion index a8a188756826d..0ee843cc60466 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.1.2 +7.2.0 diff --git a/MODULE.bazel b/MODULE.bazel index 4694837797677..b206f169464f7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,24 +1,31 @@ module(name = "selenium") bazel_dep(name = "apple_rules_lint", version = "0.3.2") -bazel_dep(name = "aspect_bazel_lib", version = "2.7.6") -bazel_dep(name = "aspect_rules_esbuild", version = "0.20.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.7.7") +bazel_dep(name = "aspect_rules_esbuild", version = "0.20.1") bazel_dep(name = "aspect_rules_js", version = "1.42.3") -bazel_dep(name = "aspect_rules_ts", version = "2.1.0") -bazel_dep(name = "bazel_features", version = "1.12.0") -bazel_dep(name = "bazel_skylib", version = "1.5.0") +bazel_dep(name = "aspect_rules_ts", version = "2.4.2") +bazel_dep(name = "bazel_features", version = "1.13.0") +bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0") bazel_dep(name = "contrib_rules_jvm", version = "0.27.0") bazel_dep(name = "platforms", version = "0.0.10") + +# Required for the closure rules +bazel_dep(name = "protobuf", version = "21.7", dev_dependency = True, repo_name = "com_google_protobuf") + +# Required for rules_rust to import the crates properly +bazel_dep(name = "rules_cc", version = "0.0.9", dev_dependency = True) + bazel_dep(name = "rules_dotnet", version = "0.15.1") -bazel_dep(name = "rules_java", version = "7.4.0") +bazel_dep(name = "rules_java", version = "7.6.3") bazel_dep(name = "rules_jvm_external", version = "6.1") -bazel_dep(name = "rules_nodejs", version = "6.0.5") -bazel_dep(name = "rules_oci", version = "1.0.0") -bazel_dep(name = "rules_pkg", version = "0.9.1") -bazel_dep(name = "rules_python", version = "0.31.0") -bazel_dep(name = "rules_proto", version = "5.3.0-21.7") -bazel_dep(name = "rules_ruby", version = "0.8.1") +bazel_dep(name = "rules_nodejs", version = "6.2.0") +bazel_dep(name = "rules_oci", version = "1.7.6") +bazel_dep(name = "rules_pkg", version = "0.10.1") +bazel_dep(name = "rules_python", version = "0.33.0") +bazel_dep(name = "rules_proto", version = "6.0.0") +bazel_dep(name = "rules_ruby", version = "0.11.0") linter = use_extension("@apple_rules_lint//lint:extensions.bzl", "linter") linter.configure( diff --git a/WORKSPACE b/WORKSPACE index 4cf1c70bc3f8f..32f2305a9727f 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -2,14 +2,6 @@ workspace(name = "selenium") load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -# This gets us a pre-compiled `protoc` - -load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") - -rules_proto_dependencies() - -rules_proto_toolchains() - # rules_closure are not published to BCR. http_archive( From 20348a718bc2c5decf445b42ce2d64f6c56d093d Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 10:08:48 -0500 Subject: [PATCH 076/176] [build] ensure jruby is used when executing ruby bazel remote targets --- Rakefile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index 221d5416bd71d..432922907c8b5 100644 --- a/Rakefile +++ b/Rakefile @@ -552,7 +552,7 @@ namespace :py do end desc 'Release Python wheel and sdist to pypi' - task :release, do |_task, arguments| + task :release do |_task, arguments| args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['py:version'].invoke('nightly') if nightly @@ -709,6 +709,9 @@ namespace :rb do args = arguments.to_a.compact webdriver = args.delete('webdriver') devtools = args.delete('devtools') + if args.include?('--config=remote') || args.include?('--config=release') + File.open('rb/.ruby-version', 'w') { | file | file.write('jruby-9.4.7.0') } + end Bazel.execute('build', args, '//rb:selenium-webdriver') if (webdriver || !devtools) Bazel.execute('build', args, '//rb:selenium-devtools') if (devtools || !webdriver) @@ -724,6 +727,10 @@ namespace :rb do desc 'Push Ruby gems to rubygems' task :release do |_task, arguments| args = arguments.to_a.compact + if args.include?('--config=remote') || args.include?('--config=release') + File.open('rb/.ruby-version', 'w') { | file | file.write('jruby-9.4.7.0') } + end + nightly = args.delete('nightly') wd_target = nightly ? '//rb:selenium-webdriver-release' : '//rb:selenium-webdriver-release-nightly' cdp_target = nightly ? '//rb:selenium-devtools-release' : '//rb:selenium-devtools-release-nightly' From 8fa97d0c4b326de29c12de5c2fe9e56476eef8dd Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 18:09:19 +0200 Subject: [PATCH 077/176] [rust] Micro optimization in the strings usage and other minor issues --- rust/src/chrome.rs | 8 ++++---- rust/src/edge.rs | 10 +++++----- rust/src/files.rs | 2 +- rust/src/firefox.rs | 10 +++++----- rust/src/grid.rs | 2 +- rust/src/lib.rs | 16 +++++++--------- rust/src/safari.rs | 4 ++-- rust/src/safaritp.rs | 4 ++-- rust/tests/browser_tests.rs | 2 +- 9 files changed, 28 insertions(+), 30 deletions(-) diff --git a/rust/src/chrome.rs b/rust/src/chrome.rs index 67f74b7db57e9..f65dc46e2efc9 100644 --- a/rust/src/chrome.rs +++ b/rust/src/chrome.rs @@ -249,19 +249,19 @@ impl SeleniumManager for ChromeManager { ), ( BrowserPath::new(MACOS, STABLE), - r#"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"#, + "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome", ), ( BrowserPath::new(MACOS, BETA), - r#"/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta"#, + "/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta", ), ( BrowserPath::new(MACOS, DEV), - r#"/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev"#, + "/Applications/Google Chrome Dev.app/Contents/MacOS/Google Chrome Dev", ), ( BrowserPath::new(MACOS, NIGHTLY), - r#"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"#, + "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary", ), (BrowserPath::new(LINUX, STABLE), "/usr/bin/google-chrome"), (BrowserPath::new(LINUX, BETA), "/usr/bin/google-chrome-beta"), diff --git a/rust/src/edge.rs b/rust/src/edge.rs index 4be3119edb657..582a7f1717b38 100644 --- a/rust/src/edge.rs +++ b/rust/src/edge.rs @@ -138,19 +138,19 @@ impl SeleniumManager for EdgeManager { ), ( BrowserPath::new(MACOS, STABLE), - r#"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge"#, + "/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge", ), ( BrowserPath::new(MACOS, BETA), - r#"/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta"#, + "/Applications/Microsoft Edge Beta.app/Contents/MacOS/Microsoft Edge Beta", ), ( BrowserPath::new(MACOS, DEV), - r#"/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev"#, + "/Applications/Microsoft Edge Dev.app/Contents/MacOS/Microsoft Edge Dev", ), ( BrowserPath::new(MACOS, NIGHTLY), - r#"/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary"#, + "/Applications/Microsoft Edge Canary.app/Contents/MacOS/Microsoft Edge Canary", ), (BrowserPath::new(LINUX, STABLE), "/usr/bin/microsoft-edge"), ( @@ -504,7 +504,7 @@ impl SeleniumManager for EdgeManager { .to_string() } else { format!( - r#"Microsoft\Edge\Application\{}\msedge.exe"#, + r"Microsoft\Edge\Application\{}\msedge.exe", self.get_browser_version() ) }; diff --git a/rust/src/files.rs b/rust/src/files.rs index 8275f70d38d16..a753f8456b358 100644 --- a/rust/src/files.rs +++ b/rust/src/files.rs @@ -165,7 +165,7 @@ pub fn uncompress_sfx(compressed_file: &str, target: &Path, log: &Logger) -> Res let zip_parent_str = path_to_string(zip_parent); let target_str = path_to_string(target); - let core_str = format!(r#"{}\core"#, zip_parent_str); + let core_str = format!(r"{}\core", zip_parent_str); log.trace(format!( "Moving extracted files and folders from {} to {}", core_str, target_str diff --git a/rust/src/firefox.rs b/rust/src/firefox.rs index 3a5aacb9d4a7f..b23a5ea57e88f 100644 --- a/rust/src/firefox.rs +++ b/rust/src/firefox.rs @@ -163,23 +163,23 @@ impl SeleniumManager for FirefoxManager { ), ( BrowserPath::new(MACOS, STABLE), - r#"/Applications/Firefox.app/Contents/MacOS/firefox"#, + "/Applications/Firefox.app/Contents/MacOS/firefox", ), ( BrowserPath::new(MACOS, BETA), - r#"/Applications/Firefox.app/Contents/MacOS/firefox"#, + "/Applications/Firefox.app/Contents/MacOS/firefox", ), ( BrowserPath::new(MACOS, DEV), - r#"/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox"#, + "/Applications/Firefox Developer Edition.app/Contents/MacOS/firefox", ), ( BrowserPath::new(MACOS, NIGHTLY), - r#"/Applications/Firefox Nightly.app/Contents/MacOS/firefox"#, + "/Applications/Firefox Nightly.app/Contents/MacOS/firefox", ), ( BrowserPath::new(MACOS, ESR), - r#"/Applications/Firefox.app/Contents/MacOS/firefox"#, + "/Applications/Firefox.app/Contents/MacOS/firefox", ), (BrowserPath::new(LINUX, STABLE), "/usr/bin/firefox"), (BrowserPath::new(LINUX, BETA), "/usr/bin/firefox"), diff --git a/rust/src/grid.rs b/rust/src/grid.rs index fdd2742a93238..5fb26a99411c9 100644 --- a/rust/src/grid.rs +++ b/rust/src/grid.rs @@ -107,7 +107,7 @@ impl SeleniumManager for GridManager { fn request_driver_version(&mut self) -> Result { let major_browser_version_binding = self.get_major_browser_version(); - let major_browser_version = major_browser_version_binding.as_str(); + let major_browser_version = &major_browser_version_binding.as_str(); let cache_path = self.get_cache_path()?; let mut metadata = get_metadata(self.get_logger(), &cache_path); diff --git a/rust/src/lib.rs b/rust/src/lib.rs index b01a7e4822618..d7a0fc0878951 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -74,8 +74,8 @@ pub const DEV: &str = "dev"; pub const CANARY: &str = "canary"; pub const NIGHTLY: &str = "nightly"; pub const ESR: &str = "esr"; -pub const WMIC_COMMAND: &str = r#"wmic datafile where name='{}' get Version /value"#; -pub const WMIC_COMMAND_OS: &str = r#"wmic os get osarchitecture"#; +pub const WMIC_COMMAND: &str = "wmic datafile where name='{}' get Version /value"; +pub const WMIC_COMMAND_OS: &str = "wmic os get osarchitecture"; pub const REG_VERSION_ARG: &str = "version"; pub const REG_CURRENT_VERSION_ARG: &str = "CurrentVersion"; pub const REG_PV_ARG: &str = "pv"; @@ -88,7 +88,7 @@ pub const MSIEXEC_INSTALL_COMMAND: &str = "start /wait msiexec /i {} /qn ALLOWDO pub const WINDOWS_CHECK_ADMIN_COMMAND: &str = "net session"; pub const DASH_VERSION: &str = "{}{}{} -v"; pub const DASH_DASH_VERSION: &str = "{}{}{} --version"; -pub const DOUBLE_QUOTE: &str = "\""; +pub const DOUBLE_QUOTE: &str = r#"""#; pub const SINGLE_QUOTE: &str = "'"; pub const ENV_PROGRAM_FILES: &str = "PROGRAMFILES"; pub const ENV_PROGRAM_FILES_X86: &str = "PROGRAMFILES(X86)"; @@ -100,7 +100,7 @@ pub const ARCH_ARM64: &str = "arm64"; pub const ENV_PROCESSOR_ARCHITECTURE: &str = "PROCESSOR_ARCHITECTURE"; pub const TTL_SEC: u64 = 3600; pub const UNAME_COMMAND: &str = "uname -{}"; -pub const ESCAPE_COMMAND: &str = "printf %q \"{}\""; +pub const ESCAPE_COMMAND: &str = r#"printf %q "{}""#; pub const SNAPSHOT: &str = "SNAPSHOT"; pub const OFFLINE_REQUEST_ERR_MSG: &str = "Unable to discover proper {} version in offline mode"; pub const OFFLINE_DOWNLOAD_ERR_MSG: &str = "Unable to download {} in offline mode"; @@ -484,7 +484,7 @@ pub trait SeleniumManager { } if self.is_webview2() && PathBuf::from(self.get_browser_path()).is_dir() { let browser_path = format!( - r#"{}\{}\msedge{}"#, + r"{}\{}\msedge{}", self.get_browser_path(), &self.get_browser_version(), get_binary_extension(self.get_os()) @@ -615,7 +615,7 @@ pub trait SeleniumManager { if WINDOWS.is(os) { let command = Command::new_single(WINDOWS_CHECK_ADMIN_COMMAND.to_string()); let output = run_shell_command_by_os(os, command).unwrap_or_default(); - !output.is_empty() && !output.contains("error") + !output.is_empty() && !output.contains("error") && !output.contains("not recognized") } else { false } @@ -1061,16 +1061,14 @@ pub trait SeleniumManager { cmd_version_arg: &str, ) -> Result, Error> { let mut browser_path = self.get_browser_path().to_string(); - let mut escaped_browser_path = self.get_escaped_path(browser_path.to_string()); if browser_path.is_empty() { if let Some(path) = self.detect_browser_path() { browser_path = path_to_string(&path); - escaped_browser_path = self.get_escaped_path(browser_path.to_string()); } } + let escaped_browser_path = self.get_escaped_path(browser_path.to_string()); let mut commands = Vec::new(); - if WINDOWS.is(self.get_os()) { if !escaped_browser_path.is_empty() { let wmic_command = diff --git a/rust/src/safari.rs b/rust/src/safari.rs index 306a9609be3fe..29d4270d37a1a 100644 --- a/rust/src/safari.rs +++ b/rust/src/safari.rs @@ -30,8 +30,8 @@ use std::sync::mpsc::{Receiver, Sender}; pub const SAFARI_NAME: &str = "safari"; pub const SAFARIDRIVER_NAME: &str = "safaridriver"; -const SAFARI_PATH: &str = r#"/Applications/Safari.app"#; -const SAFARI_FULL_PATH: &str = r#"/Applications/Safari.app/Contents/MacOS/Safari"#; +const SAFARI_PATH: &str = "/Applications/Safari.app"; +const SAFARI_FULL_PATH: &str = "/Applications/Safari.app/Contents/MacOS/Safari"; pub struct SafariManager { pub browser_name: &'static str, diff --git a/rust/src/safaritp.rs b/rust/src/safaritp.rs index 928c4a4589bef..cfc223805d95a 100644 --- a/rust/src/safaritp.rs +++ b/rust/src/safaritp.rs @@ -35,9 +35,9 @@ pub const SAFARITP_NAMES: &[&str] = &[ "safaritechnologypreview", ]; pub const SAFARITPDRIVER_NAME: &str = "safaridriver"; -const SAFARITP_PATH: &str = r#"/Applications/Safari Technology Preview.app"#; +const SAFARITP_PATH: &str = "/Applications/Safari Technology Preview.app"; const SAFARITP_FULL_PATH: &str = - r#"/Applications/Safari Technology Preview.app/Contents/MacOS/Safari Technology Preview"#; + "/Applications/Safari Technology Preview.app/Contents/MacOS/Safari Technology Preview"; pub struct SafariTPManager { pub browser_name: &'static str, diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index 8090c4281a490..5254e3f0d277b 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -136,7 +136,7 @@ fn invalid_geckodriver_version_test() { #[case( "macos", "chrome", - r#"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"# + r"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" )] fn browser_path_test(#[case] os: String, #[case] browser: String, #[case] browser_path: String) { if OS.eq(&os) { From dd53a53b0cc0ba1b3e82b88db82e4c575565c39f Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Thu, 13 Jun 2024 18:13:01 +0200 Subject: [PATCH 078/176] [rust] Remove unnecessary shared borrow operator --- rust/src/grid.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/src/grid.rs b/rust/src/grid.rs index 5fb26a99411c9..fdd2742a93238 100644 --- a/rust/src/grid.rs +++ b/rust/src/grid.rs @@ -107,7 +107,7 @@ impl SeleniumManager for GridManager { fn request_driver_version(&mut self) -> Result { let major_browser_version_binding = self.get_major_browser_version(); - let major_browser_version = &major_browser_version_binding.as_str(); + let major_browser_version = major_browser_version_binding.as_str(); let cache_path = self.get_cache_path()?; let mut metadata = get_metadata(self.get_logger(), &cache_path); From da2589d82ef12f64f43b237e8a91e18c537daed1 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 10:16:17 -0500 Subject: [PATCH 079/176] [rb] update gems and rubocop --- rb/.rubocop.yml | 1 + rb/Gemfile.lock | 60 ++++++++++--------- .../bidi/log/javascript_log_entry.rb | 2 +- .../common/interactions/pointer_cancel.rb | 2 +- .../common/interactions/wheel_input.rb | 2 +- rb/lib/selenium/webdriver/ie/options.rb | 2 +- .../selenium/webdriver/remote/bidi_bridge.rb | 2 +- .../selenium/webdriver/remote/server_error.rb | 2 +- rb/selenium-webdriver.gemspec | 1 + 9 files changed, 40 insertions(+), 34 deletions(-) diff --git a/rb/.rubocop.yml b/rb/.rubocop.yml index 59f135d071042..322952458760c 100644 --- a/rb/.rubocop.yml +++ b/rb/.rubocop.yml @@ -1,5 +1,6 @@ require: - rubocop-performance + - rubocop-rake - rubocop-rspec AllCops: diff --git a/rb/Gemfile.lock b/rb/Gemfile.lock index 220102ae4b9b0..86a71ae9c2f04 100644 --- a/rb/Gemfile.lock +++ b/rb/Gemfile.lock @@ -13,8 +13,7 @@ PATH GEM remote: https://rubygems.org/ specs: - abbrev (0.1.2) - activesupport (7.1.3.2) + activesupport (7.1.3.4) base64 bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) @@ -30,7 +29,7 @@ GEM base64 (0.2.0) bigdecimal (3.1.8) bigdecimal (3.1.8-java) - concurrent-ruby (1.2.3) + concurrent-ruby (1.3.3) connection_pool (2.4.1) crack (1.0.0) bigdecimal @@ -41,8 +40,9 @@ GEM reline (>= 0.3.8) diff-lcs (1.5.1) drb (2.2.1) - ffi (1.16.3) - ffi (1.16.3-java) + ffi (1.17.0) + ffi (1.17.0-java) + ffi (1.17.0-x64-mingw32) fileutils (1.7.2) git (1.19.1) addressable (~> 2.8) @@ -63,10 +63,10 @@ GEM rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.0) - minitest (5.22.3) + minitest (5.23.1) mutex_m (0.2.0) - parallel (1.24.0) - parser (3.3.1.0) + parallel (1.25.1) + parser (3.3.3.0) ast (~> 2.4.1) racc psych (5.1.2) @@ -74,37 +74,38 @@ GEM psych (5.1.2-java) jar-dependencies (>= 0.1.7) public_suffix (5.0.5) - racc (1.7.3) - racc (1.7.3-java) + racc (1.8.0) + racc (1.8.0-java) rack (2.2.9) rainbow (3.1.1) rake (13.2.1) rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) - rbs (3.4.4) - abbrev + rbs (3.5.1) + logger rchardet (1.8.0) - rdoc (6.6.3.1) + rdoc (6.7.0) psych (>= 4.0.0) - regexp_parser (2.9.1) - reline (0.5.7) + regexp_parser (2.9.2) + reline (0.5.9) io-console (~> 0.5) - rexml (3.2.6) + rexml (3.3.0) + strscan rspec (3.13.0) rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) rspec-core (3.13.0) rspec-support (~> 3.13.0) - rspec-expectations (3.13.0) + rspec-expectations (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-mocks (3.13.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-support (3.13.1) - rubocop (1.63.5) + rubocop (1.64.1) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) @@ -117,20 +118,22 @@ GEM unicode-display_width (>= 2.4.0, < 3.0) rubocop-ast (1.31.3) parser (>= 3.3.1.0) - rubocop-capybara (2.20.0) - rubocop (~> 1.41) - rubocop-factory_bot (2.25.1) + rubocop-capybara (2.21.0) rubocop (~> 1.41) + rubocop-factory_bot (2.26.1) + rubocop (~> 1.61) rubocop-performance (1.21.0) rubocop (>= 1.48.1, < 2.0) rubocop-ast (>= 1.31.1, < 2.0) - rubocop-rspec (2.29.2) + rubocop-rake (0.6.0) + rubocop (~> 1.0) + rubocop-rspec (2.31.0) rubocop (~> 1.40) rubocop-capybara (~> 2.17) rubocop-factory_bot (~> 2.22) rubocop-rspec_rails (~> 2.28) - rubocop-rspec_rails (2.28.3) - rubocop (~> 1.40) + rubocop-rspec_rails (2.29.1) + rubocop (~> 1.61) ruby-progressbar (1.13.0) rubyzip (2.3.2) securerandom (0.3.1) @@ -149,7 +152,7 @@ GEM securerandom (>= 0.1) strscan (>= 1.0.0) terminal-table (>= 2, < 4) - stringio (3.1.0) + stringio (3.1.1) strscan (3.1.0) strscan (3.1.0-java) terminal-table (3.0.2) @@ -157,7 +160,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.5.0) - webmock (3.23.0) + webmock (3.23.1) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) @@ -181,6 +184,7 @@ DEPENDENCIES rspec (~> 3.0) rubocop (~> 1.60, >= 1.60.2) rubocop-performance (~> 1.15) + rubocop-rake (~> 0.6.0) rubocop-rspec (~> 2.16) selenium-devtools! selenium-webdriver! @@ -190,4 +194,4 @@ DEPENDENCIES yard (~> 0.9.11, >= 0.9.36) BUNDLED WITH - 2.5.10 + 2.5.6 diff --git a/rb/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb b/rb/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb index 2371fab85eebc..f691d54f83947 100644 --- a/rb/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb +++ b/rb/lib/selenium/webdriver/bidi/log/javascript_log_entry.rb @@ -24,7 +24,7 @@ class JavascriptLogEntry < GenericLogEntry attr_accessor :type def initialize(level:, text:, timestamp:, type:, stack_trace:) - super(level: level, text: text, timestamp: timestamp, type: type, stack_trace: stack_trace) + super @type = 'javascript' end end # JavascriptLogEntry diff --git a/rb/lib/selenium/webdriver/common/interactions/pointer_cancel.rb b/rb/lib/selenium/webdriver/common/interactions/pointer_cancel.rb index 98deffe2d0aef..8283766ac3b20 100644 --- a/rb/lib/selenium/webdriver/common/interactions/pointer_cancel.rb +++ b/rb/lib/selenium/webdriver/common/interactions/pointer_cancel.rb @@ -28,7 +28,7 @@ module Interactions class PointerCancel < Interaction def initialize(source) - super(source) + super @type = :pointerCancel end diff --git a/rb/lib/selenium/webdriver/common/interactions/wheel_input.rb b/rb/lib/selenium/webdriver/common/interactions/wheel_input.rb index 96a42fd3e7595..d19863188953e 100644 --- a/rb/lib/selenium/webdriver/common/interactions/wheel_input.rb +++ b/rb/lib/selenium/webdriver/common/interactions/wheel_input.rb @@ -28,7 +28,7 @@ module Interactions class WheelInput < InputDevice def initialize(name = nil) - super(name) + super @type = Interactions::WHEEL end diff --git a/rb/lib/selenium/webdriver/ie/options.rb b/rb/lib/selenium/webdriver/ie/options.rb index b649c38fbaaad..330cf19a79ff9 100644 --- a/rb/lib/selenium/webdriver/ie/options.rb +++ b/rb/lib/selenium/webdriver/ie/options.rb @@ -81,7 +81,7 @@ class Options < WebDriver::Options def initialize(**opts) @args = (opts.delete(:args) || []).to_set - super(**opts) + super @options[:native_events] = true if @options[:native_events].nil? end diff --git a/rb/lib/selenium/webdriver/remote/bidi_bridge.rb b/rb/lib/selenium/webdriver/remote/bidi_bridge.rb index 4207577cf14dc..935fdff5b2954 100644 --- a/rb/lib/selenium/webdriver/remote/bidi_bridge.rb +++ b/rb/lib/selenium/webdriver/remote/bidi_bridge.rb @@ -24,7 +24,7 @@ class BiDiBridge < Bridge attr_reader :bidi def create_session(capabilities) - super(capabilities) + super socket_url = @capabilities[:web_socket_url] @bidi = Selenium::WebDriver::BiDi.new(url: socket_url) end diff --git a/rb/lib/selenium/webdriver/remote/server_error.rb b/rb/lib/selenium/webdriver/remote/server_error.rb index a3e15c9dc3ae7..6e48066ea2bc3 100644 --- a/rb/lib/selenium/webdriver/remote/server_error.rb +++ b/rb/lib/selenium/webdriver/remote/server_error.rb @@ -23,7 +23,7 @@ module Error class ServerError < StandardError def initialize(response) if response.is_a? String - super(response) + super else super("status code #{response.code}; payload #{response.payload}") end diff --git a/rb/selenium-webdriver.gemspec b/rb/selenium-webdriver.gemspec index 90e2662aa1e85..f2f7576d16452 100644 --- a/rb/selenium-webdriver.gemspec +++ b/rb/selenium-webdriver.gemspec @@ -59,6 +59,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'rspec', ['~> 3.0'] s.add_development_dependency 'rubocop', ['~> 1.60', '>=1.60.2'] s.add_development_dependency 'rubocop-performance', ['~> 1.15'] + s.add_development_dependency 'rubocop-rake', ['~> 0.6.0'] s.add_development_dependency 'rubocop-rspec', ['~> 2.16'] s.add_development_dependency 'webmock', ['~> 3.5'] s.add_development_dependency 'webrick', ['~> 1.7'] From 2581454f8fb2c67a66df4126c85ff48910539365 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 11:15:05 -0500 Subject: [PATCH 080/176] [build] allow ruby lint command to lint the root Rakefile --- BUILD.bazel | 8 ++++++++ rb/BUILD.bazel | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/BUILD.bazel b/BUILD.bazel index df867ec44f7e8..1c07ff5298469 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -21,6 +21,14 @@ filegroup( visibility = ["//visibility:public"], ) +filegroup( + name = "rakefile", + srcs = [ + "Rakefile", + ], + visibility = ["//rb:__subpackages__",], +) + alias( name = "grid", actual = "//java/src/org/openqa/selenium/grid:executable-grid", diff --git a/rb/BUILD.bazel b/rb/BUILD.bazel index 3f997e36834a3..13fab229448ab 100644 --- a/rb/BUILD.bazel +++ b/rb/BUILD.bazel @@ -178,8 +178,12 @@ rb_test( "--autocorrect", "--config=rb/.rubocop.yml", "rb/", + "Rakefile", + ], + data = [ + ".rubocop.yml", + "//:rakefile", ], - data = [".rubocop.yml"], main = "@bundle//bin:rubocop", tags = ["no-sandbox"], deps = [ From 59747431dd80b07b3c5314ef530d7138672832c6 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 12:19:55 -0500 Subject: [PATCH 081/176] [build] update rubocop auto-fixes in Rakefile --- Rakefile | 224 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 113 insertions(+), 111 deletions(-) diff --git a/Rakefile b/Rakefile index 432922907c8b5..5169120c9befb 100644 --- a/Rakefile +++ b/Rakefile @@ -484,7 +484,8 @@ namespace :node do end task :'dry-run' do - Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish -- --dry-run=true') + Bazel.execute('run', ['--stamp'], + '//javascript/node/selenium-webdriver:selenium-webdriver.publish -- --dry-run=true') end desc 'Release Node npm package' @@ -510,28 +511,29 @@ namespace :node do end unless arguments[:skip_update] - puts "Updating JavaScript documentation" - puts update_gh_pages ? "JavaScript Docs updated!" : "JavaScript Doc update cancelled" + puts 'Updating JavaScript documentation' + puts update_gh_pages ? 'JavaScript Docs updated!' : 'JavaScript Doc update cancelled' end end desc 'Update JavaScript changelog' task :changelog do header = "## #{node_version}" - update_changelog(node_version, 'javascript', 'javascript/node/selenium-webdriver/', 'javascript/node/selenium-webdriver/CHANGES.md', header) + update_changelog(node_version, 'javascript', 'javascript/node/selenium-webdriver/', + 'javascript/node/selenium-webdriver/CHANGES.md', header) end desc 'Update Node version' task :version, [:version] do |_task, arguments| old_version = node_version - nightly = "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" + nightly = "-nightly#{Time.now.strftime('%Y%m%d%H%M')}" new_version = updated_version(old_version, arguments[:version], nightly) ['javascript/node/selenium-webdriver/package.json', 'package-lock.json', 'javascript/node/selenium-webdriver/BUILD.bazel'].each do |file| text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + File.open(file, 'w') { |f| f.puts text } end Rake::Task['node:changelog'].invoke unless new_version.include?(nightly) @@ -580,13 +582,13 @@ namespace :py do dirs.each { |dir| FileUtils.rm_rf("#{lib_path}/common/#{dir}") } Find.find(bazel_bin_path) do |path| - if File.directory?(path) && dirs.any? {|dir| path.include?("common/#{dir}")} + if File.directory?(path) && dirs.any? { |dir| path.include?("common/#{dir}") } Find.prune next end next if File.directory?(path) - target_file = File.join(lib_path, path.sub(/^#{bazel_bin_path}\//, '')) + target_file = File.join(lib_path, path.sub(%r{^#{bazel_bin_path}/}, '')) if File.exist?(target_file) puts "Removing target file: #{target_file}" FileUtils.rm(target_file) @@ -606,8 +608,8 @@ namespace :py do end unless arguments[:skip_update] - puts "Updating Python documentation" - puts update_gh_pages ? "Python Docs updated!" : "Python Doc update cancelled" + puts 'Updating Python documentation' + puts update_gh_pages ? 'Python Docs updated!' : 'Python Doc update cancelled' end end @@ -631,7 +633,7 @@ namespace :py do desc 'Update Python version' task :version, [:version] do |_task, arguments| old_version = python_version - nightly = ".dev#{Time.now.strftime("%Y%m%d%H%M")}" + nightly = ".dev#{Time.now.strftime('%Y%m%d%H%M')}" new_version = updated_version(old_version, arguments[:version], nightly) ['py/setup.py', @@ -639,15 +641,15 @@ namespace :py do 'py/selenium/__init__.py', 'py/selenium/webdriver/__init__.py', 'py/docs/source/conf.py'].each do |file| - text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + text = File.read(file).gsub(old_version, new_version) + File.open(file, 'w') { |f| f.puts text } end old_short_version = old_version.split('.')[0..1].join('.') new_short_version = new_version.split('.')[0..1].join('.') text = File.read('py/docs/source/conf.py').gsub(old_short_version, new_short_version) - File.open('py/docs/source/conf.py', "w") { |f| f.puts text } + File.open('py/docs/source/conf.py', 'w') { |f| f.puts text } Rake::Task['py:changelog'].invoke unless new_version.include?(nightly) end @@ -668,15 +670,15 @@ namespace :py do desc "Python #{browser} tests" task browser do Rake::Task['py:clean'].invoke - Bazel.execute('test', [],"//py:common-#{browser}") - Bazel.execute('test', [],"//py:test-#{browser}") + Bazel.execute('test', [], "//py:common-#{browser}") + Bazel.execute('test', [], "//py:test-#{browser}") end end - desc "Python Remote tests with Firefox" + desc 'Python Remote tests with Firefox' task :remote do Rake::Task['py:clean'].invoke - Bazel.execute('test', [],"//py:test-remote") + Bazel.execute('test', [], '//py:test-remote') end end @@ -691,8 +693,8 @@ namespace :py do desc "Python #{browser} tests" task browser do Rake::Task['py:clean'].invoke - Bazel.execute('test', %w[--test_output all],"//py:common-#{browser}") - Bazel.execute('test', %w[--test_output all],"//py:test-#{browser}") + Bazel.execute('test', %w[--test_output all], "//py:common-#{browser}") + Bazel.execute('test', %w[--test_output all], "//py:test-#{browser}") end end end @@ -710,11 +712,11 @@ namespace :rb do webdriver = args.delete('webdriver') devtools = args.delete('devtools') if args.include?('--config=remote') || args.include?('--config=release') - File.open('rb/.ruby-version', 'w') { | file | file.write('jruby-9.4.7.0') } + File.write('rb/.ruby-version', 'jruby-9.4.7.0') end - Bazel.execute('build', args, '//rb:selenium-webdriver') if (webdriver || !devtools) - Bazel.execute('build', args, '//rb:selenium-devtools') if (devtools || !webdriver) + Bazel.execute('build', args, '//rb:selenium-webdriver') if webdriver || !devtools + Bazel.execute('build', args, '//rb:selenium-devtools') if devtools || !webdriver end desc 'Update generated Ruby files for local development' @@ -728,7 +730,7 @@ namespace :rb do task :release do |_task, arguments| args = arguments.to_a.compact if args.include?('--config=remote') || args.include?('--config=release') - File.open('rb/.ruby-version', 'w') { | file | file.write('jruby-9.4.7.0') } + File.write('rb/.ruby-version', 'jruby-9.4.7.0') end nightly = args.delete('nightly') @@ -747,14 +749,14 @@ namespace :rb do FileUtils.cp_r('bazel-bin/rb/docs.sh.runfiles/_main/docs/api/rb/.', 'build/docs/api/rb') unless arguments[:skip_update] - puts "Updating Ruby documentation" - puts update_gh_pages ? "Ruby Docs updated!" : "Ruby Doc update cancelled" + puts 'Updating Ruby documentation' + puts update_gh_pages ? 'Ruby Docs updated!' : 'Ruby Doc update cancelled' end end desc 'Update Ruby changelog' task :changelog do - header = "#{ruby_version} (#{Time.now.strftime("%Y-%m-%d")})\n=========================" + header = "#{ruby_version} (#{Time.now.strftime('%Y-%m-%d')})\n=========================" update_changelog(ruby_version, 'rb', 'rb/lib/', 'rb/CHANGES', header) end @@ -765,7 +767,7 @@ namespace :rb do file = 'rb/lib/selenium/webdriver/version.rb' text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + File.open(file, 'w') { |f| f.puts text } Rake::Task['rb:changelog'].invoke unless new_version.include?('.nightly') sh 'cd rb && bundle --version && bundle update' @@ -798,9 +800,9 @@ namespace :dotnet do FileUtils.rm_f(Dir.glob('build/dist/*dotnet*')) FileUtils.copy('bazel-bin/dotnet/release.zip', "build/dist/selenium-dotnet-#{dotnet_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-dotnet-#{dotnet_version}.zip") + FileUtils.chmod(0o666, "build/dist/selenium-dotnet-#{dotnet_version}.zip") FileUtils.copy('bazel-bin/dotnet/strongnamed.zip', "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip") + FileUtils.chmod(0o666, "build/dist/selenium-dotnet-strongnamed-#{dotnet_version}.zip") end desc 'Upload nupkg files to Nuget' @@ -857,8 +859,8 @@ namespace :dotnet do end unless arguments[:skip_update] - puts "Updating .NET documentation" - puts update_gh_pages ? ".NET Docs updated!" : ".NET Doc update cancelled" + puts 'Updating .NET documentation' + puts update_gh_pages ? '.NET Docs updated!' : '.NET Doc update cancelled' end end @@ -871,12 +873,12 @@ namespace :dotnet do desc 'Update .NET version' task :version, [:version] do |_task, arguments| old_version = dotnet_version - nightly = "-nightly#{Time.now.strftime("%Y%m%d%H%M")}" + nightly = "-nightly#{Time.now.strftime('%Y%m%d%H%M')}" new_version = updated_version(old_version, arguments[:version], nightly) file = 'dotnet/selenium-dotnet-version.bzl' text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + File.open(file, 'w') { |f| f.puts text } Rake::Task['dotnet:changelog'].invoke unless new_version.include?(nightly) end @@ -907,13 +909,13 @@ namespace :java do FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/server-zip.zip', "build/dist/selenium-server-#{java_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-server-#{java_version}.zip") + FileUtils.chmod(0o666, "build/dist/selenium-server-#{java_version}.zip") FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/client-zip.zip', "build/dist/selenium-java-#{java_version}.zip") - FileUtils.chmod(0666, "build/dist/selenium-java-#{java_version}.zip") + FileUtils.chmod(0o666, "build/dist/selenium-java-#{java_version}.zip") FileUtils.copy('bazel-bin/java/src/org/openqa/selenium/grid/selenium', "build/dist/selenium-server-#{java_version}.jar") - FileUtils.chmod(0777, "build/dist/selenium-server-#{java_version}.jar") + FileUtils.chmod(0o777, "build/dist/selenium-server-#{java_version}.jar") end desc 'Deploy all jars to Maven' @@ -931,8 +933,8 @@ namespace :java do Rake::Task['javadocs'].invoke unless arguments[:skip_update] - puts "Updating Java documentation" - puts update_gh_pages ? "Java Docs updated!" : "Java Doc update cancelled" + puts 'Updating Java documentation' + puts update_gh_pages ? 'Java Docs updated!' : 'Java Doc update cancelled' end end @@ -954,7 +956,7 @@ namespace :java do versions = output.scan(/(\S+) \[\S+ -> (\S+)\]/).to_h versions.each do |artifact, version| if artifact.match?('graphql') - puts "WARNING — Cannot automatically update graphql" + puts 'WARNING — Cannot automatically update graphql' next end @@ -980,7 +982,7 @@ namespace :java do file = 'java/version.bzl' text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + File.open(file, 'w') { |f| f.puts text } Rake::Task['java:changelog'].invoke unless new_version.include?('-SNAPSHOT') end end @@ -1020,11 +1022,11 @@ namespace :rust do old_version.split('.').tap(&:shift).append('0').join('.') end updated = updated_version(equivalent_version, arguments[:version], '-nightly') - new_version = updated.split(/\.|-/).tap {|v| v.delete_at(2)}.unshift("0").join('.').gsub('.nightly', '-nightly') + new_version = updated.split(/\.|-/).tap { |v| v.delete_at(2) }.unshift('0').join('.').gsub('.nightly', '-nightly') ['rust/Cargo.toml', 'rust/BUILD.bazel'].each do |file| text = File.read(file).gsub(old_version, new_version) - File.open(file, "w") { |f| f.puts text } + File.open(file, 'w') { |f| f.puts text } end Rake::Task['rust:changelog'].invoke unless new_version.include?('-nightly') @@ -1038,7 +1040,7 @@ namespace :rust do task :commit do @git.reset commit!("update Rust version to #{rust_version}", - ['rust/BUILD.bazel', 'rust/Cargo.Bazel.lock', 'rust/Cargo.lock', 'rust/Cargo.toml']) + ['rust/BUILD.bazel', 'rust/Cargo.Bazel.lock', 'rust/Cargo.lock', 'rust/Cargo.toml']) commit!('Rust Changelog', ['rust/CHANGELOG.md']) end end @@ -1055,8 +1057,8 @@ namespace :all do Rake::Task['dotnet:docs'].invoke(true) Rake::Task['node:docs'].invoke(true) - puts "Updating All API Docs" - puts update_gh_pages ? "AP Docs updated!" : "API Doc update cancelled" + puts 'Updating All API Docs' + puts update_gh_pages ? 'AP Docs updated!' : 'API Doc update cancelled' end desc 'Build all artifacts for all language bindings' @@ -1085,23 +1087,23 @@ namespace :all do Rake::Task['all:docs'].invoke Rake::Task['all:version'].invoke('nightly') - puts "Committing nightly version updates" + puts 'Committing nightly version updates' commit!('update versions to nightly', ['java/version.bzl', - 'rb/lib/selenium/webdriver/version.rb', - 'rb/Gemfile.lock', - 'py/setup.py', - 'py/BUILD.bazel', - 'py/selenium/__init__.py', - 'py/selenium/webdriver/__init__.py', - 'py/docs/source/conf.py', - 'rust/BUILD.bazel', - 'rust/Cargo.Bazel.lock', - 'rust/Cargo.lock', - 'rust/Cargo.toml']) + 'rb/lib/selenium/webdriver/version.rb', + 'rb/Gemfile.lock', + 'py/setup.py', + 'py/BUILD.bazel', + 'py/selenium/__init__.py', + 'py/selenium/webdriver/__init__.py', + 'py/docs/source/conf.py', + 'rust/BUILD.bazel', + 'rust/Cargo.Bazel.lock', + 'rust/Cargo.lock', + 'rust/Cargo.toml']) print 'Do you want to push the committed changes? (Y/n): ' - response = STDIN.gets.chomp.downcase - @git.push if response == 'y' || response == 'yes' + response = $stdin.gets.chomp.downcase + @git.push if %w[y yes].include?(response) end desc 'Update everything in preparation for a release' @@ -1113,18 +1115,18 @@ namespace :all do Bazel.execute('run', args, '//scripts:update_cdp') commit!('Update supported versions for Chrome DevTools', - ['common/devtools/', - 'dotnet/src/webdriver/DevTools/', - 'dotnet/src/webdriver/WebDriver.csproj', - 'dotnet/test/common/DevTools/', - 'dotnet/test/common/CustomDriverConfigs/', - 'dotnet/selenium-dotnet-version.bzl', - 'java/src/org/openqa/selenium/devtools/', - 'javascript/node/selenium-webdriver/BUILD.bazel', - 'py/BUILD.bazel', - 'rb/lib/selenium/devtools/', - 'rb/Gemfile.lock', - 'Rakefile']) + ['common/devtools/', + 'dotnet/src/webdriver/DevTools/', + 'dotnet/src/webdriver/WebDriver.csproj', + 'dotnet/test/common/DevTools/', + 'dotnet/test/common/CustomDriverConfigs/', + 'dotnet/selenium-dotnet-version.bzl', + 'java/src/org/openqa/selenium/devtools/', + 'javascript/node/selenium-webdriver/BUILD.bazel', + 'py/BUILD.bazel', + 'rb/lib/selenium/devtools/', + 'rb/Gemfile.lock', + 'Rakefile']) Bazel.execute('run', args, '//scripts:selenium_manager') commit!('Update selenium manager version', ['common/selenium_manager.bzl']) @@ -1176,8 +1178,8 @@ end desc 'Create Release Notes for Minor Release' task :create_release_notes do range = "#{previous_tag(java_version)}...HEAD" - format = "* [\\`%h\\`](http://github.com/seleniumhq/selenium/commit/%H) - %s :: %aN" - git_log_command = %Q(git --no-pager log "#{range}" --pretty=format:"#{format}" --reverse) + format = '* [\\`%h\\`](http://github.com/seleniumhq/selenium/commit/%H) - %s :: %aN' + git_log_command = %(git --no-pager log "#{range}" --pretty=format:"#{format}" --reverse) git_log_output = `#{git_log_command}` release_notes = <<~RELEASE_NOTES @@ -1209,7 +1211,7 @@ end def updated_version(current, desired = nil, nightly = nil) if !desired.nil? && desired != 'nightly' # If desired is present, return full 3 digit version - desired.split('.').tap {|v| v << 0 while v.size < 3}.join('.') + desired.split('.').tap { |v| v << 0 while v.size < 3 }.join('.') elsif current.split(/\.|-/).size > 3 # if current version is already nightly, just need to bump it; this will be noop for some languages pattern = /-?\.?(nightly|SNAPSHOT|dev)\d*$/ @@ -1224,57 +1226,57 @@ def update_gh_pages origin_reference = @git.current_branch origin_reference ||= begin # This allows updating docs from a tagged commit instead of a branch - puts "commit is not at HEAD, checking for matching tag" - tag = @git.tags.detect {|tag| tag.sha == @git.revparse("HEAD") } - tag ? tag.name : raise(StandardError, "Must be on a tagged commit or at the HEAD of a branch to update API Docs") + puts 'commit is not at HEAD, checking for matching tag' + tag = @git.tags.detect { |tag| tag.sha == @git.revparse('HEAD') } + tag ? tag.name : raise(StandardError, 'Must be on a tagged commit or at the HEAD of a branch to update API Docs') end - puts "Checking out gh-pages" + puts 'Checking out gh-pages' begin @git.checkout('gh-pages') - rescue Git::FailedError => ex + rescue Git::FailedError => e # This happens when the working directory is not clean and things need to be stashed or committed - line = ex.message.lines[2].gsub("output: \"error: ", '') + line = e.message.lines[2].gsub('output: "error: ', '') puts line.gsub('\t', "\t").split('\n')[0...-2].join("\n") # TODO: we could offer to automatically fix with a stash, but there may be edge cases - print "Manually Fix and Retry? (Y/n):" - response = STDIN.gets.chomp.downcase - return false unless response == 'y' || response == 'yes' + print 'Manually Fix and Retry? (Y/n):' + response = $stdin.gets.chomp.downcase + return false unless %w[y yes].include?(response) retry end - puts "Updating gh-pages branch from upstream repository" + puts 'Updating gh-pages branch from upstream repository' begin @git.pull - rescue Git::FailedError => ex + rescue Git::FailedError => e # This happens when upstream is not already set - line = ex.message.lines[2].gsub("output: \"error: ", '') + line = e.message.lines[2].gsub('output: "error: ', '') puts line.gsub('\t', "\t").split('\n').delete_if(&:empty?)[-2...-1].join("\n") - print "Manually Fix and Retry? (Y/n):" - response = STDIN.gets.chomp.downcase - return restore_git(origin_reference) unless response == 'y' || response == 'yes' + print 'Manually Fix and Retry? (Y/n):' + response = $stdin.gets.chomp.downcase + return restore_git(origin_reference) unless %w[y yes].include?(response) retry end %w[java rb py dotnet javascript].each do |language| - if Dir.exist?("build/docs/api/#{language}") && !Dir.empty?("build/docs/api/#{language}") - puts "Deleting #{language} directory in docs/api since corresponding directory in build/docs/api is not empty" - FileUtils.rm_rf("docs/api/#{language}") - puts "Moving documentation files from untracked build directory to tracked docs directory" - FileUtils.mv("build/docs/api/#{language}", "docs/api/#{language}") - end + next unless Dir.exist?("build/docs/api/#{language}") && !Dir.empty?("build/docs/api/#{language}") + + puts "Deleting #{language} directory in docs/api since corresponding directory in build/docs/api is not empty" + FileUtils.rm_rf("docs/api/#{language}") + puts 'Moving documentation files from untracked build directory to tracked docs directory' + FileUtils.mv("build/docs/api/#{language}", "docs/api/#{language}") end print 'Do you want to commit the changes? (Y/n): ' - response = STDIN.gets.chomp.downcase - return restore_git(origin_reference) unless response == 'y' || response == 'yes' + response = $stdin.gets.chomp.downcase + return restore_git(origin_reference) unless %w[y yes].include?(response) - puts "Committing changes" + puts 'Committing changes' commit!('updating all API docs', ['docs/api/']) - puts "Pushing changes to upstream repository" + puts 'Pushing changes to upstream repository' @git.push puts "Checking out originating branch/tag — #{origin_reference}" @@ -1283,36 +1285,36 @@ def update_gh_pages end def restore_git(origin_reference) - puts "Stashing docs changes for gh-pages" - Git::Stash.new(@git, "docs changes for gh-pages") + puts 'Stashing docs changes for gh-pages' + Git::Stash.new(@git, 'docs changes for gh-pages') puts "Checking out originating branch/tag — #{origin_reference}" @git.checkout(origin_reference) false end -def previous_tag(current_version, language=nil) +def previous_tag(current_version, language = nil) version = current_version.split(/\.|-/) if version.size > 3 - puts "WARNING - Changelogs not updated when set to prerelease" + puts 'WARNING - Changelogs not updated when set to prerelease' elsif version[2].to_i > 1 # specified as patch release patch_version = (version[2].to_i - 1).to_s "selenium-#{[[version[0]], version[1], patch_version].join('.')}-#{language}" - elsif version[2] == "1" + elsif version[2] == '1' # specified as patch release; special case - "selenium-#{[[version[0]], version[1], "0"].join('.')}" + "selenium-#{[[version[0]], version[1], '0'].join('.')}" else minor_version = (version[1].to_i - 1) tags = @git.tags.map(&:name) - tag = language ? tags.select { |tag| tag.match?(/selenium-4\.#{minor_version}.*-#{language}/) }.last : nil - tag || "selenium-#{[[version[0]], minor_version, "0"].join('.')}" + tag = language ? tags.reverse.find { |tag| tag.match?(/selenium-4\.#{minor_version}.*-#{language}/) } : nil + tag || "selenium-#{[[version[0]], minor_version, '0'].join('.')}" end end def update_changelog(version, language, path, changelog, header) tag = previous_tag(version, language) log = `git --no-pager log #{tag}...HEAD --pretty=format:">>> %B" --reverse #{path}` - commits = log.split(">>>").map { |entry| + commits = log.split('>>>').map { |entry| lines = entry.split("\n") lines.reject! { |line| line.match?(/^(----|Co-authored|Signed-off)/) || line.empty? } lines.join("\n") @@ -1332,6 +1334,6 @@ def commit!(message, files = [], all: false) @git.add(file) end all ? @git.commit_all(message) : @git.commit(message) -rescue Git::FailedError => ex - puts ex.message +rescue Git::FailedError => e + puts e.message end From ce96b41bfe113d96d8eb3603a01c588a367e8232 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 14:27:24 -0500 Subject: [PATCH 082/176] [build] fix all linter errors for Rakefile --- Rakefile | 44 ++++++++++++------------ rake_tasks/selenium_rake/ie_generator.rb | 2 ++ rb/.rubocop.yml | 1 + 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/Rakefile b/Rakefile index 5169120c9befb..27abfa8e49f5b 100644 --- a/Rakefile +++ b/Rakefile @@ -11,8 +11,6 @@ require 'open-uri' require 'git' require 'find' -include Rake::DSL - Rake.application.instance_variable_set(:@name, 'go') orig_verbose = verbose verbose(false) @@ -271,16 +269,13 @@ ie_generator.generate_type_mapping( desc 'Generate Javadocs' task javadocs: %i[//java/src/org/openqa/selenium/grid:all-javadocs] do - rm_rf 'build/docs/api/java' - mkdir_p 'build/docs/api/java' - + FileUtils.rm_rf('build/docs/api/java') + FileUtils.mkdir_p('build/docs/api/java') out = 'bazel-bin/java/src/org/openqa/selenium/grid/all-javadocs.jar' cmd = %(cd build/docs/api/java && jar xf "../../../../#{out}" 2>&1) cmd = cmd.tr('/', '\\').tr(':', ';') if SeleniumRake::Checks.windows? - - ok = system(cmd) - ok or raise 'could not unpack javadocs' + raise 'could not unpack javadocs' unless system(cmd) File.open('build/docs/api/java/stylesheet.css', 'a') do |file| file.write(<<~STYLE @@ -341,28 +336,28 @@ end task 'release-java': %i[java-release-zip publish-maven] +# TODO: just set the environment variables that maven is asking for def read_m2_user_pass - # First check env vars, then the settings.xml config inside .m2 - user = nil - pass = nil - if ENV['SEL_M2_USER'] && ENV['SEL_M2_PASS'] + user = ENV.fetch('SEL_M2_USER', nil) + pass = ENV.fetch('SEL_M2_PASS', nil) + if user && pass puts 'Fetching m2 user and pass from environment variables.' - user = ENV['SEL_M2_USER'] - pass = ENV['SEL_M2_PASS'] return [user, pass] end + + puts 'Fetching m2 user and pass from /.m2/settings.xml.' settings = File.read("#{Dir.home}/.m2/settings.xml") found_section = false settings.each_line do |line| if !found_section found_section = line.include? 'sonatype-nexus-staging' - elsif user.nil? && line.include?('') - user = line.split('')[1].split('') - pass = line.split('')[1].split('') + user = line[%r{(.*?)}, 1] + elsif line.include?('') + pass = line[%r{(.*?)}, 1] end + break if user && pass end - [user, pass] end @@ -822,7 +817,9 @@ namespace :dotnet do api_key = ENV.fetch('GITHUB_TOKEN', nil) github_push_url = 'https://nuget.pkg.github.com/seleniumhq/index.json' push_destination = 'github' - sh "dotnet nuget add source --username seleniumhq --password #{api_key} --store-password-in-clear-text --name #{push_destination} #{github_push_url}" + flags = ['--username', 'seleniumhq', '--password', api_key, '--store-password-in-clear-text', '--name', + push_destination, github_push_url] + sh "dotnet nuget add source #{flags.join(' ')}" end ["./bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.#{dotnet_version}.nupkg", @@ -1049,7 +1046,7 @@ end namespace :all do desc 'Update all API Documentation' task :docs do - FileUtils.rm_rf('build/docs/api') if Dir.exist?('build/docs/api') + FileUtils.rm_rf('build/docs/api') Rake::Task['java:docs'].invoke(true) Rake::Task['py:docs'].invoke(true) @@ -1222,12 +1219,14 @@ def updated_version(current, desired = nil, nightly = nil) end end +# TODO: make this less insane +# rubocop:disable all def update_gh_pages origin_reference = @git.current_branch origin_reference ||= begin # This allows updating docs from a tagged commit instead of a branch puts 'commit is not at HEAD, checking for matching tag' - tag = @git.tags.detect { |tag| tag.sha == @git.revparse('HEAD') } + tag = @git.tags.detect { |t| t.sha == @git.revparse('HEAD') } tag ? tag.name : raise(StandardError, 'Must be on a tagged commit or at the HEAD of a branch to update API Docs') end @@ -1283,6 +1282,7 @@ def update_gh_pages @git.checkout(origin_reference) true end +# rubocop:disable all def restore_git(origin_reference) puts 'Stashing docs changes for gh-pages' diff --git a/rake_tasks/selenium_rake/ie_generator.rb b/rake_tasks/selenium_rake/ie_generator.rb index 62657b9a0fce1..fcffebb564e2f 100644 --- a/rake_tasks/selenium_rake/ie_generator.rb +++ b/rake_tasks/selenium_rake/ie_generator.rb @@ -6,6 +6,8 @@ # string identifier. module SeleniumRake class IEGenerator + include Rake::DSL + def generate_type_mapping(args) types_mapping_file = args[:src] generated_file = args[:out].to_s diff --git a/rb/.rubocop.yml b/rb/.rubocop.yml index 322952458760c..cd119ce4e2826 100644 --- a/rb/.rubocop.yml +++ b/rb/.rubocop.yml @@ -33,6 +33,7 @@ Metrics/BlockLength: Exclude: - 'spec/**/*.rb' - 'selenium-*.gemspec' + - '../Rakefile*' Metrics/ClassLength: CountComments: false From dc28798a81246cb9b7964387d75f47626e342500 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 16:44:13 -0500 Subject: [PATCH 083/176] [rb] linter needs to ignore the the name of Rakefile --- rb/.rubocop.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rb/.rubocop.yml b/rb/.rubocop.yml index cd119ce4e2826..14142a7db62a8 100644 --- a/rb/.rubocop.yml +++ b/rb/.rubocop.yml @@ -78,6 +78,8 @@ Metrics/PerceivedComplexity: Naming/FileName: Exclude: - 'lib/selenium-webdriver.rb' + - 'Rakefile' + - '../Rakefile' Naming/MethodParameterName: AllowedNames: From 164497af064ce39f5e255cd6af5a95ba0e54779c Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 16:49:54 -0500 Subject: [PATCH 084/176] [rb] remove guard on test; Google fixed invalid locator error bug --- rb/spec/integration/selenium/webdriver/driver_spec.rb | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index 8b85148a3e1f8..d22143fcea127 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -147,10 +147,7 @@ module WebDriver }.to raise_error(Error::NoSuchElementError, /errors#no-such-element-exception/) end - it 'raises if invalid locator', - except: {browser: %i[chrome edge], - reason: 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4743'}, - exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do + it 'raises if invalid locator', exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do driver.navigate.to url_for('xhtmlTest.html') expect { driver.find_element(xpath: '*?//-') From 9938f157a229fe5584b0988d3800561102ff35ae Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 16:52:41 -0500 Subject: [PATCH 085/176] [py] fix linting errors --- .../unit/selenium/webdriver/common/common_options_tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/py/test/unit/selenium/webdriver/common/common_options_tests.py b/py/test/unit/selenium/webdriver/common/common_options_tests.py index fcb6303fd7298..951a5dafa5654 100644 --- a/py/test/unit/selenium/webdriver/common/common_options_tests.py +++ b/py/test/unit/selenium/webdriver/common/common_options_tests.py @@ -92,6 +92,6 @@ def test_enable_bidi(): def test_set_socket_url(): options = ArgOptions() - options.web_socket_url = 'socket_url' + options.web_socket_url = "socket_url" assert options.enable_bidi is True - assert options.web_socket_url is 'socket_url' + assert options.web_socket_url == "socket_url" From 26b244e8d58d2faaf20b784893a25f8893240137 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 20:58:15 -0500 Subject: [PATCH 086/176] [build] remove extra comma in build file --- BUILD.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD.bazel b/BUILD.bazel index 1c07ff5298469..43f9fae6400da 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -26,7 +26,7 @@ filegroup( srcs = [ "Rakefile", ], - visibility = ["//rb:__subpackages__",], + visibility = ["//rb:__subpackages__"], ) alias( From dbe7a180e6ad053c5da5dfb9d004a116634dd456 Mon Sep 17 00:00:00 2001 From: Selenium CI Bot Date: Fri, 14 Jun 2024 04:07:43 +0200 Subject: [PATCH 087/176] [dotnet][rb][java][js][py] Automated Browser Version Update (#14053) Update pinned browser versions Co-authored-by: Selenium CI Bot --- common/repositories.bzl | 50 ++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/common/repositories.bzl b/common/repositories.bzl index e2ba82da57577..334404c813c90 100644 --- a/common/repositories.bzl +++ b/common/repositories.bzl @@ -11,8 +11,8 @@ def pin_browsers(): http_archive( name = "linux_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/126.0.1/linux-x86_64/en-US/firefox-126.0.1.tar.bz2", - sha256 = "9c5fabd24f90f32c2526f62c41066c7a2ac80af382dccd141f5df728e9a68ec1", + url = "https://ftp.mozilla.org/pub/firefox/releases/127.0/linux-x86_64/en-US/firefox-127.0.tar.bz2", + sha256 = "0d1a523f2348cb3068d792ca7cb31b209d0c6c8e4b95bcd708f4c096a88d0ae9", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -33,8 +33,8 @@ js_library( dmg_archive( name = "mac_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/126.0.1/mac/en-US/Firefox%20126.0.1.dmg", - sha256 = "53f43ddaf684a52ea40695a967bd650fda5e12aa1346028fca40aac74d3e74ee", + url = "https://ftp.mozilla.org/pub/firefox/releases/127.0/mac/en-US/Firefox%20127.0.dmg", + sha256 = "3c30cbc8ae2ad0dc44ac32a266c871bd0866ca2c2876b464c86193ae5ffe6e6d", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -50,8 +50,8 @@ js_library( http_archive( name = "linux_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/127.0b7/linux-x86_64/en-US/firefox-127.0b7.tar.bz2", - sha256 = "ed1f4dce356345f16809aad3f05cc0157be79d6022cd1913f194f403d2f7b6b8", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b2/linux-x86_64/en-US/firefox-128.0b2.tar.bz2", + sha256 = "b621c23f59ad08d536c20b5d1ff40d235bb4b0e05aeba6ff115438642e83ea48", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -72,8 +72,8 @@ js_library( dmg_archive( name = "mac_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/127.0b7/mac/en-US/Firefox%20127.0b7.dmg", - sha256 = "bc4de3afcdf10b69f795405408a9e1ab6238fa1d909c162f58423dca2a80fad2", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b2/mac/en-US/Firefox%20128.0b2.dmg", + sha256 = "41fe14f425bc0f5777b52fd98fb6a425ead516b7c68df7acec3d1da087d9d0fc", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -123,10 +123,10 @@ js_library( pkg_archive( name = "mac_edge", - url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/1f54c158-9eb1-4a0a-81d7-85f728cd3268/MicrosoftEdge-125.0.2535.67.pkg", - sha256 = "c6c2f71782e744f9dda968bca701cf8b6fbe7e6f1cf5ffe166aaf8c86453bfb7", + url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/afca7d24-09f1-4c8b-825b-0e043b6ad3eb/MicrosoftEdge-126.0.2592.56.pkg", + sha256 = "ab7c962acd1effed05fb71c91e098360299163197a7e2111dfeac1f420430046", move = { - "MicrosoftEdge-125.0.2535.67.pkg/Payload/Microsoft Edge.app": "Edge.app", + "MicrosoftEdge-126.0.2592.56.pkg/Payload/Microsoft Edge.app": "Edge.app", }, build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -143,8 +143,8 @@ js_library( deb_archive( name = "linux_edge", - url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_125.0.2535.67-1_amd64.deb", - sha256 = "f366e48b229626a54b0788c1686bb811d274ba4978e322a8a4379c024af3b94d", + url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_126.0.2592.56-1_amd64.deb", + sha256 = "3592e53c6819a3ca3319648b0f8cf31446bcbe22aad5cf16d71c963ae6918d76", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -165,8 +165,8 @@ js_library( http_archive( name = "linux_edgedriver", - url = "https://msedgedriver.azureedge.net/125.0.2535.67/edgedriver_linux64.zip", - sha256 = "6b643b209f260953b275ce8f1d210e45fbe29566dc41ee9250ffd2fb0ca18420", + url = "https://msedgedriver.azureedge.net/125.0.2535.92/edgedriver_linux64.zip", + sha256 = "0110e7a091787f3d723ad8dfedcedda3e2b1b9bee6f34e9020da0af10308eaa1", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -182,8 +182,8 @@ js_library( http_archive( name = "mac_edgedriver", - url = "https://msedgedriver.azureedge.net/125.0.2535.67/edgedriver_mac64.zip", - sha256 = "35322ecc742393e28fdce476743c17599bdf57ebdfa75fd6cfd036e31ec9fdda", + url = "https://msedgedriver.azureedge.net/125.0.2535.92/edgedriver_mac64.zip", + sha256 = "fcc1057325be98312f6ad66638fde0195c5a88eee87be31c5a63ccd9154c361b", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -199,8 +199,8 @@ js_library( http_archive( name = "linux_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.78/linux64/chrome-linux64.zip", - sha256 = "ac6b39d129d80b555c153306f30cb57141a374e31a35ffdbed8c829c3de429d7", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/linux64/chrome-linux64.zip", + sha256 = "14492d3cfe33cb11d4cc310321182ebf839d33687494c0bb528b05225b9b5f0c", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -221,8 +221,8 @@ js_library( http_archive( name = "mac_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.78/mac-x64/chrome-mac-x64.zip", - sha256 = "d278a539d588cd1c4b5bbb7f7d95f6806dc5e95777bf4f523722563439e060cf", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/mac-x64/chrome-mac-x64.zip", + sha256 = "5b7753cc0102151c8e162c4ed66df8303e390d90ae193a290db1c406cf0fa644", strip_prefix = "chrome-mac-x64", patch_cmds = [ "mv 'Google Chrome for Testing.app' Chrome.app", @@ -243,8 +243,8 @@ js_library( http_archive( name = "linux_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.78/linux64/chromedriver-linux64.zip", - sha256 = "ebbad794325e0d2a5ca4484d42ad2b552d9b4963f2dc65d59d3a3a7702809d95", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/linux64/chromedriver-linux64.zip", + sha256 = "eef5a27798bd6cecae18bdaff64773bf6c96d99a9634d6434127120eb89ac713", strip_prefix = "chromedriver-linux64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -261,8 +261,8 @@ js_library( http_archive( name = "mac_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/125.0.6422.78/mac-x64/chromedriver-mac-x64.zip", - sha256 = "d608be856ad52fe98107ca473179d7ffc93344242a1aebadffec0effdc81001b", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/mac-x64/chromedriver-mac-x64.zip", + sha256 = "3af4643bf9815ce93722a66dbe32b33ac04f05a673abe60e6fffd2b17b6007d9", strip_prefix = "chromedriver-mac-x64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") From a540877edae1337bcf493236aadefd858971084b Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 22:31:42 -0500 Subject: [PATCH 088/176] [rb] restart driver in tests due to chromedriver bug in network_conditions --- rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb b/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb index 1e50fce967419..b3c3aba0588c4 100644 --- a/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/chrome/driver_spec.rb @@ -134,6 +134,9 @@ module Chrome error = /network conditions must be set before it can be retrieved/ expect { driver.network_conditions }.to raise_error(Error::UnknownError, error) + + # Need to reset because https://bugs.chromium.org/p/chromedriver/issues/detail?id=4790 + reset_driver! end # This requires cast sinks to run From 95928d3d418837f4d46b391eb0485cb7edc773dd Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 22:59:55 -0500 Subject: [PATCH 089/176] [build] fix nightly workflow by moving the env reference to the right line --- .github/workflows/nightly.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 3683cb41069cc..5473d7451e56e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,6 +27,8 @@ jobs: if: (github.repository_owner == 'seleniumhq') && (inputs.language == 'ruby' || github.event_name == 'schedule') name: Ruby uses: ./.github/workflows/bazel.yml + env: + GEM_HOST_API_KEY: "Bearer $GITHUB_TOKEN" strategy: fail-fast: false matrix: @@ -35,8 +37,6 @@ jobs: with: name: Nightly Ruby Release cache-key: rb-nightly-${{ matrix.gem }} - env: - GEM_HOST_API_KEY: "Bearer $GITHUB_TOKEN" run: ./go rb:release['nightly', '--config=release'] on-ruby-failure: name: On Ruby Failure From cb1458ba56b04c201f42f4423bf52de337d698bd Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 23:01:19 -0500 Subject: [PATCH 090/176] [rb] remove guard from test based on bug fix in firefox --- .../integration/selenium/webdriver/firefox/driver_spec.rb | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb index d522b2d6b3cbf..09d8ee5554886 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb @@ -44,10 +44,8 @@ module Firefox page: {width: 30})).to include(magic_number) end - it 'prints full page', except: [{platform: :windows, - reason: 'Some issues with resolution?'}, - {platform: :macosx, - reason: 'showing half resolution of what expected'}] do + it 'prints full page', except: {platform: :windows, + reason: 'Some issues with resolution?'} do viewport_width = driver.execute_script('return window.innerWidth;') viewport_height = driver.execute_script('return window.innerHeight;') @@ -64,6 +62,7 @@ module Firefox describe '#install_addon' do it 'install and uninstall xpi file' do + Selenium::WebDriver.logger.level = :debug ext = File.expand_path("#{extensions}/webextensions-selenium-example.xpi", __dir__) id = driver.install_addon(ext) From b3da45e4fcbc89adf65cfe30f6cb98b32356b313 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 23:18:44 -0500 Subject: [PATCH 091/176] [build] fix nightly workflow --- .github/workflows/nightly.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5473d7451e56e..a15d13438dd3f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -27,8 +27,6 @@ jobs: if: (github.repository_owner == 'seleniumhq') && (inputs.language == 'ruby' || github.event_name == 'schedule') name: Ruby uses: ./.github/workflows/bazel.yml - env: - GEM_HOST_API_KEY: "Bearer $GITHUB_TOKEN" strategy: fail-fast: false matrix: @@ -37,7 +35,9 @@ jobs: with: name: Nightly Ruby Release cache-key: rb-nightly-${{ matrix.gem }} - run: ./go rb:release['nightly', '--config=release'] + run: | + export GEM_HOST_API_KEY="Bearer $GITHUB_TOKEN" + ./go rb:release['nightly','--config=release'] on-ruby-failure: name: On Ruby Failure runs-on: ubuntu-latest @@ -63,7 +63,7 @@ jobs: with: name: Nightly Python Release cache-key: python-nightly - run: ./go py:release['nightly', '--config=release'] + run: ./go py:release['nightly','--config=release'] secrets: inherit on-python-failure: name: On Python Failure @@ -90,7 +90,7 @@ jobs: with: name: Nightly Java Release cache-key: java-nightly - run: ./go publish-maven-snapshot + run: ./go java:release[nightly,--config=release] secrets: inherit on-java-failure: name: On Java Failure @@ -118,7 +118,7 @@ jobs: name: Nightly DotNet Release cache-key: dotnet-nightly dotnet-version: '6.x' - run: ./go dotnet:release['nightly', '--config=release'] + run: ./go dotnet:release['nightly','--config=release'] secrets: inherit on-dotnet-failure: name: On .NET Failure @@ -179,7 +179,7 @@ jobs: echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc echo "@seleniumhq:registry=https://npm.pkg.github.com" >> ~/.npmrc echo "always-auth=true" >> ~/.npmrc - ./go node:release['nightly', '--config=release'] + ./go node:release['nightly','--config=release'] secrets: inherit on-javascript-failure: name: On JavaScript Failure From 8337f8a1f8e4cd964a1791dc176e491844bd35f0 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 13 Jun 2024 23:52:56 -0500 Subject: [PATCH 092/176] [build] revert the change to the Java nightly release command config=release is not yet supported --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index a15d13438dd3f..543f1e9e761c4 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -90,7 +90,7 @@ jobs: with: name: Nightly Java Release cache-key: java-nightly - run: ./go java:release[nightly,--config=release] + run: ./go publish-maven-snapshot secrets: inherit on-java-failure: name: On Java Failure From 9d188b127c543892ef50a04f3c2968051263cf16 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 07:57:59 -0500 Subject: [PATCH 093/176] [build] don't install browsers on ci; either they are pinned or selenium manager will get them --- .github/workflows/bazel.yml | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index a737794d89892..41a100327c9db 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -143,22 +143,6 @@ jobs: - name: Set resolution if: inputs.os == 'windows' && inputs.browser != '' run: Set-DisplayResolution -Width 1920 -Height 1080 -Force - - name: Setup Chrome - if: inputs.browser == 'chrome' - uses: browser-actions/setup-chrome@latest - with: - chrome-version: ${{ inputs.browser-version || 'stable' }} - - name: Setup Firefox - if: inputs.browser == 'firefox' - uses: abhi1693/setup-browser@v0.3.5 - with: - browser: firefox - version: ${{ inputs.browser-version || 'latest' }} - - name: Setup Edge - if: inputs.browser == 'edge' - uses: browser-actions/setup-edge@latest - with: - edge-version: ${{ inputs.browser-version || 'stable' }} - name: Setup Safari if: inputs.browser == 'safari' run: sudo safaridriver --enable From 79075199d586f97c284ed6ba88b19128b28b313c Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 08:17:54 -0500 Subject: [PATCH 094/176] [rb] restart driver in edge tests after deleting network conditions due to bug --- rb/spec/integration/selenium/webdriver/edge/driver_spec.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb b/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb index b3f739582a792..cdb02e24f9ea7 100644 --- a/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/edge/driver_spec.rb @@ -43,6 +43,9 @@ module Edge 'upload_throughput' => -1 ) driver.delete_network_conditions + + # Need to reset because https://bugs.chromium.org/p/chromedriver/issues/detail?id=4790 + reset_driver! end it 'sets download path' do From 0650cfbdbf807f42a42a4380bdc2ba28e4a869c5 Mon Sep 17 00:00:00 2001 From: Diego Molina Date: Fri, 14 Jun 2024 15:18:45 +0200 Subject: [PATCH 095/176] Updating Firefox AddOns for Testing (#13999) * Updating Firefox AddOns for Testing * Running format script. --------- Co-authored-by: Titus Fortner --- .skipped-tests | 1 - .../META-INF/cose.manifest | 12 +++++++++ .../META-INF/cose.sig | Bin 0 -> 3123 bytes .../META-INF/manifest.mf | 20 ++++++++++---- .../META-INF/mozilla.rsa | Bin 4200 -> 4370 bytes .../META-INF/mozilla.sf | 4 +-- .../manifest.json | 25 +++++++++++------- ...ebextensions-selenium-example-unsigned.zip | Bin 1055 -> 775 bytes .../webextensions-selenium-example.xpi | Bin 4692 -> 8038 bytes .../webextensions-selenium-example.zip | Bin 4692 -> 8244 bytes .../manifest.json | 23 +++++++++------- .../selenium/firefox/ExtensionsTest.java | 10 +++---- .../firefox/RemoteFirefoxDriverTest.java | 2 +- .../firefox/ff_installs_addons_tests.py | 10 +++---- .../selenium/webdriver/firefox/driver_spec.rb | 16 ++++++----- 15 files changed, 78 insertions(+), 45 deletions(-) create mode 100644 common/extensions/webextensions-selenium-example-signed/META-INF/cose.manifest create mode 100644 common/extensions/webextensions-selenium-example-signed/META-INF/cose.sig diff --git a/.skipped-tests b/.skipped-tests index 4764a7b9cbe08..15dc35e335372 100644 --- a/.skipped-tests +++ b/.skipped-tests @@ -27,7 +27,6 @@ -//rb/spec/integration/selenium/webdriver/firefox:service-firefox -//rb/spec/integration/selenium/webdriver/firefox:service-firefox-beta -//rb/spec/integration/selenium/webdriver:element-chrome --//rb/spec/integration/selenium/webdriver/firefox:driver-firefox-beta -//rb/spec/integration/selenium/webdriver/chrome:service-chrome-bidi -//rb/spec/integration/selenium/webdriver/edge:service-edge-bidi -//rb/spec/integration/selenium/webdriver/firefox:service-firefox-bidi diff --git a/common/extensions/webextensions-selenium-example-signed/META-INF/cose.manifest b/common/extensions/webextensions-selenium-example-signed/META-INF/cose.manifest new file mode 100644 index 0000000000000..3985ff3213c4f --- /dev/null +++ b/common/extensions/webextensions-selenium-example-signed/META-INF/cose.manifest @@ -0,0 +1,12 @@ +Manifest-Version: 1.0 + +Name: inject.js +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: b2nrco3zOUBDJuyARPlsNEU8O9A= +SHA256-Digest: lU8GPe0dnC/AH4PaP0/akwta9vNay0n7fsgkBOieLsg= + +Name: manifest.json +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: EjY6pS7xUwQxN7ijQqys3bdEHHc= +SHA256-Digest: eLH2wKnhmjOvDJk/13OJMeh+X4sdlSpbOIfyhp44Zaw= + diff --git a/common/extensions/webextensions-selenium-example-signed/META-INF/cose.sig b/common/extensions/webextensions-selenium-example-signed/META-INF/cose.sig new file mode 100644 index 0000000000000000000000000000000000000000..45a443ffb4b4e2426f3eb4b3d5d0a0e200289251 GIT binary patch literal 3123 zcmdT`dpMNq7Wd7JnQ@PiI}v8dq`?U>HRZpzcZwX3!YH z>aJ8)IE_NZuLG)r1UN>H#bmN^6f!R4_h1~E&IIcfr1Sya01)to;LGF92k-#k^#S1< z063Tat2JVQ*4G+UL%&u}A>(z)fq_g$s4o3$6LguZV7vxc_j~I^AUT;JW@IRpV*XnQ zg-Hio*!n;A7ZMhNb74|Kd|VX9g+W5sD}0KRGp-s{@ZjI~&UDOre|Qyc)QXK6>x>=? zI7F_u^|!ksMjyGMH1-e6m1FlKcR3}m08cGTJUSkDCSfvH3bQx*7DdpKro_?)N+f5~5>>K<;11Pui z_;B)oP9whU3Bk*2sX{WptEFI>B+>NAR6_F?2kZsgo|O57cgey=-RF7e+oQpL3J-Uu z-~8eG#^oK^-$m=d+6#NNKcX#0500aDM0BoHdxzh;rchM5lu&x-Sh{CgTU+Pr@?^KT z)@u7COWgS}B1>QkOn za&dHbCPl9@8isP~KUg`x*GcLgAKn0iLqbpq7fJzK=ok>^UprL{LKwgyXcb5bJSo0~ zK=A2`1abmjTi}ZWQ6zd35)u|h!Qo#Br7DS#L&(aR{zGL|d{frK*|o#ClFrFU@~<<1 zQzppML~sfL=UlvOZOfD=yYew3a$`+pzNT6kW%KDDi#VJMasOlDb0G*2kRtnd)(~%D zJA^=B<+S#**&*BX^!}ZCdK9uAg>^_bgh~gFg3nV!>;gNBb^vv*nl6ROU{e`voPfM! zb{LELN790IT-E;^@Mk&X(-jihKT@b95FC$FGj&sa{ks&c zH2d3QZsAp+?+27_*q^+V**;97nYD+Tl$O_*+ntJwl&ayaiu!m|LH6%y2J(Hax2ldL z_-00hKUF=Na-yPmN&0bC&$<8y?>y(>sjit-Z&-wn$(efT-KEy{uWLA1g{7lCm2;_B zm*i31I~xgobEh$y!tPFYMTY9D>7n_PRgg=g*p&G8*xMPMg`bVLb-eek>t&hkdiDhM z0&ua(iy&~~T(D5F<}3BR;cp(0=XC2|rT819tG`zA-m_ zK+0X}o%h9=Adq4AidXoNli-CYErzfNFT{DkMV#dec*55qik81?AN}Gw)##5pFPNkM zKSN4QUP7M;4D^9u#Of2gj9nwhyoBUj*FlMP$T)g4drhQp}0`$ zAu59wM#oVj$@GvzR9ra0{F}+=HywBZ3=+lPTKY}+%834Az#$ZTyAZ-E%tpLz&&8nJ z#JTSIX6_aHA9u2n?4o|SGcq@BRD#GS4raz!rLwk{5DgQw5>I#x8QW}2dwVOV;0>o+ zJ}YZW38#Yp>;5dhsCfSC1mgP_ zkVqvHh}1v|fl3S@1qBfU30pvrZU8X=PbQIw6iUEWJRyim<~JwE00eE}rvW@L{F@cz zFL&;XSP>1yk588<7NZj)mJH21Wi5lkveUS~hExwltMSh6i4WT7y24XjFgx9Q)W^B5 zB0T&$7H;!2cr#;;)|Y)g`nKOT+gr=JuEwRu`q-trJgT1_?y)F)zBA3zWm+X*JmKa< zb?3FSt@XQ4Nr@yqsxDoVFM;R8ep)>;xz_Re3M{-`$^lnub1FtUUxHYGL;YMSI-P}% z$@d-8p+?tVdUtxR`WM7}f%aIxY3 zkaBYrVIqy_Ni6$f!JX(=>Ut=2`9dy8Nz}Eh+n&E)LcXUQlT_soeXi;l;Q=Xyjt`(^ZKP6PJv+pi4ZmFAxUtg+5APZpkDeW8+OY;Vl#nUt%6@0xycnRM_)hoW^t!4j-5ZzTBh zy!taA+tq-T&q@k)Ym|gewj$Gp?pZ!q^i3pn3{Lii4bZEala8Ltsak3%y@n`xr|o@s zHK)+ioT*;ji<$MZMWtVH#dy5E-|t6GxaaV>aFQ#^I#S5ntuT<8cIkj)&AhdZQFb|! V<{W4G)-`dz?@;VJIVK@A?w`g5+=l=F literal 0 HcmV?d00001 diff --git a/common/extensions/webextensions-selenium-example-signed/META-INF/manifest.mf b/common/extensions/webextensions-selenium-example-signed/META-INF/manifest.mf index da58101c98bad..3e2f35e43fa58 100644 --- a/common/extensions/webextensions-selenium-example-signed/META-INF/manifest.mf +++ b/common/extensions/webextensions-selenium-example-signed/META-INF/manifest.mf @@ -1,12 +1,22 @@ Manifest-Version: 1.0 Name: inject.js -Digest-Algorithms: MD5 SHA1 -MD5-Digest: smWyx4xRjcjf16hcPSMqDQ== +Digest-Algorithms: SHA1 SHA256 SHA1-Digest: b2nrco3zOUBDJuyARPlsNEU8O9A= +SHA256-Digest: lU8GPe0dnC/AH4PaP0/akwta9vNay0n7fsgkBOieLsg= Name: manifest.json -Digest-Algorithms: MD5 SHA1 -MD5-Digest: Lg0KzlWjz7XiEJL7d7ZaPA== -SHA1-Digest: /3TAazkDdAqLGI4xVOib3AN20/0= +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: EjY6pS7xUwQxN7ijQqys3bdEHHc= +SHA256-Digest: eLH2wKnhmjOvDJk/13OJMeh+X4sdlSpbOIfyhp44Zaw= + +Name: META-INF/cose.manifest +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: BltD3hfKib5zAF8/AQ2KUfFQE8E= +SHA256-Digest: Jk/XoCcZp3zF0IZZ4clToX4K7o75eLH3+GbPfVrEC2w= + +Name: META-INF/cose.sig +Digest-Algorithms: SHA1 SHA256 +SHA1-Digest: ekekKataezcCjFQ6h2NqnkU9XIY= +SHA256-Digest: OFybAfaBj2GL8JcBp64tchoyn/9zoBWGyTqTiIoAbdQ= diff --git a/common/extensions/webextensions-selenium-example-signed/META-INF/mozilla.rsa b/common/extensions/webextensions-selenium-example-signed/META-INF/mozilla.rsa index a551f80ed1c54f530412038a24a2ef6167d139d4..8af1b413a007d4a07cd75fb6ef461d60156836bc 100644 GIT binary patch literal 4370 zcmdUyXH-*Zw}45d6Dd-aPG~|-2m}!6MO2y;fzS*gG$BC`L+G@oU^5 zR&X9|*ET@g^#u$9q1gdeI82!b0u}{0f4G41Xx#Y#4ekxlpjLShFbE806MAeB`R=O8 zAi({PABYRa0#I+DIRSP!!~qKD2RqoI_W+_h0tY|8B{|YBAOJ6EOb!kr2jeMzWD*($ zsO(rd`H_EH4K1xDZGy>Op@ba=NjpCuk{`)O(vBD$=0_l+k$~*Z2N3?fA>SDNRZE)91%h!82s%*AO`~CLfmTVfQA~N24Da+3{Hp} z!xYh4e~AF~!mpY9l@=R6*w_#)2ng)N!OG8VNe(4Z@O~u8V}8VNG=g~^-_nH}ehUiC z5Ac4^kmE;IXe^-qEekG{aH1zMfX~eHrOu zhqkjT%9LUQe6)M+d~%)CHtUg*RK4ZS8hPx&k^2r~?lzS3p{?P83TYCtuhgoEq{tEZ zT1CW&_|(e0hV-R@R?|!>T)?FWy8FV$<5Agk38+&uJY&rClZr{9uI99hnl9?at{8?T zFtubJePUCrko`(k@*;FChhy0=@g?e(AS%QeYVEQ==Xc~AJtO5)Q?^vP-yhSSw-<-+ z-a|fsn7>Fk2%}>d(sV&fV)^$kw`3v@o&L zh%0EA^QUw713$-! z3c8&NEk{gSDf_OIE#O{iw6?BiYjAF(@|2i2y;BYxC(B07#m4EJAurkc41C7ai^MT> zi{GQ>Bza-(qMN5KD++(=S+9IKC4`)_1#rOGl;I#4 zj1>Z5HVIQH0~H1YV+92DzU^Sg3oq%IBdv6UdtTtK; zgH`iVC*m>cL@xq{sP2jN_Ez`8XaU};p6Z@xJQk}?Ab4t{G2TQxv(CLW0BCRQ?N!*YvPz(02 z_oNVmqRX3G&$iMB-erz;Uc}v#Kz7eg%PH&RO8KaV5sViW6VpY&YOMjOS! zu@jdo8rE?-)>bCLSnML!B)af~AKyb70ZIE51icdwC-F)1ZC$@yeLwYcoRXqiObbFC}a6vhQ=FSwU_b z4OgR4&p14vf)v7aQhWGw2WH^j<5H}1c9A(|7cdjVENhjJ4k>y>W3hPuY;)3Yk+zdg z#`KLrsgZgP7VU>QUOBYaXJF%eS)m&*#*yjJ!=~iV`iwjA5V)tOX7#2f<4E3Qvd6h@ zMSXBh!EbikRZkLcL_AwO-=)_?qHLHsf0_Qsk?KL>)j1e65E+B!Hkj2?EZ(~7xJx+< zwWc#(;;++oau3eVRlj-mHg&C2_Dv`!znS9E9lEb(ga&*DwrPa!+ zc(uE4vo@vSYY;=A^M2FPK7zxHKE={DyN7#w>W0yS{H7AbxhrUT^;@5Mi-cSkzIl{J zg5XV;7O4(^#)<)GFtP8Xfe8ut*u?&qIss1qdN==Pcbkw8A!FCoKzW)AYGp0XhHiP)QJ6 zeV6KC+hid{G2!Ou*Bzj@ZSkW~MT(Y(%*!@4fX_C1123DFK-tbUBI;%GVon8zP7HRR zbq}^AL}&_Vt{gNjy+OXuo92*k(sg;`ZmFk~Xq=k!Xih#-be+gsf_>kZ^pk81#nwlkK8Jo;mC;zR^#yYt(&;8{wCr4@{PFbkItn! z{npabK3|$>f9Bpziv$_f_}FuD?Jb>4ok|^VFGLKNCKQ?z2CPxZ6heDJbK$!DSo7_x zp-bQodxm<&W<+hRj@e)%w@J5$F4wP^*(@p~bWRK_e#Z(8lmyT~=K!u9B=AFF0E7vb zUoiuM1A;qNxgG5MN}8R9+RFnKg#LTZP)l~~GEizBK+TR7sBNBeqLjZTMJUyjXUT|{ z5cXZVlTW1RM@VBqY>qa0b6e%d{OQ8hqN1^`v5Q-w;QH0(nE3Pf3P{lQ{?87-PTk+Isi@v{m70OY zj9J&7XzaDo6qR-SY&SeK5gOHPf7}~Coy{ggui;y2-Nn8V>Q7R!yy*^(;xoHFP-=>K zC+h?dR~Ke!B|}wtfdD0N7oqV!4?h=bM1(hT*x7{jaKY)S?oBb)h-k+gkxBhpHj}yS z1?9^}#zmfr>cp?^dx5b!PfS-$cJ=5GF_Rf+i|R-30i_Izc3WJ$k={0p_0w+))4g6= zUwS0-Oa!7Pew)L^u@Ypl=%*pnd#}GTI?gryRM^zsn4}A31slAtGrA-^EpbLVpg@6siH8Q3xF$LvG(Hv>bmW-39p z4V-gaMyDU9wdZ|3u>bxduC6Co|KQsBBb)@89D1^ z@H5U+Ir{UO=iALdQp0tVZtrLV^tGO=J#|^poi?@e+iZdw13qq_+4|hy@Q);&>*DJ* z@R-B4x~U52KhL6MUH<&et+y+0*#U1i9=TNE>bG372mf+m-h{E7bHqUCfJ%Yhr^6h{ zN9gO}T^=VR=_*J!O`Pp$3Aq{TI1Ev`oH~d&hWLalW_SZ>M`q*EG>9fZgJ76@96+u6 z&%w`6yX4=?XPz4%{9}ECpnu*)fjvJgFf`(qB@T-NWPVtoXy$Fxzvkm+%6QgY&6WvO zwbmX^k)Z-V?Y1Bolm=$;xq`^-vL#QOG;-XbV-XwKQ&Z*rF*D)>@kYI>#O;+KmcEqd zv-0avtH~Hw5j5bPo@evCdkl{|e&UnQ%#f()$>aYQ#eE}J~^@lDl*yejhk=BoqOximRYiX!Q zr@JMt+pLu-Ex4wEbI01>ylALjION&;wU_(%!i*^YMOb5Qtz3t&^hmzkjSYztasCyL zbw@{DpSKe(kT2Ce9=P7GbT($mE@dWtR*rDe*2eSh6Q&w0*y&U>EceSYVcEV(4^fTeL?g0jg+k|K9FfQLZY zG;YgZsWTuT5C_AuK_O^PFi02zz{3710%p_TZ?QDU5S9jR$_9ggAP^LIKK6215tifc zDj@7v)6LE#2RktwRtXBWWC8Qadizo?`IE1@Q@k*K?yg?$UalDO#iRi~sxlV;cPATA zK-$mQH^80j?1!Ov`=KvhxD*!L_K!;UESWTRDteu))?MrT?m8whHLJ@^ z*j&*{;9zGzr2r=?85tuhCVZ`Q{Cx=1@`&TDKE&>JyB-w$YH_&@0C)Q|Z=BdJsB6{5 z2oFx+;G6$iS%2`Fu~50|F0svH-Oi!<3Pqla!AXfb$W=zGZA(`n1F`Wl z;p`PFOEGToh+VjC@Qas)3`^ORubH~@qT^W|+21A%+639;u8ar^cH4w_FiUKZ z^hL*0J{=&}sjx6lkW*4yM7~-pr+$5|$Bg^>nJG_d^H5L;40vRU7+(kuANIyfs!JSe zik9s++K>BU)(na3KW!WF zf3-&SfDkf3U?2ea|9&}`1_A=ihf!~cnomqGUFU>@J+IuF^9X?&sV1U{wzm2A2d7+R z>hk8wk7z+y1#x6w{#srFQrOHf6W((C(fe2PHhl=Bdvbw0!02s+%48PQ_jx39Gr#Vc zRgAVFG|RNlu-9XJkGd6NkK`ZJRKi#f%x+0LeWb;m-izW2xMo|;%6d|zT-M3cyCkrk} zq1^U10~syhnLzt=Vhd_`W`B4}eJo}>oe&|^wWavxbIln>uyjt^*_y!>zfpNWA?lM} zXNaF&lZp{>Pp|lSkU-7_tWO!+;}u$pN+9R;qKcXK#0T%v;oPlO{L9iSDPOXqOEw@+ z1&*IqUr!r+%%H+g?Hw~r8JQjLihglyK;_keaLgGIE$C})A#_dKp`&B1BVo#$DbF;& znastPEMiF+O6EP$`hhmawi;VOt_%}##65ffvEw^oI%|BSh9!`_Dhlbn!3{N`jGTJwC|ZfPjjNn zj&g~}=uBg6*=6HWN0a7jA2N(98R%Cdl5z0KJKM)IKYYJ!$ zdlJ@TT5^FEp$e5t7N=e5USz8fx0(~pORiw$EdMw7WThs)d%^Z3ATvp&@*DsHy zf@*;_ha!T0m{P3+BnHA3Zz@d;HuR=jzjD6WLzK!ujR=}W^ID2U>@{f(U;U8z z@tK3_8YYP^m=&!OBzI`jmshHw{AlfVwC~v4Nbdn>`l$>T2Zc`|Nu0rw{miAZldGxl zSSImXf5_c%4VOoiHq~`o&7@SNZ$@T5Myl7^H5_j+$->lb?RfDtMM{{@c?abpO>e7{ z7fRb;tOn^LBOKz#W4esNRi|X=_1WuhTrv2HRs}D&FkyOn@buxdWinK z>_C(7q#t?c06*(y>5?I?E>z#pjkE;^aryGpqp>4}-)VO1&-HV-2|*j550pn)PV9(J zNV4LR#PkuLIt?%&Fw{~tj|No7(ts*-ZT4e)S8q7*70eeTFVtLt7T*#%dIBjHO{cTZ zQU7(h;Sj)|Oe-IK9x^uh8K)c=+H>dG+1b=7BU$U|4hhS!#{yi52bama17aSkQs(m` zU;~|t8Cs~7pgZq%i&sGh$UdD2y_z9>(cul03ehkSe4?U4?UDI#)hMQOmS30h#|eom zI&&Z9xz#vzgnExxBipGT6>?bwTO^|p-^P12(dnkw>*~u{Zddjtu19|NywNN#BD!Z` z!U#C5_J$iw36wF(G!rQrT`>7-lcjXIG+?%B>wF_I_TdPF-^&bh?cKwQJZK)8Y)Z@T z5}cr24`)B=X}TYIIR6fUX533zeg2y8aFVh%o+Z*)Mo5g(0Exubo&8&&?kY?RLia$lAZ(9`>N*0eo z$kr0ZQuJx3UB^aGXP~=~*V*0v@G1YpSrXVtW}`N=h=os9WhkWKIp$NwrUURveW6A| zipgV3ALtm420r&o^DKV(Aok|Ke`XcwKeOuJLie{u{^OnWTuu!2|41HI>K{{N!3nVN z&9YuxateWF4D0YzTgaLf>Hd6r{NE=U2m!FrKmb_wgD_3*>b$s{h{c3L4p8SnKje^f zxII%Ky%$V;@n)h@?!I5T16#6U{o%URM&SDt-a*XgR=spT%xZDL)EPu>m; zMife&!BbE=KyrdGZgt!4aDOEX$yl}DaMbc-OJ+skDdddU{2B!h!;g@(!FpvyU2%a+ z07)hOHgBcZMgFEu1cRIrr^U7};j8?T_LLZDkkpK8;R9ZFD=)3$BBG+xyQK>y?mMB- z$9YxowMs7PFg``*Z1UusOk99UW{xqZM0Uz<0L0}C^X`(R!uLgAoV#Oi4oh#&2T{4| zsLKlBSoIv47tGr-QVyAoAB*QJb>leY)4B0^!bL%WuL94*%;?{Q%A%jGv$dES$G~2@ zZ?7ov+b`mhqypm>cr&IGE9=#^ouNdO^?1qQ}HG3M*6El6|ZiV>Zu5DQm)+V$w zXU}BnLRL*mg00%;B90EIN%onHd&8RYKORXg^*|idt&D~{b+kU_mVV`0HAr&` e`?MYq?+3paTxVtlBDM-0u z{4%IL{YpuoX5Z3R=QN!1d;OwbRa~s^4zG1N8Q|n=%X36GfVciPgY*Z^6+fBsyxYpx z%)6c^(PPV)S)th7EBSf*inwL>CwJ$5+mUc7WBs$FlTU5FKTK@Mwm5uGCwh-CW6n(L z?dL!H?&CDGf6(Ff;q$Ss$NJn{yVK?NZEdUeTI3OOjfXGyq1BWt6Le&ZCfl8{^R_B< zFt0Sqww!(K|9_WT@8>--p6u3H`eusHN%H`2c8=1Ig&n_u;qV$5AOYTtOd`yPz@5y< otb-D|lP#I0!NCjHH93)4-4IXk26(fwfue#52sZ&~dnOPM0Ev38cK`qY literal 1055 zcmWIWW@Zs#-~hrsvv@-ppx_0N=44P{$jr-1O)k;PDh>_dWnfoz_>uIrS}yqu5SLbP zGcdAzWn^FgYG+`m?Kk8*WWeKE?w45VX|zS$!AF$c^Kn0i*W6XU-r7g*8g_K`zP(-d z?f&(?lC%<%A=lyLOd z3o-uRf1i+z3-D&=h`RCS<7A-oK>i89>eKZ=AMgTwnwyxHnU-1%@@sw`+_xZ~&TGN& zZEJw7|6vE7yPvgn`a@?iB&&-}m?0?<5E`q`S2+83z&R7g(0|s`cZ--s)Kq<+_jg{c zF2ekd*Mj*C*@)e^^IA1JeWvW_1B+ z#zI+v<{#1$9ZY?SijDzl9>-E#P~r|9EU69MXk_1jLLCN{H0m=kkR1mB-mGjOlbC@}f{}sYBhV}c F1^|9sSNi|} diff --git a/common/extensions/webextensions-selenium-example.xpi b/common/extensions/webextensions-selenium-example.xpi index 34b0ae3913f78f6d184a3114cd2fc91561a32105..dca8e2e12312f55a570208802b504febadd24052 100644 GIT binary patch literal 8038 zcmaKxWmFyAvaWGmxFxs*2<{Nv-F@K@+zA8-?(QzZLU4C?3y|RM?y`V|>mlRZPw&~g z=IAlHXZNh0RnZpDkhAjd=6PGH6jI?XNKzf%d`>7?auW3$77+ZD=SFkZS+-GCT_PL>=e}IH&s*bX z$#dZI{fFYAo^^?*i=|c$Ux)NY*W^b~$L3n@eg`xJ#LJ74EIfkt{PB7E>vs2F52gPY z5X$RaTO&J5GgGJEA=%pnD)TGW38A0f;Uv&7F`cC!71^*?H&ihPcd-)o61AF`!~6<* zu>;1k;VyQaf;q-aDls5jf_Boyz(m% z3=jeu$XT*H^qy`_bXbvK)%dyw7a=syJWz`Q{P^Zba^%0AiR|=N1W(+tRRu|2tF_X2 ztu7y3>Nq`SFPEo&(ipPpxW@do&H)9{6l_1QBQMHD?i*#rq?JxQDH?hQXTJ~E;Z;5V z9J*fRF*(eL^1{6+2XyB`y3=)M)vX;0Qd`JM&ZsBK8q8Sn))Oi1G$1FAzFA^nsp$1O zCLGCz{3CCdTiq^CuUR>Ko%zps!+m{1UR+I>L0UnA$=Ke>l<|)&CXS9M1PEaVZ#?P3 zdQ4qdTS^0!$jBQ2Nruxa5YWFMpdG8QD_3Jn2sG^!MmL}0_oQIx-ba?2^FSO0QWjgo zev7S}j!#`@CzvCQ{W(nOm|jCL53Dzot_BtToUr4vxYL{)h*yyZXchWwntm919}kcdBl5GYm{-0FDwmjJS!Cgz!%_At4E2Ym5je5u6Mq3^7=o_wj2; z^UsSN6*p@-_U#XIji7}!J@f3=YXRuXH?+ea@W^s<0eFd~*$gdYI@-FZnkPsiVV z`5YG{;)3=g_+W;lW&IHR>4Cw4ycDs()LIH*=pt!f0IuvtaCJ0szU9fr#bYxces=#3 zdILmT9&JSblRiiOyyXJ8Nx%<)DEu>S=ZDd!$2!8aHd5RGX&|(QEMr%-3?E}kjQRN4 zvrp_fJ11V5YWF_0KO`w8pnG$x!heDqLTDVm&z{LQ=S*;s0(GDMs)@(2xF-kW(n3H$ zSHYLq;{eNDH;crG0SNxFpDZjx=haLGDHl8h!iGyh39NGV$zpoP0E^edtRjSv;D=}w zJ3WFK)7G?oBtc1jdy|R9kZ_v43iFm@vnNEmH+Wytazr6#evAKLEAcZ0b!0-B z3K$ogbyCatGkGgVm9MaSgN_Wi^T$NQ)vh!1@6gyG=tX;&f*&DiW zHgFlXei7-`Yd8$ej($d`ww?Bt4(#CF-^;)F;xl4(mPxE<@THvn1Omfsjn|)U8q@>(bD{Jp|Go$kT3rcg5ERV zP2Tlff76~wAsWES0XasH$@l{RZolxdU@^uO&m~L&1o9A#wEoC_Q=<1_o;LOcS zYF!6#EJ`9uSR(qw)y%PX6n(-#vQo<9)_UFkCD*xZ1=$pa;A^% z@XKYAZSXbU7Ft*Fv#dBmX0J7)zO>`I6#5+St!X7Wx2<$sl)ouA89&+Mi0JTIf9t~h zZ1Q865evj}ArC=6kK5W z8Yz0lb7{OiL{!iT3*~!AaYP}b9hzk!)a-#xi{`4-ZWutUL3{+eo=vzfERrme>9YZj zA3!RCcKfVbj)yI9Y#XMkDFeb20{lLq7s+HRjf}nFMVU$<)Z*f#X`U6wFs>+yJi^ZS zO`sSP@j5zEhYpevu?5ZCwr4*Vg;|MLi~g69-5>33z@u@JQxrKAf*pz)sdk!;UBtGP zyLY`7nWj25Q({jKQF_c-Ik?ni7coBA-!x zdqiQ#4LIFEg$_7@ZQHFFFlmbTQ~>~af*AF~eY|I=j$b8lrWp13pb2Jx@R|ha zJ*%aO&;WqUUB@R=kRn&XN&mr`D^do(YSg3CGbb#tW0X(djUEj~4+ z>dWu&MxlJ!3Ovm3UU~p)aqBibju9w4XfDY+*E5YR!ujJfTQ@VgDosAxswbnh?&Qq~ z`Rf+L0YZ2&nYG+tFGpwjj#VqsD5KxS7b(CcJeyC_+KBGCZ*`Bs&sMaD1r>3s4bQF9W;H>FR z=fPynPLM);s{*!~Cvem?KW&KcE*kwQuIVyh<kl1gx_RLt??!o1La5s$bJ#Ok<9wnBN# zn_g8@GZv(b%wR7IZTpNn3sNbJePY|NN^<>3U93@*XB`ckyFqJhx0pbCZ{Q>m#M-vS zo%=+~PZJgtVoO)RKp!<39!LK$mMs>Ru_f*=%geHGs`lAn=KmG_e^s0^60ROFL z#{PRB_(!|UXls@@Dj$=}O!(uRx3cF!Ojt-53r$>@I59-sjL1G8*P*|RUSbJy4r}B;_(43D1U4q3*Qca3ZWtl<=?@?y)f_^t3 z6M5j~yF$U_6Nxt$Sh%2uZd02ie|Gp~%Fo~vg9tCj_qRZ)wE#(-!d;$$;V=f%^+T3O zoVOZ{xT6B1^EAH(#g(-%x(Sr&z18-7wlQ!r+TYb4{HR-aYjD7DhlC=MAWL0$Y|_f; z9={P)x(cO{WqH|rLFZN`{*0Sq53iSTsFxtFznTa$~ae zGz>B`D6$N+qrb*#RhXyQ){(9q*r%O`}Ru9+siKl4q-ewPa!C=$$q}$4$gM#UMUDH34p)9ucn}S{$ln>>Ot%9d20R z8Xl%6>|>>VJkCtn)VBHA5Bn<3|2GInqrI-c*Dc1r9{*Xc{qxiNe?d4p8BM2{tEn!u z4oK%?VdT-0QmOTKpx}-%nJ#J zlSleuwcGjLgeV)^E638^~922k>G|#+woJCIchmx|}`2cRB^hTg&4{0_f zVs7*d5+McJb%lu)A#~+n`rd@V#`kWI!OG>~8TOPr8Y&@R4^!Uvk#9cXB9j{eC#67aFB(mIRY| z^d(~(t(y{tgR?IjVgsd{rq5m)`P-y)hgw>1MY9X*}3@PY`0t24{>Qq3!R#Fm zfw>ymTUqGJ*`JnPjP)`AIV!>Zg|^Qv_LD9b}2J z5Wyc+Z~(}w0(0Cpfaw(Bc2x5>qOS()$fm|hsP0xCR&Nsj zAmgb4b6ec80w*qdLPJ`2!Q{a}gNxO6a$ZTldfly+20&0b1FuAwvUb!L)w!RpSBEHT z%M@xpYi&6Acyc`+_oz7zu2)Z{l0G0%NN~3$wLLPq%amAVL`8^RqYK?+bCate6cNwo z31)_BhQ^gZug9pwNCwVtw)?k4M_-}E$b%*Mv%`&8^JumEl^%QiJe0#CNA)%P_sksD ztC#{=cha~iaNZg2eusk_O_J8~Oq^#Z*vG8iwvdYbDnMfMY;!2wl>$V>n8PBYEc!%; zlWm#~JE@wvFn#TbIApKp$a!zOmkK?0zA5Z9WQ1#fMt8~x4I+EwpdtLZIX6i2Rygo$ z-(i@n%*Slr5ys(%HNP4AF$d$IL!Kjgcwrz zCH@n38+`XqWKh@?l)e@57c}}Xp{|4>;zeKvUXU2X7bcYTeDU!CDEjfo5Q(RlHF%pX zx&~WRFN_Cz2x|k~N1>r=r%$V8eV^w-Red<5Ra{Hd6kCJ@6!`}$7XuU!BWa86`BnxG z-LeIy-Tl58;I9a9SLEa-v`-O`h}>a6mpLS!~?YuCy|8i&~r`)W~)~8xo*7zGEAk zo>V*#R2tsflhnjndLtKifUeAWb9eX+h^Ai{J7CY^T1dc}<<69&i5gVQ_O_5vKeGEG zj%SESWPu+`s&XSUL)8UC%WUrxMIyj@W<5Ex>}>H!WhLP%tW#`0ng_pD!`&5C4eVec zIDGNzV+VK8o7HrTnhVD_nMi_$G7q_99R%>A?q4jDE3InKb|a~pvn@3zLo~LZJ~nzk zSc(YWf)|`@-JR9$!_%hb&K3EFPSu1nz5MtwCV<`n(hT`W);G~M%832+2LQbL19qY{ zg*vB+%IvmYpjDC&K@W1PGUKYwM_%l5#-<1f-VM%S<7HG{c4P3cm63AE@<^fnSA8%; zEW`4Bj-4IXf{{qJo#oes?oI&>!%ODI3UudP)@1eP(bh$BfhD&ib_ojo?Ee)CSoAwPVASM#9OT!n5nBkpbUn8n}*bYUav}D ze-OtOEjEVivgK}DOq-k^x-!e4kokueZMNas}b2AYaFoF?4{G4|P zeF|@X4%cRr^5)U1#${LhR^SM@vB6<7(t9)+tgR3+SLw1$+c_3os53Ywf|GmFY<0R| zPKip7*G$W-!0(7k7&R*|5S!dc^(AbFcgGLe0<~Fqpp#=WwuQm7hyJ1$T$iQzsTi8% zaXx=z%mNLhGt8yC<381OcZ&s9Pg7(*>2cRY!B+=Q?ukJ8$YlE(aBNAT%IyMzl?e++4IoWco^YQOtI7DU)gZg96d&!$9*XGjxrdpQTC1NvcKhV`WG7?y=l) ztgBG$KPf2C^+Ua7xY8TdDJVDIZJKpEX@o_%AL_?p$XZeUP z-1SYVY)B(0^J0bonSLiColToWnt$Ll?F$R1(nSOEFVk1NM z6?G(uVhibGAP`=6s0(dF%Oq}s54Z!Bhma*OZnb%jGSI#r){qO1MV7eaO>-a~P7~#P;W-_xr&8Zgl?klZ$!$^kFHs_l4T?M`9MKwWmo|-J)E-7z*g#SX3wN zH^eu;tF!I#T{Je;-CGtXy$b%;rmUIk-gqX=}E`C@|$ev={wzTQmWm4V4P8>5#SXmKH# z4J1@U5S>cre4fd)tl-YUX4{iB#$!R+qRF8M0z+oy1(fYnao%iU(5u&#Qcbv2#cC*i zm_$?UNL-HKiM*F<8@-02fv4W8l1rsB>~T;+fMG6q=D)pLqQBcaOWQ)~^FH=BdJ%~5 zKM|xwpg$}mixz@$6fAKlL(pyV7+RW1d}?dYpd+dvz39hLN1Qc)@{-|EVax{T@a)8|YtmS$^iM;63A@@QE7Vs1{R#gLp- z9ub_=Rmn$AJa9jnHHxaVgtD@&26HXPNUQ4ULkG9&h2&Q=z=F}Lt7l)m|1Z_C z2EoYZSeHa#&ZSPY^}^LY1yo$VE0VSS({5+o>Df08DsfE^afi$M_T%daO-mU%*UTb8879rqbi1M5H ztX!nA0}jsiWBPQQgp5SYLcPowqBtt54EF>Ud{G!hhmfiKtGS0JC;`+rw;E60+jsSa z{TvjJ6*c+`j4L-4781I5VrvonEypt?rZOLhjKUlCm9wncj2s?0oUN^mcUKERH(3{v z6%oX=A?g^9lr4`_Fr_yJsnsJ_k$H?H1?lXKgyWN4lKCxE^h@+ObYo3gW_E$acmP!1-fMAW1<5?kj^oVO)n# z6=KFKqr`k=NJ_GhP}mTEaoN8E&fi@2pY|uE{r9rJ^S$5n^DmotJ^k~y#BUb*@1=jo zUB3a~UxxT9q5p3j_-`M7|5frEjQwRCujuxlK3*}|znA}Av;P*ge;NO4Fn=!pGYng^ ze|z}5VE(P`|1vP@-#z@P^#ASP?=|`77Mjrh4+pO*TS*oc?)PipUq{PpZIg+9U;Pgk CGK-S{ literal 4692 zcmZ`-by!sWwjR1c35S%DX6TRx=^m7BBot&oT4ZRD24N&*2th&wM1-NFB!nRbB&Aat z=^WyW-*?aP9`ASee%5dAXFqGL{k|*ySPQI;gG&tn00;q2O0TpO+NSx5$N+%HHvoWN zUv*Utl|Y($YJw2==gzLKb^@MWb~7gacVBH!<;eA!cFo%EQhwd-V~H2Pe@9zo(sek3 z-(K>ju!H`+IEUWmMQQra9(0o4GxvuAPcisoc%R59o%S z)n?RY9YDHE3b#t9F6dO6?-|9NaFiX^pj4t#t1ULAty-&xD>#~k5tk(x)=K9+@+5?O z2XAdKiVjRji>(x*uWrMQ!ZE#e3Qd;LV+ARMD}rnZ#X8!uLa=cCut?}3Do1{v9+mAI z_vL0va(rj?3?;*4L*@`{-%^6jC}>~X>dKX@Lc2fXmes?;;V?MPSk~hDrb^Kb!jOv( zIMkpYSCT|KM{yBcQ^<*I8Fin76t7Df-NcP`MKEr3aB(;3O6u-8O%I8_&q>?m;`RRc zRd1Y*4_?HXDN#=d+f9HWAue9(18A8F+Zzq=B^5TS3DM(_1CxFJ7OJZq_$pqV-R#T zl3xd&&VpL*QDNwY9CvyOUoS5TbMj1UoZ7U|l)|;E+~wxEsnpUIdJ_8f z7TUGK+taN~e4Xu$V9_H6CGM^ynA)E1#bjD}{9wpk}AA zrJUoyynqv6FmRlY3KdGI{Nowp`bf!^j9fc;%BUF?2U=`i=K}W=mp+YosQ%!H1lj1D z2ZvXk%Sb&v`Qivhu9pj&LWOzW5v#D>Z>d`wU1Rl?(Ed@yC-OPBef%4Z zPEOxPTr$e7tU2MPLm`YM{jPC~BCynHYd4{ymGN5)yVJ%>`AfLf$j+A1ousjYrKa<{ zlRVcr-$XfHRl}+_BdV9Z<@n%AJNo(;@x&j9?YZ%l1>rv>IzcYr`G#Rd~fiapU|+A>d={@!rw7_tCgXYRZ4+{cZncL;|_ zq0lj-dXrqjGGd28EEr&kHxe z!H`hu>#nHm-oG`^?64F)Z6#2!M-vk8~Pl^*wlnQDtH|EY#t^tetCH6vM#t}Vc;_Or+5rw5y{c=z1D zZoH2bq@|gpA4dmj2=m&{TOY=CzIpMXe7zv>)X7i%@)j=L2Y&wu1FZXVVQ9)8o}oJC zGl=0H=)2H4Xv2AI&(Xjx;JC`{GRR~}5J609UOef3P-f2Wo;BA6)0{5n z2wm@R8aL<9d>Lll50^tQA&mvOSt+vd=YoLEeXWNFaJ77pN}B|;%b|a;20Xy^ZDVu` zim5f?!G8K|)nd%80iFpP#I5zSW1qSJNsc{@9)E_3q|osR?2ZPtN3j%w(<-V-Db2ok zvxG)6Hio{R@}DEDuZu2BlpjziJGO9&Pien(_#)A7x&@JP`Pk*m&?)QV*W3Pxm?2pw zDg});tCTh4#^YslhvTNxmM5f(~)`eEf>xfdt_Vl(!SvMn5R}M zJNCV-vbeDy!KnOjBP?lCBE@Y>Emkp7a>Xz6kPry4a;Nc&t&C$l;F(`#hkzOuKOrY0 zHfhvO=)K^y%o_~xz^~hZ$QLq?M7ZqU578tCt3JL~l26uPxf47tKu&@L+`AuM&&NDq z<`2}Z`{uwK`!kkg73SzZ>hL1M!R9JB4Og0$l$#|3(th-1fkE1qRww0zLfzfnFQxI~ zx=hXgQ?~5HuqrBh@m$ajJ#nQqD@z2GIgELuLE_SKe0qA?Z>P*tn(Sl{H;-=I+M5D) zGt97|dKR5vmxIdYzC839{?|`-5C=e(DQLF2T|;V9M`KejEk_C#+4GOphK1c_6&Ga9 zj#=vP^DZR=lkyk}7$dK%IX06t4OG|b(~0c`*~6PzHU!cm9!O4L=@TtmlV0hi^tP6I z%lGLwDQCqbolbum`FCO!4&6x@)`{Go)u9WPdMyx~H|W<0J@RJakw)ZxS#pX!2}n23 zjO=bp)?J$@zX(5!%j1u-(y3`Xak5z|VDJG0a~cgbnDPb43$!ITjN(_8H9G>Q?s;&R zFb$Uu)tWhzKMxB?(#VO3?TmUPPv|an_|bA*fO+dly!a33w>R~NT@)PL9e&1%FG_j% z5(yj$D*D&+?*YF=A`tUvzl~$(_?=E@M%gw0DbK1(?*!@{@3NP~?U;_`%iGe&#b?s} zJxYllSo>LLVk1CQzsJRN(*=W+bLveLrA{yOyL!g5c<*$U>qHaQOi9S@THc~TdEe0Y zXJ|**UJd&s6XDtq(bx&IsS{yBIQShk~N&{3xcCi!QvQEsF)Pu zMGl0tuhlwXW6o^*w$oZop$Pq5<_E^E ztrRYvql+o=I~LDaW+~SOsbrKB&QOOq5#HCuVz8Fts<|c0uVx|Fek|Mzxx-8$XOK{; z@7LnzfW?+_p|(Wdc+rXe?*wf3&#UWr`wDdqs)J>R&P+DLzOk}6e4VlNNsKMaxPe-) zvozMw_5(tbRNftNyL%G6I@}tyeSOGO;lQwhTc6o9O5!trqPceaqPVyLY1~Y%T`Q|> zBN1Dzr|@iMhANFOC|;xUaVXLwEFuz774W&|B{Uvy)6s$qxPr?`nyjT4gZl8wM}ULa8jc0K$WAGuZQtRDu0 zC~}suAB2DOR_(x>04s_=*q>N4()55=H`HGsMYd@rUOSLKOtZ~V*v8uy8xq?qRrFY1 z;#k3_ddt16U5xPezrE?)=Hp?06k8bYG}+z1HF6o$X5|@LlO#xlbc(-GpRXn`!`*r8 zn#FrepofoeaHFTl)vVBol_}ikp*WsbV%CG3qMWSeW>*R)G18L#2!sd+lh=m8V+iBq$Z+L8n6CqOlq(_RFE%;~*O zh+94iGB!Y%FFcTvVjGicmoqbY$EfMFb zn*QEOt)7)y$cN!l!7$MB#MEk~e6Jm_a7<5SaWrVDe}e92vi>*IzmXHb{OUF^h%2xF z0L-iifY`Y?J2`s&!tU-C36|4uS0tS|;Nwp+$^_VR-FlfpM+-Kx5+wJ4qroUKC8H~u z^v~21rqJgnIhQ$sAiyAZF9=V{@-g8S|Ihh6OTto8)ev?jXUb0`bTy&RKV3N2i1921 zv=ueTb{~aBOQvwP}9wtN`xe%C}FBlT`j+-bhlb(yy;7eV*c_ocjK?Xoy@T=WI z&x|fA7djq;C-cCJmlbrUH8?eVr(tqe2;))-YHRR z@OIA=$-KV&h7A)eu8T4`5#Scp}AUq4GjMF4uM-+ zm!_qwi|%uJBStW_M&V=EhUx^EM|9xfrr!}L7S1Q12bZ%rEFH90XR4P&l-69~{5NCS ztCS2E3}gRatTFO`b_HHeBq*H$ZGIk*)+m`ah!@p2P<3BuM09@NM|ji+siO}P_;#e* z*QQ`K=FNprd|1jrPbq?)eK zSls25aa;#-+$vh7`|jz11psSfVN>J$PRE~%3=F=%t`JOm{sAgxt?`!!!2jRRf7@gB zA^;go(f?C-V-Wmh|IhvXxBaj43C8|E-TwQx|J+=^%{a*aXth5%|5<|nHVwg&rug5S le;4GR9{x<}Zx8$!;{T9fur?n4FC~1;?S~0%*RS{h{sjiDbXoua diff --git a/common/extensions/webextensions-selenium-example.zip b/common/extensions/webextensions-selenium-example.zip index 34b0ae3913f78f6d184a3114cd2fc91561a32105..fc6904fe778cb1ed4d8018e2a1a01d4466d5c17f 100644 GIT binary patch literal 8244 zcmbVR1yCJJvpxqsxI4k!orIvln z)vG&OyE|Jm+h0%jOjnDdEHn%@;LrAc?nj@U84*!^d-jO1?TJG+DSznDS}c`K-5n?tx<2 zHxBv6^=(9y?uqidpSpjkx4ex*YB3> zVl?k26XaF`pC`2efC?KG{L_0Smy6SyN5OjF|X(vSM`q1fpD~rC&71tR{>mS%r!etyR2NXxUMir5CY8+4 zrC-H5)V|&$+O`{B0#P#Ga-T7h6U~kcIjy=J3yiq7J^)Cnuw5nGPiDT2odv}$otU4N zxlG#(w}PqK(m=Vmosx{2!9!46!DxihVGoEaMWP74HClA{A6F{1}1k!%!f?SHL$mB zacXMbm!PJ1w`4x@pfuhJqEJqOY4QLjfRq=R-q0)m^AOngJy}7ZktI_d{8go>!5`rb zkD>{*Zgfx`+5OZvAdw}Db$C(duICCZr=e#2oYH&$g7Ls8jmWmPuH)hm74OyxxnN3` zAfG_$uC|`b9)|9n7?=6t;O|mKV+yQc4l;tZU&gmckDPBU(^T(M4l_pTu%^cI{2sfY zMoOOdt(tj^j@AG0Q6M~({HZtp+0f*({->3m1+$5s1@jJQIj8C_rZTvZh=>=IU&8!e zWZ{9Z$vTV3J;ENU=vn7XEYlIJNFuC+((yGlW_naOWMmM_uCCc@GQI3_z3h~tbVbZ7d`Sn~?U;VTRUl=c zV5jc*+_6+raaW4r#k*q3%7lN6btD|%9o$m&Q6uK?w<|6foYai`HW~rBw;5Y=rRex1 zL;Yxac5QJhTN)im1pqVxBwkDmb~8YfiPe~w?dS;Cj^@_P;0j$RcT9=;v0`z~11b$R z;~U7KU(sAuwiTO$6}nMlCn^>)>kt7_`Ge<3bXWEhKVRpCR&BqXkmSx5{63o>O~@VF=Zy?gKrZDWnXc2%MT1M0y2DUC z?x;5xE<+y!mW{ZOll|Y@+5u7=p{(@E;}^o@8}xg`v$S#IXEXZ;fj93`@R-MEY|;WC%M7bM9Fsg0XQvYJV|r>GBe zkYhbN)R?CVU=yU0OT2~WS&|7+sFRR=D_Rr>B_*FeKhV=LGXPNOB_xmxy(ENg48m2c z5ZQ*o&gyte+$A>_6=VoUL5AAQR%zp9rYmh|lKDZy#JrKb9mv|#Y#F65Nq|TM`rt7T zc$Scp;)}3=$KSMDEM1J#VX29X%`(Rjsv06+^s^o5HTIpX9yK`zMO z`JPv}3tP;@F(J}##kOM3jU*^d)yITE`8kN-mrzo_m$qVUiIY=14Yc&ODU; z+lUUI%+Mo?GJiqffJ1?#dd2qFUXh|*@kp_cC&Y&9{(~D8UCn8&bxQGQ2*GO=1?cH0 z?7p72FCKe1^6k%1P911q<^t(>cZ_rtu1se5(Ne^dZy@*dPs?=1Zgqv{NtYEm#fEj74l2N4pv&{of*y?@QK>WE{CBf#8!MDi`WV|fh0B2+ z)bw|3PAzEUHoN@b1Y3E0)OC&QgnFQF4xk0i+GfKZQj^a%eOEs_N7UrXxe>{wslpAh zjZLVQcfFquWgFEcC+~xf&f=>jXWXTG?nH~~e#apNz87&tM=~bE!QTFrw^Dc{=tK=Y=)o;w7u9?mw?hq)|y{+G0*8?h3NN5NdereQEqel8Ab4N$0 z2FCQ|&MhZSK0*vxUwV$6G)tD?>1ICy)Y0ir!g=5K1hG@pP)(Y;vy+H0IdnI@_vEfe zeyKBnJ$czDj^vl)59-~+t%jC7*(&3)*zY8e^3S}78c10%eYzss(Uy5Je10OtuSF*W z#J0jk&drD|-hB$->73phaGbCzZwmIxNG!jvFKCAOeon3R^(8S|L)eC_q8|&QDFYu> zsf?w5Han(c;6DR?%HH!swDZUgQo^5zi!3ykufCF!exFbbXQt>ac%~fi<yKLAHLGsqVAN!5Z-)y>;+K_@_H$i*>XDSkf8%^FAdSx7(7%nE^G?E% zb-ybE1Z<8q`uCZ zJTA4ydE-z_rw3v%^@JV5mS~de6j&H+ zX;vXJf6j!#9_8-5FDv%FtWYMgfr_NIV@e!-$U0slr#MZaC)~W7=8HCcIrY2c@~|Q9 z<)Vtd+RnhrmeDP;JN{IxJ0S|%Ls`C08(o3iJ)YHvqALxjV>)P8Nta%h|FA@h}B z8OOaRCYV($SL!2Vh|)6g7)`x4029M)>9|Zj0e@Fcn|BpL3<>~%`RaTBt{fXTGfPVY z7CU=`*(7HbWoPXE!OvJ2pBcy~IRaYHL5iQzlr%Z8yEp=>0$|9Ifw3^gW+J`?s640z zLmy*WgKAe{n{U0mAuA7Kt?lEDfXFnYF$N+t?8Ytx zL%71}8%toVKvoACdMb{7Q1?y)nLfGCQz=Zm{Pqaoi>%)2qxsK*fa^ zvmRP~N#-4Sl$;!z@(`!$5Wk1dRjRS3$sNwT|Y7 z7-=uWwdO2EvWKP|G^pJ6-Co44EN8Hf%FUl_xGd%wpr z?aQp5oR8ZnTEe4w)tS$=!-NL_64g1W4B(k1!Y1#tJiD#U(X87g|TF zHu>^=$%KaRp)3yZg|C>YA$p+H#pMF-@B>C`2o;*QjjJL0+H!w59jVXc^X|3m5LeYN z$O|v14<^SKLvGoNhYbbUkYUm#aB>zWoR>^_{-RWUb(LA>NFb7@aPC+Wm6irXx-2s| zo`7;|r)=SRG3g~YS|$ELZZn6{{;b%P_NXlQ%_zP4lLb_3{E z4h-hwmL&1$R@OA00YzPPGd8*)Q?R`TpFRCvN5|0c9|rMAzILO2yF0b}3Ae^=Kce*V zJiw06q5sQ0qbIo_!o;($ah}2u_u!yl(>{8X1bNGrj;EIiGfV=9-W*%l_Trvcq(@Qv z{hK^@eyZQY^zt?-_yBI{Kcz`D#;!?ueGV{laW5HTji2?!TG?!vggEf_=lI(6-O-`7-k+1F2$o8_k#@Ie4kZ^k>=p$1(-pt*HPg zLY4q+DX~KYz5b(MlZ@+yhja1SO`S(E|Z|_q4&K z+1ouq#l?HM(J8A#j5R~KZ-?51>t#Yh{?}TEwgH^Y<=&(FXS6l5gRHBGF~_vfIA$~9 zbCon?nzq*sxS6$4^bN-YB6|eG8!Fuv$x4RRDJ^>4B5sOzIXE?pExbA$J$3lC`y=Dq2-y)9|3zRe1J6|3i3fKXQaIRx5 z6|R@;AHF8uXeCTX7c)l2Z9kvHxCi=WxZ-vjgslV*>|90}S-OqJe6!z!E|49j2#orf zU>;vRE{MF=*Ay1m4RcJ-92P1rgS0=_yhM}Wk^^^G5!kUX1?eEOwMPl-spkdK_jnj#lVyRqx(g*Ck0I_T2?_<$kI z2#sHhc(&VV^?m~2v*z1hvF$C^<=rI%uFx@Yc%-~uks3(Al~^UVHscd+MI_)*A?4pW z31k)c>99rK?Cf1LF+uw@I$Y@&l`4J~W!W{Hxr#HZRHxJC-n?sIfCHWSndu!`B4Ujp zy}Nk=A!kGCHko+quaz-VCOOKVE{1zFwIej zu;A8RIWGL02FFX}s7h^WS}IJu&V6|lH-1XCwauypiN#+x>qYNHKz1*f@-tZobVt6- zOei|AxjP$B9v86L+@aIYe-kj>UcekK%5R`5Q|mo76WlopHd++4%@;uIXEwYu4uEA4 z)#LS9n~^{bT#03WXA<9>gItzk;e@QhP3qQq;ga#oOy0^Tt|rdz`a|ovsNG2cHFP3I1VJ9 zX4?+r4>=sJ-}cQp2_!K#=5RPd4{NsN4$_}b!MN_bD32KS^nXcqGt#0Oz7*kw_uc&V z)hbYZi07*9JvI|c1=uE5%Vd&(|NT%Io<{o}0B=H^FYDQeM6*TbT|Nx>AIvI${!0Ez>_#)1eG8aAA8{pN+_h|dOK9dE>P z*_&e2_l*!S8Drya_X^MWv(&NeNgB9tVXep2IwywO{Sm>*#9g;i1%+ov#OSbKb zX8b%?a^p7vdI-1#V!?MAR_vNo*tg4DVmk74u5v-r%=9fcJA9o8|Bz`^SmWf#WX`34 zo$F4$z%`7;o%Ba!{mfpDw0_#?|0iYTGW8C&Y*M&qc>-lbg*YUC; z4p*=IyG>t;H`JGb1MUuErrt<;WkanI_Khcimq?BSU!U~5pB)~G&As{Lewh7{AV*TY zg0yFSn?k?5XN~D<&PX^jr-wM*{Q6qo#98Z$;r0V^TC`s`RapwNsj7`yHXyzQb&kEW z#5oZ?v&Pwval}hsborZmy9!q}_p17)_TG+h;@dZx*_75#BiHwd_^KbPa!}v(EoleO z6{uxiG-AIF;CaEglN*ihUo=#hP=`)SAA_CVjYVa68=hln zM}6Z!Dt06BiFONni}EK+H%^EU`)O#G^rI_ZA?uQi;y(q25gIt38|k6&GGLl?cwr%zcHFqVM`?JsEyHoQYj? zsFZm%nZi+0jX;hO#xXq>mg}j3G6hVm-KgZGwrs1MmAWpNR0~Bjs&@e?7dRi_aH&4p zt*-)G4|93dIwk1-eb+f{mh(qbP7b&Ly&IfB%PB7@w2V>HXTI-%?`s{s3ajcF*~5y2 z&EHifh~%E+0_Uu^7wi!1*KAPO_~C-oG)d^O)53VTX7)M1^@JdhBSPZBFrZ}m;AD$B z@a^egR}o9&)?~AySl&*HlL7B~RqL#nig;<~<2Sn7c&}+iH|ZYLDAMmIGYt)=A`W%R zAncvAbc&=!FkJoyVjKwx9uaA=T52E(POrG0M+QG`6m%0?VVqc9y_;ssI-0qA{G&tD z{@CzJwURvi*Lkjoo5DX-{A@h4iAAzB9Z!+CJ9H6wgbAGo#%5Ng1#cdD|u}L=3 zpBxZMK}0M8@%pU+OD&jZ)ppVA~K~ZoR>TjGAcpLX`RF z+oXiCH}=*~D?@iWYK9^E{AK**8YLpa9&DmV&rJu5pz%kR$ehl3b!J!&wB0Z1=ekx& zt=RSYuEq=oT4AI;i?-AK&_iC21ZFnJDjaSDIv6 zdyZX~*K)~JZ3e^XewS^lDY<}!Y+si@%GZ}V%gvtuAuglcpLNodxIU_db3^gGHU4`9 zXJ@eA;r$v`$GqNHzlGQTj^OM~kX{QKvP|^MGP5YM%nV~A<24`IW;izxZ)~|{90%nT zm{}&T!6UUsh)gD~}NYyo9*>o@>CF7NU_Yl)cOLd%#=QOgVh*pH$C>u9H0BnAM zdjNd%djj0XhbH(2zEnOO(|7Ks`ECuVu*pq(RQE6i`0o4p4YyH~A`xuplKFmE5rYK$7+}>#H=?{2I`(XS{*!c(>(@5*c_lzat-*V&jLQzY7 zXlK)o5D3!u+WL+j$h#jklnR*3(hrpCl0r#Aep0IvFM$k>0)~#%){&%eww4fj$x@Qk z-x_~opN+uK+NDhb&5v!SnEGRpHx0JV&VXYv#H zoDURLK_eI}2t3u5!Z^F_^Z3&x1aX~ukX83vdBI9R6*JfT4i#jOkB88?YE>?PMe72M zxF}CaN+C~{I78}EJ#9jxb~Ti3Mr|j4SKdUR?FgFQ7mDGhfxej!W5X%5VF&HTJy9M# z%v!O>b9qqb0%cVYUcE{hyLq+<0U9z92ucEvkF6wu&ecMyEuc zeKV7`sm01;FePEK_5JpPXJ zTA}ju!H`+IEUWmMQQra9(0o4GxvuAPcisoc%R59o%S z)n?RY9YDHE3b#t9F6dO6?-|9NaFiX^pj4t#t1ULAty-&xD>#~k5tk(x)=K9+@+5?O z2XAdKiVjRji>(x*uWrMQ!ZE#e3Qd;LV+ARMD}rnZ#X8!uLa=cCut?}3Do1{v9+mAI z_vL0va(rj?3?;*4L*@`{-%^6jC}>~X>dKX@Lc2fXmes?;;V?MPSk~hDrb^Kb!jOv( zIMkpYSCT|KM{yBcQ^<*I8Fin76t7Df-NcP`MKEr3aB(;3O6u-8O%I8_&q>?m;`RRc zRd1Y*4_?HXDN#=d+f9HWAue9(18A8F+Zzq=B^5TS3DM(_1CxFJ7OJZq_$pqV-R#T zl3xd&&VpL*QDNwY9CvyOUoS5TbMj1UoZ7U|l)|;E+~wxEsnpUIdJ_8f z7TUGK+taN~e4Xu$V9_H6CGM^ynA)E1#bjD}{9wpk}AA zrJUoyynqv6FmRlY3KdGI{Nowp`bf!^j9fc;%BUF?2U=`i=K}W=mp+YosQ%!H1lj1D z2ZvXk%Sb&v`Qivhu9pj&LWOzW5v#D>Z>d`wU1Rl?(Ed@yC-OPBef%4Z zPEOxPTr$e7tU2MPLm`YM{jPC~BCynHYd4{ymGN5)yVJ%>`AfLf$j+A1ousjYrKa<{ zlRVcr-$XfHRl}+_BdV9Z<@n%AJNo(;@x&j9?YZ%l1>rv>IzcYr`G#Rd~fiapU|+A>d={@!rw7_tCgXYRZ4+{cZncL;|_ zq0lj-dXrqjGGd28EEr&kHxe z!H`hu>#nHm-oG`^?64F)Z6#2!M-vk8~Pl^*wlnQDtH|EY#t^tetCH6vM#t}Vc;_Or+5rw5y{c=z1D zZoH2bq@|gpA4dmj2=m&{TOY=CzIpMXe7zv>)X7i%@)j=L2Y&wu1FZXVVQ9)8o}oJC zGl=0H=)2H4Xv2AI&(Xjx;JC`{GRR~}5J609UOef3P-f2Wo;BA6)0{5n z2wm@R8aL<9d>Lll50^tQA&mvOSt+vd=YoLEeXWNFaJ77pN}B|;%b|a;20Xy^ZDVu` zim5f?!G8K|)nd%80iFpP#I5zSW1qSJNsc{@9)E_3q|osR?2ZPtN3j%w(<-V-Db2ok zvxG)6Hio{R@}DEDuZu2BlpjziJGO9&Pien(_#)A7x&@JP`Pk*m&?)QV*W3Pxm?2pw zDg});tCTh4#^YslhvTNxmM5f(~)`eEf>xfdt_Vl(!SvMn5R}M zJNCV-vbeDy!KnOjBP?lCBE@Y>Emkp7a>Xz6kPry4a;Nc&t&C$l;F(`#hkzOuKOrY0 zHfhvO=)K^y%o_~xz^~hZ$QLq?M7ZqU578tCt3JL~l26uPxf47tKu&@L+`AuM&&NDq z<`2}Z`{uwK`!kkg73SzZ>hL1M!R9JB4Og0$l$#|3(th-1fkE1qRww0zLfzfnFQxI~ zx=hXgQ?~5HuqrBh@m$ajJ#nQqD@z2GIgELuLE_SKe0qA?Z>P*tn(Sl{H;-=I+M5D) zGt97|dKR5vmxIdYzC839{?|`-5C=e(DQLF2T|;V9M`KejEk_C#+4GOphK1c_6&Ga9 zj#=vP^DZR=lkyk}7$dK%IX06t4OG|b(~0c`*~6PzHU!cm9!O4L=@TtmlV0hi^tP6I z%lGLwDQCqbolbum`FCO!4&6x@)`{Go)u9WPdMyx~H|W<0J@RJakw)ZxS#pX!2}n23 zjO=bp)?J$@zX(5!%j1u-(y3`Xak5z|VDJG0a~cgbnDPb43$!ITjN(_8H9G>Q?s;&R zFb$Uu)tWhzKMxB?(#VO3?TmUPPv|an_|bA*fO+dly!a33w>R~NT@)PL9e&1%FG_j% z5(yj$D*D&+?*YF=A`tUvzl~$(_?=E@M%gw0DbK1(?*!@{@3NP~?U;_`%iGe&#b?s} zJxYllSo>LLVk1CQzsJRN(*=W+bLveLrA{yOyL!g5c<*$U>qHaQOi9S@THc~TdEe0Y zXJ|**UJd&s6XDtq(bx&IsS{yBIQShk~N&{3xcCi!QvQEsF)Pu zMGl0tuhlwXW6o^*w$oZop$Pq5<_E^E ztrRYvql+o=I~LDaW+~SOsbrKB&QOOq5#HCuVz8Fts<|c0uVx|Fek|Mzxx-8$XOK{; z@7LnzfW?+_p|(Wdc+rXe?*wf3&#UWr`wDdqs)J>R&P+DLzOk}6e4VlNNsKMaxPe-) zvozMw_5(tbRNftNyL%G6I@}tyeSOGO;lQwhTc6o9O5!trqPceaqPVyLY1~Y%T`Q|> zBN1Dzr|@iMhANFOC|;xUaVXLwEFuz774W&|B{Uvy)6s$qxPr?`nyjT4gZl8wM}ULa8jc0K$WAGuZQtRDu0 zC~}suAB2DOR_(x>04s_=*q>N4()55=H`HGsMYd@rUOSLKOtZ~V*v8uy8xq?qRrFY1 z;#k3_ddt16U5xPezrE?)=Hp?06k8bYG}+z1HF6o$X5|@LlO#xlbc(-GpRXn`!`*r8 zn#FrepofoeaHFTl)vVBol_}ikp*WsbV%CG3qMWSeW>*R)G18L#2!sd+lh=m8V+iBq$Z+L8n6CqOlq(_RFE%;~*O zh+94iGB!Y%FFcTvVjGicmoqbY$EfMFb zn*QEOt)7)y$cN!l!7$MB#MEk~e6Jm_a7<5SaWrVDe}e92vi>*IzmXHb{OUF^h%2xF z0L-iifY`Y?J2`s&!tU-C36|4uS0tS|;Nwp+$^_VR-FlfpM+-Kx5+wJ4qroUKC8H~u z^v~21rqJgnIhQ$sAiyAZF9=V{@-g8S|Ihh6OTto8)ev?jXUb0`bTy&RKV3N2i1921 zv=ueTb{~aBOQvwP}9wtN`xe%C}FBlT`j+-bhlb(yy;7eV*c_ocjK?Xoy@T=WI z&x|fA7djq;C-cCJmlbrUH8?eVr(tqe2;))-YHRR z@OIA=$-KV&h7A)eu8T4`5#Scp}AUq4GjMF4uM-+ zm!_qwi|%uJBStW_M&V=EhUx^EM|9xfrr!}L7S1Q12bZ%rEFH90XR4P&l-69~{5NCS ztCS2E3}gRatTFO`b_HHeBq*H$ZGIk*)+m`ah!@p2P<3BuM09@NM|ji+siO}P_;#e* z*QQ`K=FNprd|1jrPbq?)eK zSls25aa;#-+$vh7`|jz11psSfVN>J$PRE~%3=F=%t`JOm{sAgxt?`!!!2jRRf7@gB zA^;go(f?C-V-Wmh|IhvXxBaj43C8|E-TwQx|J+=^%{a*aXth5%|5<|nHVwg&rug5S le;4GR9{x<}Zx8$!;{T9fur?n4FC~1;?S~0%*RS{h{sjiDbXoua diff --git a/common/extensions/webextensions-selenium-example/manifest.json b/common/extensions/webextensions-selenium-example/manifest.json index e938974a20b1c..60f2e5460c500 100644 --- a/common/extensions/webextensions-selenium-example/manifest.json +++ b/common/extensions/webextensions-selenium-example/manifest.json @@ -1,17 +1,22 @@ { - "manifest_version": 2, + "manifest_version": 3, "name": "webextensions-selenium-example", - "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium" , + "description": "Inject a div with id webextensions-selenium-example to verify that WebExtensions work in Firefox/Selenium", "version": "0.1", "content_scripts": [ { - "matches": ["https://*/*","http://*/*"], - "js": ["inject.js"] + "matches": [ + "https://*/*", + "http://*/*" + ], + "js": [ + "inject.js" + ] } ], - "applications": { - "gecko": { - "id": "webextensions-selenium-example@example.com" - } - } + "browser_specific_settings": { + "gecko": { + "id": "webextensions-selenium-example-v3@example.com" + } + } } diff --git a/java/test/org/openqa/selenium/firefox/ExtensionsTest.java b/java/test/org/openqa/selenium/firefox/ExtensionsTest.java index 4cf5102755d7b..57439f351c3ea 100644 --- a/java/test/org/openqa/selenium/firefox/ExtensionsTest.java +++ b/java/test/org/openqa/selenium/firefox/ExtensionsTest.java @@ -52,7 +52,7 @@ void canAddRemoveXpiExtensions() { Path extension = InProject.locate(EXT_XPI); String id = ((HasExtensions) driver).installExtension(extension); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); driver.get(pages.blankPage); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); @@ -69,7 +69,7 @@ void canAddRemoveZipUnSignedExtensions() { Path extension = InProject.locate(EXT_UNSIGNED_ZIP); String id = ((HasExtensions) driver).installExtension(extension, true); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); driver.get(pages.blankPage); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); @@ -86,7 +86,7 @@ void canAddRemoveZipSignedExtensions() { Path extension = InProject.locate(EXT_SIGNED_ZIP); String id = ((HasExtensions) driver).installExtension(extension); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); driver.get(pages.blankPage); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); @@ -103,7 +103,7 @@ void canAddRemoveUnsignedExtensionsDirectory() { Path extension = InProject.locate(EXT_UNSIGNED_DIR); String id = ((HasExtensions) driver).installExtension(extension, true); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); driver.get(pages.blankPage); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); @@ -120,7 +120,7 @@ void canAddRemoveSignedExtensionsDirectory() { Path extension = InProject.locate(EXT_SIGNED_DIR); String id = ((HasExtensions) driver).installExtension(extension); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); driver.get(pages.blankPage); WebElement injected = driver.findElement(By.id("webextensions-selenium-example")); diff --git a/java/test/org/openqa/selenium/firefox/RemoteFirefoxDriverTest.java b/java/test/org/openqa/selenium/firefox/RemoteFirefoxDriverTest.java index e114208c23706..8aee1efddb702 100644 --- a/java/test/org/openqa/selenium/firefox/RemoteFirefoxDriverTest.java +++ b/java/test/org/openqa/selenium/firefox/RemoteFirefoxDriverTest.java @@ -40,7 +40,7 @@ class RemoteFirefoxDriverTest extends JupiterTestBase { public void shouldAllowRemoteWebDriverBuilderToUseHasExtensions() { Path extension = InProject.locate("common/extensions/webextensions-selenium-example.xpi"); String id = ((HasExtensions) driver).installExtension(extension); - assertThat(id).isEqualTo("webextensions-selenium-example@example.com"); + assertThat(id).isEqualTo("webextensions-selenium-example-v3@example.com"); try { ((HasExtensions) driver).uninstallExtension(id); diff --git a/py/test/selenium/webdriver/firefox/ff_installs_addons_tests.py b/py/test/selenium/webdriver/firefox/ff_installs_addons_tests.py index 25d576b4b7e89..1852adb4ddb82 100644 --- a/py/test/selenium/webdriver/firefox/ff_installs_addons_tests.py +++ b/py/test/selenium/webdriver/firefox/ff_installs_addons_tests.py @@ -28,7 +28,7 @@ def test_install_uninstall_signed_addon_xpi(driver, pages): extension = os.path.join(extensions, "webextensions-selenium-example.xpi") id = driver.install_addon(extension) - assert id == "webextensions-selenium-example@example.com" + assert id == "webextensions-selenium-example-v3@example.com" pages.load("blank.html") injected = WebDriverWait(driver, timeout=2).until( @@ -45,7 +45,7 @@ def test_install_uninstall_signed_addon_zip(driver, pages): extension = os.path.join(extensions, "webextensions-selenium-example.zip") id = driver.install_addon(extension) - assert id == "webextensions-selenium-example@example.com" + assert id == "webextensions-selenium-example-v3@example.com" pages.load("blank.html") injected = WebDriverWait(driver, timeout=2).until( @@ -62,7 +62,7 @@ def test_install_uninstall_unsigned_addon_zip(driver, pages): extension = os.path.join(extensions, "webextensions-selenium-example-unsigned.zip") id = driver.install_addon(extension, temporary=True) - assert id == "webextensions-selenium-example@example.com" + assert id == "webextensions-selenium-example-v3@example.com" pages.load("blank.html") injected = WebDriverWait(driver, timeout=2).until( @@ -83,7 +83,7 @@ def test_install_uninstall_signed_addon_dir(driver, pages): zip_ref.extractall(target) id = driver.install_addon(target) - assert id == "webextensions-selenium-example@example.com" + assert id == "webextensions-selenium-example-v3@example.com" pages.load("blank.html") injected = WebDriverWait(driver, timeout=2).until( @@ -103,7 +103,7 @@ def test_install_uninstall_unsigned_addon_dir(driver, pages): zip_ref.extractall(target) id = driver.install_addon(target, temporary=True) - assert id == "webextensions-selenium-example@example.com" + assert id == "webextensions-selenium-example-v3@example.com" pages.load("blank.html") injected = WebDriverWait(driver, timeout=2).until( diff --git a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb index 09d8ee5554886..ae98bca405a3e 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb @@ -66,7 +66,7 @@ module Firefox ext = File.expand_path("#{extensions}/webextensions-selenium-example.xpi", __dir__) id = driver.install_addon(ext) - expect(id).to eq 'webextensions-selenium-example@example.com' + expect(id).to eq 'webextensions-selenium-example-v3@example.com' driver.navigate.to url_for('blank.html') injected = driver.find_element(id: 'webextensions-selenium-example') @@ -81,7 +81,7 @@ module Firefox ext = File.expand_path("#{extensions}/webextensions-selenium-example.zip", __dir__) id = driver.install_addon(ext) - expect(id).to eq 'webextensions-selenium-example@example.com' + expect(id).to eq 'webextensions-selenium-example-v3@example.com' driver.navigate.to url_for('blank.html') injected = driver.find_element(id: 'webextensions-selenium-example') @@ -96,7 +96,7 @@ module Firefox ext = File.expand_path("#{extensions}/webextensions-selenium-example-unsigned.zip", __dir__) id = driver.install_addon(ext, true) - expect(id).to eq 'webextensions-selenium-example@example.com' + expect(id).to eq 'webextensions-selenium-example-v3@example.com' driver.navigate.to url_for('blank.html') injected = driver.find_element(id: 'webextensions-selenium-example') @@ -107,12 +107,14 @@ module Firefox expect(driver.find_elements(id: 'webextensions-selenium-example')).to be_empty end - it 'install and uninstall signed directory', except: {platform: :windows, - reason: 'signature must be different for windows'} do + it 'install and uninstall signed directory', except: {browser: :firefox, + platform: :windows, + reason: 'signature must be different for windows, + skipping everywhere until Firefox 127 is released'} do ext = File.expand_path("#{extensions}/webextensions-selenium-example-signed/", __dir__) id = driver.install_addon(ext) - expect(id).to eq 'webextensions-selenium-example@example.com' + expect(id).to eq 'webextensions-selenium-example-v3@example.com' driver.navigate.to url_for('blank.html') injected = driver.find_element(id: 'webextensions-selenium-example') @@ -127,7 +129,7 @@ module Firefox ext = File.expand_path("#{extensions}/webextensions-selenium-example/", __dir__) id = driver.install_addon(ext, true) - expect(id).to eq 'webextensions-selenium-example@example.com' + expect(id).to eq 'webextensions-selenium-example-v3@example.com' driver.navigate.to url_for('blank.html') injected = driver.find_element(id: 'webextensions-selenium-example') From 7ae0d717fe2a47d4b922441c569aed24ad3db150 Mon Sep 17 00:00:00 2001 From: Andrei Date: Fri, 14 Jun 2024 17:08:25 +0300 Subject: [PATCH 096/176] fixed docs api url in README.md for selenium-webdriver npm package (#14138) * fixed docs api url in README.md for selenium-webdriver npm package * updated URL to point directly to the JavaScript API documentation --- javascript/node/selenium-webdriver/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/node/selenium-webdriver/README.md b/javascript/node/selenium-webdriver/README.md index e6a01463f2503..9213a9e165613 100644 --- a/javascript/node/selenium-webdriver/README.md +++ b/javascript/node/selenium-webdriver/README.md @@ -217,7 +217,7 @@ under the License. [LTS]: https://github.com/nodejs/LTS [PATH]: http://en.wikipedia.org/wiki/PATH_%28variable%29 -[api]: http://seleniumhq.github.io/selenium/docs/api/javascript/module/selenium-webdriver/ +[api]: https://www.selenium.dev/selenium/docs/api/javascript/ [chrome]: https://googlechromelabs.github.io/chrome-for-testing/#stable [gh]: https://github.com/SeleniumHQ/selenium/ [issues]: https://github.com/SeleniumHQ/selenium/issues From 2a377be94dd8cc3e197dfbe72325639484b9f53f Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 09:15:43 -0500 Subject: [PATCH 097/176] [java] remove test guard for newly implemented firefox bidi feature --- .../selenium/bidi/browsingcontext/BrowsingContextTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/java/test/org/openqa/selenium/bidi/browsingcontext/BrowsingContextTest.java b/java/test/org/openqa/selenium/bidi/browsingcontext/BrowsingContextTest.java index 10d3f2f38b59a..af26b601e8551 100644 --- a/java/test/org/openqa/selenium/bidi/browsingcontext/BrowsingContextTest.java +++ b/java/test/org/openqa/selenium/bidi/browsingcontext/BrowsingContextTest.java @@ -23,7 +23,6 @@ import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs; import static org.openqa.selenium.support.ui.ExpectedConditions.visibilityOfElementLocated; import static org.openqa.selenium.testing.Safely.safelyCall; -import static org.openqa.selenium.testing.drivers.Browser.FIREFOX; import java.util.List; import org.junit.jupiter.api.AfterEach; @@ -42,7 +41,6 @@ import org.openqa.selenium.print.PrintOptions; import org.openqa.selenium.remote.RemoteWebElement; import org.openqa.selenium.testing.JupiterTestBase; -import org.openqa.selenium.testing.NotYetImplemented; class BrowsingContextTest extends JupiterTestBase { @@ -417,7 +415,6 @@ void canSetViewport() { } @Test - @NotYetImplemented(FIREFOX) void canSetViewportWithDevicePixelRatio() { BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle()); driver.get(appServer.whereIs("formPage.html")); From bef2555198ce03b9aefbde4a9777f81e30fe0736 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 11:55:50 -0500 Subject: [PATCH 098/176] [java] update tests for addon names to work in profile for latest Firefox --- .../org/openqa/selenium/firefox/FirefoxProfileTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java b/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java index f35e4406b2631..1911d1a1b4e20 100644 --- a/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java +++ b/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java @@ -138,7 +138,7 @@ void shouldInstallWebExtensionFromZip() { profile.addExtension(InProject.locate(EXT_PATH).toFile()); File profileDir = profile.layoutOnDisk(); File extensionFile = - new File(profileDir, "extensions/webextensions-selenium-example@example.com.xpi"); + new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); assertThat(extensionFile).exists().isFile(); } @@ -149,7 +149,7 @@ void shouldInstallWebExtensionFromDirectory() throws IOException { profile.addExtension(unzippedExtension); File profileDir = profile.layoutOnDisk(); File extensionDir = - new File(profileDir, "extensions/webextensions-selenium-example@example.com"); + new File(profileDir, "extensions/webextensions-selenium-example@0.1"); assertThat(extensionDir).exists(); } @@ -158,7 +158,7 @@ void shouldInstallExtensionUsingClasspath() { profile.addExtension(FirefoxProfileTest.class, EXT_RESOURCE_PATH); File profileDir = profile.layoutOnDisk(); File extensionDir = - new File(profileDir, "extensions/webextensions-selenium-example@example.com.xpi"); + new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); assertThat(extensionDir).exists(); } From 8f5f329c66e86f6211a3ab6350e460cf8abdd62f Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 12:30:42 -0500 Subject: [PATCH 099/176] [java] guard bidi test that broke in recent Chrome version --- .../org/openqa/selenium/bidi/input/DefaultKeyboardTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java index 93bb00752188f..33edc8d6f0e82 100644 --- a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java +++ b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java @@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.openqa.selenium.testing.TestUtilities.getEffectivePlatform; +import static org.openqa.selenium.testing.drivers.Browser.CHROME; import static org.openqa.selenium.testing.drivers.Browser.IE; import static org.openqa.selenium.testing.drivers.Browser.SAFARI; @@ -196,6 +197,7 @@ void canGenerateKeyboardShortcuts() { } @Test + @NotYetImplemented(value = CHROME, reason = "Chrome click is selecting second half of text") public void testSelectionSelectBySymbol() { driver.get(appServer.whereIs("single_text_input.html")); From 0bb8ff3480d2b943e6ec6b5417e5369bebcbc11a Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 12:55:01 -0500 Subject: [PATCH 100/176] [java] fix linting --- .../openqa/selenium/bidi/input/DefaultKeyboardTest.java | 2 +- .../org/openqa/selenium/firefox/FirefoxProfileTest.java | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java index 33edc8d6f0e82..4c07c2c6643fd 100644 --- a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java +++ b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java @@ -197,7 +197,7 @@ void canGenerateKeyboardShortcuts() { } @Test - @NotYetImplemented(value = CHROME, reason = "Chrome click is selecting second half of text") + @NotYetImplemented(value = CHROME, reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") public void testSelectionSelectBySymbol() { driver.get(appServer.whereIs("single_text_input.html")); diff --git a/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java b/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java index 1911d1a1b4e20..a66ddb9464a96 100644 --- a/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java +++ b/java/test/org/openqa/selenium/firefox/FirefoxProfileTest.java @@ -137,8 +137,7 @@ void shouldAllowSettingFrozenPreferences() throws Exception { void shouldInstallWebExtensionFromZip() { profile.addExtension(InProject.locate(EXT_PATH).toFile()); File profileDir = profile.layoutOnDisk(); - File extensionFile = - new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); + File extensionFile = new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); assertThat(extensionFile).exists().isFile(); } @@ -148,8 +147,7 @@ void shouldInstallWebExtensionFromDirectory() throws IOException { File unzippedExtension = Zip.unzipToTempDir(new FileInputStream(extension), "unzip", "stream"); profile.addExtension(unzippedExtension); File profileDir = profile.layoutOnDisk(); - File extensionDir = - new File(profileDir, "extensions/webextensions-selenium-example@0.1"); + File extensionDir = new File(profileDir, "extensions/webextensions-selenium-example@0.1"); assertThat(extensionDir).exists(); } @@ -157,8 +155,7 @@ void shouldInstallWebExtensionFromDirectory() throws IOException { void shouldInstallExtensionUsingClasspath() { profile.addExtension(FirefoxProfileTest.class, EXT_RESOURCE_PATH); File profileDir = profile.layoutOnDisk(); - File extensionDir = - new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); + File extensionDir = new File(profileDir, "extensions/webextensions-selenium-example@0.1.xpi"); assertThat(extensionDir).exists(); } From be6de7b8990677a81a55f1261f05a5b6a22a4871 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 13:26:47 -0500 Subject: [PATCH 101/176] [rb] fix the linting on a test guard --- .../org/openqa/selenium/bidi/input/DefaultKeyboardTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java index 4c07c2c6643fd..bf4f83a0631f0 100644 --- a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java +++ b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java @@ -197,7 +197,9 @@ void canGenerateKeyboardShortcuts() { } @Test - @NotYetImplemented(value = CHROME, reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") + @NotYetImplemented( + value = CHROME, + reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") public void testSelectionSelectBySymbol() { driver.get(appServer.whereIs("single_text_input.html")); From 446fc6ed73d1b460e4c6411987e486ffc50700d8 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Fri, 14 Jun 2024 13:35:04 -0500 Subject: [PATCH 102/176] [java] need to guard both keyboard actions tests for chrome click bug --- .../org/openqa/selenium/bidi/input/DefaultKeyboardTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java index bf4f83a0631f0..fe43cb5391260 100644 --- a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java +++ b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java @@ -226,6 +226,9 @@ public void testSelectionSelectBySymbol() { @Test @Ignore(IE) + @NotYetImplemented( + value = CHROME, + reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") public void testSelectionSelectByWord() { assumeFalse(getEffectivePlatform(driver).is(Platform.MAC), "MacOS has alternative keyboard"); From 64b5a0240f30e9d4f9b056cb59a490e34d72ee7f Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sat, 15 Jun 2024 07:32:25 -0500 Subject: [PATCH 103/176] =?UTF-8?q?[rb]=20guard=20test=20=E2=80=94=20edge?= =?UTF-8?q?=20is=20still=20giving=20the=20wrong=20error=20for=20invalid=20?= =?UTF-8?q?selector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit oddly it is working on mac with the same edge version --- rb/spec/integration/selenium/webdriver/driver_spec.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index d22143fcea127..73e8e33635424 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -147,7 +147,11 @@ module WebDriver }.to raise_error(Error::NoSuchElementError, /errors#no-such-element-exception/) end - it 'raises if invalid locator', exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do + it 'raises if invalid locator', + except: {browser: :edge, + platform: %i[windows linux], + reason: 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4743'}, + exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do driver.navigate.to url_for('xhtmlTest.html') expect { driver.find_element(xpath: '*?//-') From 98062e2cd3f8f44dc9022075a59761f60e3d7701 Mon Sep 17 00:00:00 2001 From: Boni Garcia Date: Sat, 15 Jun 2024 22:43:47 +0200 Subject: [PATCH 104/176] [rust] Downgrade to rules_rust 0.42.1 (Rust 1.77.2) --- WORKSPACE | 4 +- rust/Cargo.Bazel.lock | 7695 ++++++++++++++--------------------------- 2 files changed, 2600 insertions(+), 5099 deletions(-) diff --git a/WORKSPACE b/WORKSPACE index 32f2305a9727f..eb09ccc8726e0 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -34,8 +34,8 @@ rules_closure_toolchains() http_archive( name = "rules_rust", - integrity = "sha256-F8U7+AC5MvMtPKGdLLnorVM84cDXKfDRgwd7/dq3rUY=", - urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.46.0/rules_rust-v0.46.0.tar.gz"], + integrity = "sha256-JLN47ZcAbx9wEr5Jiib4HduZATGLiDgK7oUi/fvotzU=", + urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.42.1/rules_rust-v0.42.1.tar.gz"], ) load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains") diff --git a/rust/Cargo.Bazel.lock b/rust/Cargo.Bazel.lock index 2d5ad31197603..b422222de5650 100644 --- a/rust/Cargo.Bazel.lock +++ b/rust/Cargo.Bazel.lock @@ -1,5 +1,5 @@ { - "checksum": "11219ebc06847400b45e4149dbf89b68fce48fd990ff6e117d4de3353419d87a", + "checksum": "3c40e6cfd677a9630e12b9d6a4e7dd126a97aaa0f3e02367c8983ff7e3353df5", "crates": { "addr2line 0.21.0": { "name": "addr2line", @@ -296,19 +296,7 @@ } ], "selects": { - "aarch64-pc-windows-msvc": [ - { - "id": "anstyle-wincon 3.0.3", - "target": "anstyle_wincon" - } - ], - "i686-pc-windows-msvc": [ - { - "id": "anstyle-wincon 3.0.3", - "target": "anstyle_wincon" - } - ], - "x86_64-pc-windows-msvc": [ + "cfg(windows)": [ { "id": "anstyle-wincon 3.0.3", "target": "anstyle_wincon" @@ -885,6 +873,15 @@ "**" ], "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "derive_arbitrary 1.3.2", + "target": "derive_arbitrary" + } + ], + "selects": {} + }, "version": "1.3.2" }, "license": "MIT OR Apache-2.0", @@ -1978,16 +1975,19 @@ "id": "jobserver 0.1.31", "target": "jobserver" }, - { - "id": "libc 0.2.154", - "target": "libc" - }, { "id": "once_cell 1.19.0", "target": "once_cell" } ], - "selects": {} + "selects": { + "cfg(unix)": [ + { + "id": "libc 0.2.154", + "target": "libc" + } + ] + } }, "edition": "2018", "version": "1.0.97" @@ -2153,133 +2153,7 @@ } ], "selects": { - "aarch64-apple-darwin": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-apple-ios": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-fuchsia": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-linux-android": [ - { - "id": "android-tzdata 0.1.1", - "target": "android_tzdata" - }, - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-pc-windows-msvc": [ - { - "id": "windows-targets 0.52.5", - "target": "windows_targets" - } - ], - "aarch64-unknown-linux-gnu": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "armv7-linux-androideabi": [ - { - "id": "android-tzdata 0.1.1", - "target": "android_tzdata" - }, - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "i686-apple-darwin": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "i686-linux-android": [ - { - "id": "android-tzdata 0.1.1", - "target": "android_tzdata" - }, - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "i686-pc-windows-msvc": [ - { - "id": "windows-targets 0.52.5", - "target": "windows_targets" - } - ], - "i686-unknown-freebsd": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "wasm32-unknown-unknown": [ + "cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))": [ { "id": "js-sys 0.3.69", "target": "js_sys" @@ -2289,56 +2163,22 @@ "target": "wasm_bindgen" } ], - "x86_64-apple-darwin": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "x86_64-apple-ios": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "x86_64-fuchsia": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "x86_64-linux-android": [ + "cfg(target_os = \"android\")": [ { "id": "android-tzdata 0.1.1", "target": "android_tzdata" - }, - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" - } - ], - "x86_64-pc-windows-msvc": [ - { - "id": "windows-targets 0.52.5", - "target": "windows_targets" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" } ], - "x86_64-unknown-linux-gnu": [ + "cfg(unix)": [ { "id": "iana-time-zone 0.1.60", "target": "iana_time_zone" } ], - "x86_64-unknown-nixos-gnu": [ + "cfg(windows)": [ { - "id": "iana-time-zone 0.1.60", - "target": "iana_time_zone" + "id": "windows-targets 0.52.5", + "target": "windows_targets" } ] } @@ -9623,145 +9463,7 @@ } ], "selects": { - "aarch64-apple-darwin": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-apple-ios": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-fuchsia": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-linux-android": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-unknown-linux-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "armv7-linux-androideabi": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-apple-darwin": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-linux-android": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-unknown-freebsd": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-apple-darwin": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-apple-ios": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-fuchsia": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-linux-android": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-unknown-linux-gnu": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-unknown-nixos-gnu": [ + "cfg(unix)": [ { "id": "libc 0.2.154", "target": "libc" @@ -10347,76 +10049,50 @@ } ], "selects": { - "aarch64-apple-darwin": [ + "cfg(not(target_arch = \"wasm32\"))": [ { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" + "id": "encoding_rs 0.8.34", + "target": "encoding_rs" }, { - "id": "rustls 0.21.12", - "target": "rustls" + "id": "h2 0.3.26", + "target": "h2" }, { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" + "id": "http-body 0.4.6", + "target": "http_body" }, { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" + "id": "hyper 0.14.28", + "target": "hyper" }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "aarch64-apple-ios": [ { "id": "hyper-rustls 0.24.2", "target": "hyper_rustls" }, { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" + "id": "ipnet 2.9.0", + "target": "ipnet" }, { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" + "id": "log 0.4.21", + "target": "log" }, { - "id": "rustls 0.21.12", - "target": "rustls" + "id": "mime 0.3.17", + "target": "mime" }, { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" + "id": "once_cell 1.19.0", + "target": "once_cell" }, { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" + "id": "percent-encoding 2.3.1", + "target": "percent_encoding" }, { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "aarch64-fuchsia": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" + "id": "pin-project-lite 0.2.14", + "target": "pin_project_lite" }, { "id": "rustls 0.21.12", @@ -10427,26 +10103,8 @@ "target": "rustls_pemfile" }, { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "aarch64-linux-android": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" + "id": "tokio 1.38.0", + "target": "tokio" }, { "id": "tokio-rustls 0.24.1", @@ -10457,176 +10115,155 @@ "target": "webpki_roots" } ], - "aarch64-pc-windows-msvc": [ + "cfg(target_arch = \"wasm32\")": [ { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" + "id": "js-sys 0.3.69", + "target": "js_sys" }, { - "id": "rustls 0.21.12", - "target": "rustls" + "id": "serde_json 1.0.117", + "target": "serde_json" }, { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" + "id": "wasm-bindgen 0.2.92", + "target": "wasm_bindgen" }, { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" + "id": "wasm-bindgen-futures 0.4.42", + "target": "wasm_bindgen_futures" }, { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "web-sys 0.3.69", + "target": "web_sys" } ], - "aarch64-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, + "cfg(target_os = \"macos\")": [ { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "system-configuration 0.5.1", + "target": "system_configuration" } ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, + "cfg(windows)": [ { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "winreg 0.50.0", + "target": "winreg" } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "armv7-linux-androideabi": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, + ] + } + }, + "edition": "2021", + "version": "0.11.27" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "reqwest 0.12.4": { + "name": "reqwest", + "version": "0.12.4", + "package_url": "https://github.com/seanmonstar/reqwest", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/reqwest/0.12.4/download", + "sha256": "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" + } + }, + "targets": [ + { + "Library": { + "crate_name": "reqwest", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "reqwest", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "__rustls", + "__tls", + "rustls-pki-types", + "rustls-tls", + "rustls-tls-webpki-roots" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "base64 0.22.1", + "target": "base64" + }, + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "futures-core 0.3.30", + "target": "futures_core" + }, + { + "id": "futures-util 0.3.30", + "target": "futures_util" + }, + { + "id": "http 1.1.0", + "target": "http" + }, + { + "id": "serde 1.0.203", + "target": "serde" + }, + { + "id": "serde_urlencoded 0.7.1", + "target": "serde_urlencoded" + }, + { + "id": "sync_wrapper 0.1.2", + "target": "sync_wrapper" + }, + { + "id": "tower-service 0.3.2", + "target": "tower_service" + }, + { + "id": "url 2.5.0", + "target": "url" + } + ], + "selects": { + "cfg(not(target_arch = \"wasm32\"))": [ { - "id": "rustls 0.21.12", - "target": "rustls" + "id": "http-body 1.0.0", + "target": "http_body" }, { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" + "id": "http-body-util 0.1.1", + "target": "http_body_util" }, { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" + "id": "hyper 1.3.1", + "target": "hyper" }, { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "hyper-rustls 0.24.2", + "id": "hyper-rustls 0.26.0", "target": "hyper_rustls" }, { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "cfg(not(target_arch = \"wasm32\"))": [ - { - "id": "encoding_rs 0.8.34", - "target": "encoding_rs" - }, - { - "id": "h2 0.3.26", - "target": "h2" - }, - { - "id": "http-body 0.4.6", - "target": "http_body" - }, - { - "id": "hyper 0.14.28", - "target": "hyper" + "id": "hyper-util 0.1.3", + "target": "hyper_util" }, { "id": "ipnet 2.9.0", @@ -10652,9 +10289,29 @@ "id": "pin-project-lite 0.2.14", "target": "pin_project_lite" }, + { + "id": "rustls 0.22.4", + "target": "rustls" + }, + { + "id": "rustls-pemfile 2.1.2", + "target": "rustls_pemfile" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types" + }, { "id": "tokio 1.38.0", "target": "tokio" + }, + { + "id": "tokio-rustls 0.25.0", + "target": "tokio_rustls" + }, + { + "id": "webpki-roots 0.26.1", + "target": "webpki_roots" } ], "cfg(target_arch = \"wasm32\")": [ @@ -10679,484 +10336,149 @@ "target": "web_sys" } ], - "cfg(target_os = \"macos\")": [ - { - "id": "system-configuration 0.5.1", - "target": "system_configuration" - } - ], "cfg(windows)": [ { - "id": "winreg 0.50.0", + "id": "winreg 0.52.0", "target": "winreg" } - ], - "i686-apple-darwin": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "i686-linux-android": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "i686-pc-windows-msvc": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "i686-unknown-freebsd": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "riscv32imc-unknown-none-elf": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, + ] + } + }, + "edition": "2021", + "version": "0.12.4" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "ring 0.17.8": { + "name": "ring", + "version": "0.17.8", + "package_url": "https://github.com/briansmith/ring", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/ring/0.17.8/download", + "sha256": "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" + } + }, + "targets": [ + { + "Library": { + "crate_name": "ring", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "ring", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "alloc", + "default", + "dev_urandom_fallback" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "getrandom 0.2.15", + "target": "getrandom" + }, + { + "id": "ring 0.17.8", + "target": "build_script_build" + }, + { + "id": "untrusted 0.9.0", + "target": "untrusted" + } + ], + "selects": { + "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(target_arch = \"aarch64\", target_arch = \"arm\")))": [ { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "libc 0.2.154", + "target": "libc" } ], - "riscv64gc-unknown-none-elf": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, + "cfg(all(target_arch = \"aarch64\", target_os = \"windows\"))": [ { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "windows-sys 0.52.0", + "target": "windows_sys" } ], - "s390x-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, + "cfg(any(target_arch = \"aarch64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"x86_64\"))": [ { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "thumbv7em-none-eabi": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "thumbv8m.main-none-eabi": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-apple-darwin": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-apple-ios": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-fuchsia": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-linux-android": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-pc-windows-msvc": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-unknown-nixos-gnu": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" - } - ], - "x86_64-unknown-none": [ - { - "id": "hyper-rustls 0.24.2", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.21.12", - "target": "rustls" - }, - { - "id": "rustls-pemfile 1.0.4", - "target": "rustls_pemfile" - }, - { - "id": "tokio-rustls 0.24.1", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.25.4", - "target": "webpki_roots" + "id": "spin 0.9.8", + "target": "spin" } ] } }, "edition": "2021", - "version": "0.11.27" + "version": "0.17.8" }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "cc 1.0.97", + "target": "cc" + } + ], + "selects": {} + }, + "links": "ring_core_0_17_8" + }, + "license": null, + "license_ids": [], + "license_file": "LICENSE" }, - "reqwest 0.12.4": { - "name": "reqwest", - "version": "0.12.4", - "package_url": "https://github.com/seanmonstar/reqwest", + "rstest 0.19.0": { + "name": "rstest", + "version": "0.19.0", + "package_url": "https://github.com/la10736/rstest", "repository": { "Http": { - "url": "https://static.crates.io/crates/reqwest/0.12.4/download", - "sha256": "566cafdd92868e0939d3fb961bd0dc25fcfaaed179291093b3d43e6b3150ea10" + "url": "https://static.crates.io/crates/rstest/0.19.0/download", + "sha256": "9d5316d2a1479eeef1ea21e7f9ddc67c191d497abc8fc3ba2467857abbb68330" } }, "targets": [ { "Library": { - "crate_name": "reqwest", + "crate_name": "rstest", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -11167,2323 +10489,378 @@ } } ], - "library_target_name": "reqwest", + "library_target_name": "rstest", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "__rustls", - "__tls", - "rustls-pki-types", - "rustls-tls", - "rustls-tls-webpki-roots" + "async-timeout", + "default" ], "selects": {} }, "deps": { "common": [ { - "id": "base64 0.22.1", - "target": "base64" + "id": "futures 0.3.30", + "target": "futures" }, { - "id": "bytes 1.6.0", - "target": "bytes" + "id": "futures-timer 3.0.3", + "target": "futures_timer" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "rstest_macros 0.19.0", + "target": "rstest_macros" + } + ], + "selects": {} + }, + "version": "0.19.0" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "rstest_macros 0.19.0": { + "name": "rstest_macros", + "version": "0.19.0", + "package_url": "https://github.com/la10736/rstest", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rstest_macros/0.19.0/download", + "sha256": "04a9df72cc1f67020b0d63ad9bfe4a323e459ea7eb68e03bd9824db49f9a4c25" + } + }, + "targets": [ + { + "ProcMacro": { + "crate_name": "rstest_macros", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "rstest_macros", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "async-timeout" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" }, { - "id": "futures-core 0.3.30", - "target": "futures_core" + "id": "glob 0.3.1", + "target": "glob" }, { - "id": "futures-util 0.3.30", - "target": "futures_util" + "id": "proc-macro2 1.0.82", + "target": "proc_macro2" }, { - "id": "http 1.1.0", - "target": "http" + "id": "quote 1.0.36", + "target": "quote" }, { - "id": "serde 1.0.203", - "target": "serde" + "id": "regex 1.10.5", + "target": "regex" }, { - "id": "serde_urlencoded 0.7.1", - "target": "serde_urlencoded" + "id": "relative-path 1.9.3", + "target": "relative_path" }, { - "id": "sync_wrapper 0.1.2", - "target": "sync_wrapper" + "id": "rstest_macros 0.19.0", + "target": "build_script_build" }, { - "id": "tower-service 0.3.2", - "target": "tower_service" + "id": "syn 2.0.64", + "target": "syn" }, { - "id": "url 2.5.0", - "target": "url" + "id": "unicode-ident 1.0.12", + "target": "unicode_ident" } ], - "selects": { - "aarch64-apple-darwin": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "aarch64-apple-ios": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "aarch64-fuchsia": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "aarch64-linux-android": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, + "selects": {} + }, + "edition": "2021", + "version": "0.19.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "rustc_version 0.4.0", + "target": "rustc_version" + } + ], + "selects": {} + } + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "rustc-demangle 0.1.24": { + "name": "rustc-demangle", + "version": "0.1.24", + "package_url": "https://github.com/rust-lang/rustc-demangle", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rustc-demangle/0.1.24/download", + "sha256": "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "rustc_demangle", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "rustc_demangle", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.1.24" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "rustc_version 0.4.0": { + "name": "rustc_version", + "version": "0.4.0", + "package_url": "https://github.com/Kimundi/rustc-version-rs", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rustc_version/0.4.0/download", + "sha256": "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" + } + }, + "targets": [ + { + "Library": { + "crate_name": "rustc_version", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "rustc_version", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "semver 1.0.23", + "target": "semver" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.4.0" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "rustix 0.38.34": { + "name": "rustix", + "version": "0.38.34", + "package_url": "https://github.com/bytecodealliance/rustix", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rustix/0.38.34/download", + "sha256": "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "rustix", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "rustix", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "alloc", + "default", + "fs", + "libc-extra-traits", + "std", + "use-libc-auxv" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "bitflags 2.5.0", + "target": "bitflags" + }, + { + "id": "rustix 0.38.34", + "target": "build_script_build" + } + ], + "selects": { + "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" + "id": "linux-raw-sys 0.4.13", + "target": "linux_raw_sys" } ], - "aarch64-pc-windows-msvc": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, + "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))": [ { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" + "id": "linux-raw-sys 0.4.13", + "target": "linux_raw_sys" } ], - "aarch64-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, + "cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" }, { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" + "id": "libc 0.2.154", + "target": "libc" } ], - "aarch64-unknown-nixos-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, + "cfg(windows)": [ { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" + "id": "errno 0.3.9", + "target": "errno", + "alias": "libc_errno" }, { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "arm-unknown-linux-gnueabi": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "armv7-linux-androideabi": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "armv7-unknown-linux-gnueabi": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "cfg(not(target_arch = \"wasm32\"))": [ - { - "id": "http-body 1.0.0", - "target": "http_body" - }, - { - "id": "http-body-util 0.1.1", - "target": "http_body_util" - }, - { - "id": "hyper 1.3.1", - "target": "hyper" - }, - { - "id": "hyper-util 0.1.3", - "target": "hyper_util" - }, - { - "id": "ipnet 2.9.0", - "target": "ipnet" - }, - { - "id": "log 0.4.21", - "target": "log" - }, - { - "id": "mime 0.3.17", - "target": "mime" - }, - { - "id": "once_cell 1.19.0", - "target": "once_cell" - }, - { - "id": "percent-encoding 2.3.1", - "target": "percent_encoding" - }, - { - "id": "pin-project-lite 0.2.14", - "target": "pin_project_lite" - }, - { - "id": "tokio 1.38.0", - "target": "tokio" - } - ], - "cfg(target_arch = \"wasm32\")": [ - { - "id": "js-sys 0.3.69", - "target": "js_sys" - }, - { - "id": "serde_json 1.0.117", - "target": "serde_json" - }, - { - "id": "wasm-bindgen 0.2.92", - "target": "wasm_bindgen" - }, - { - "id": "wasm-bindgen-futures 0.4.42", - "target": "wasm_bindgen_futures" - }, - { - "id": "web-sys 0.3.69", - "target": "web_sys" - } - ], - "cfg(windows)": [ - { - "id": "winreg 0.52.0", - "target": "winreg" - } - ], - "i686-apple-darwin": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "i686-linux-android": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" + "id": "windows-sys 0.52.0", + "target": "windows_sys" } - ], - "i686-pc-windows-msvc": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "i686-unknown-freebsd": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "i686-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "riscv32imc-unknown-none-elf": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "riscv64gc-unknown-none-elf": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "thumbv7em-none-eabi": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "thumbv8m.main-none-eabi": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-apple-darwin": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-apple-ios": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-fuchsia": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-linux-android": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-pc-windows-msvc": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-unknown-linux-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-unknown-nixos-gnu": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ], - "x86_64-unknown-none": [ - { - "id": "hyper-rustls 0.26.0", - "target": "hyper_rustls" - }, - { - "id": "rustls 0.22.4", - "target": "rustls" - }, - { - "id": "rustls-pemfile 2.1.2", - "target": "rustls_pemfile" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types" - }, - { - "id": "tokio-rustls 0.25.0", - "target": "tokio_rustls" - }, - { - "id": "webpki-roots 0.26.1", - "target": "webpki_roots" - } - ] - } - }, - "edition": "2021", - "version": "0.12.4" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "ring 0.17.8": { - "name": "ring", - "version": "0.17.8", - "package_url": "https://github.com/briansmith/ring", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ring/0.17.8/download", - "sha256": "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" - } - }, - "targets": [ - { - "Library": { - "crate_name": "ring", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ring", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "alloc", - "default", - "dev_urandom_fallback" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "cfg-if 1.0.0", - "target": "cfg_if" - }, - { - "id": "getrandom 0.2.15", - "target": "getrandom" - }, - { - "id": "ring 0.17.8", - "target": "build_script_build" - }, - { - "id": "untrusted 0.9.0", - "target": "untrusted" - } - ], - "selects": { - "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(target_arch = \"aarch64\", target_arch = \"arm\")))": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "cfg(all(target_arch = \"aarch64\", target_os = \"windows\"))": [ - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], - "cfg(any(target_arch = \"aarch64\", target_arch = \"arm\", target_arch = \"x86\", target_arch = \"x86_64\"))": [ - { - "id": "spin 0.9.8", - "target": "spin" - } - ] - } - }, - "edition": "2021", - "version": "0.17.8" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "cc 1.0.97", - "target": "cc" - } - ], - "selects": {} - }, - "links": "ring_core_0_17_8" - }, - "license": null, - "license_ids": [], - "license_file": "LICENSE" - }, - "rstest 0.19.0": { - "name": "rstest", - "version": "0.19.0", - "package_url": "https://github.com/la10736/rstest", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rstest/0.19.0/download", - "sha256": "9d5316d2a1479eeef1ea21e7f9ddc67c191d497abc8fc3ba2467857abbb68330" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rstest", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rstest", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "async-timeout", - "default" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "futures 0.3.30", - "target": "futures" - }, - { - "id": "futures-timer 3.0.3", - "target": "futures_timer" - } - ], - "selects": {} - }, - "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "rstest_macros 0.19.0", - "target": "rstest_macros" - } - ], - "selects": {} - }, - "version": "0.19.0" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rstest_macros 0.19.0": { - "name": "rstest_macros", - "version": "0.19.0", - "package_url": "https://github.com/la10736/rstest", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rstest_macros/0.19.0/download", - "sha256": "04a9df72cc1f67020b0d63ad9bfe4a323e459ea7eb68e03bd9824db49f9a4c25" - } - }, - "targets": [ - { - "ProcMacro": { - "crate_name": "rstest_macros", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rstest_macros", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "async-timeout" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "cfg-if 1.0.0", - "target": "cfg_if" - }, - { - "id": "glob 0.3.1", - "target": "glob" - }, - { - "id": "proc-macro2 1.0.82", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.36", - "target": "quote" - }, - { - "id": "regex 1.10.5", - "target": "regex" - }, - { - "id": "relative-path 1.9.3", - "target": "relative_path" - }, - { - "id": "rstest_macros 0.19.0", - "target": "build_script_build" - }, - { - "id": "syn 2.0.64", - "target": "syn" - }, - { - "id": "unicode-ident 1.0.12", - "target": "unicode_ident" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.19.0" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "rustc_version 0.4.0", - "target": "rustc_version" - } - ], - "selects": {} - } - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustc-demangle 0.1.24": { - "name": "rustc-demangle", - "version": "0.1.24", - "package_url": "https://github.com/rust-lang/rustc-demangle", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustc-demangle/0.1.24/download", - "sha256": "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustc_demangle", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustc_demangle", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "edition": "2015", - "version": "0.1.24" - }, - "license": "MIT/Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustc_version 0.4.0": { - "name": "rustc_version", - "version": "0.4.0", - "package_url": "https://github.com/Kimundi/rustc-version-rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustc_version/0.4.0/download", - "sha256": "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustc_version", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustc_version", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "semver 1.0.23", - "target": "semver" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "0.4.0" - }, - "license": "MIT/Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustix 0.38.34": { - "name": "rustix", - "version": "0.38.34", - "package_url": "https://github.com/bytecodealliance/rustix", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustix/0.38.34/download", - "sha256": "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustix", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustix", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "alloc", - "default", - "fs", - "libc-extra-traits", - "std", - "use-libc-auxv" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "bitflags 2.5.0", - "target": "bitflags" - }, - { - "id": "rustix 0.38.34", - "target": "build_script_build" - } - ], - "selects": { - "aarch64-apple-darwin": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-apple-ios": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-fuchsia": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-linux-android": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "aarch64-unknown-nto-qnx710": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "armv7-linux-androideabi": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "cfg(all(any(target_os = \"android\", target_os = \"linux\"), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ - { - "id": "linux-raw-sys 0.4.13", - "target": "linux_raw_sys" - } - ], - "cfg(all(not(rustix_use_libc), not(miri), target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\"))))": [ - { - "id": "linux-raw-sys 0.4.13", - "target": "linux_raw_sys" - } - ], - "cfg(all(not(windows), any(rustix_use_libc, miri, not(all(target_os = \"linux\", target_endian = \"little\", any(target_arch = \"arm\", all(target_arch = \"aarch64\", target_pointer_width = \"64\"), target_arch = \"riscv64\", all(rustix_use_experimental_asm, target_arch = \"powerpc64\"), all(rustix_use_experimental_asm, target_arch = \"mips\"), all(rustix_use_experimental_asm, target_arch = \"mips32r6\"), all(rustix_use_experimental_asm, target_arch = \"mips64\"), all(rustix_use_experimental_asm, target_arch = \"mips64r6\"), target_arch = \"x86\", all(target_arch = \"x86_64\", target_pointer_width = \"64\")))))))": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "cfg(windows)": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ], - "i686-apple-darwin": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-linux-android": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "i686-unknown-freebsd": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "powerpc-unknown-linux-gnu": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "s390x-unknown-linux-gnu": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "wasm32-wasi": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-apple-darwin": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-apple-ios": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-fuchsia": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-linux-android": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "x86_64-unknown-freebsd": [ - { - "id": "errno 0.3.9", - "target": "errno", - "alias": "libc_errno" - }, - { - "id": "libc 0.2.154", - "target": "libc" - } - ] - } - }, - "edition": "2021", - "version": "0.38.34" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ] - }, - "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustls 0.21.12": { - "name": "rustls", - "version": "0.21.12", - "package_url": "https://github.com/rustls/rustls", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls/0.21.12/download", - "sha256": "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustls", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustls", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "dangerous_configuration", - "default", - "log", - "logging", - "tls12" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "log 0.4.21", - "target": "log" - }, - { - "id": "ring 0.17.8", - "target": "ring" - }, - { - "id": "rustls 0.21.12", - "target": "build_script_build" - }, - { - "id": "rustls-webpki 0.101.7", - "target": "webpki" - }, - { - "id": "sct 0.7.1", - "target": "sct" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.21.12" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "link_deps": { - "common": [ - { - "id": "ring 0.17.8", - "target": "ring" - } - ], - "selects": {} - } - }, - "license": "Apache-2.0 OR ISC OR MIT", - "license_ids": [ - "Apache-2.0", - "ISC", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustls 0.22.4": { - "name": "rustls", - "version": "0.22.4", - "package_url": "https://github.com/rustls/rustls", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls/0.22.4/download", - "sha256": "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustls", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustls", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "default", - "log", - "logging", - "ring", - "tls12" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "log 0.4.21", - "target": "log" - }, - { - "id": "ring 0.17.8", - "target": "ring" - }, - { - "id": "rustls 0.22.4", - "target": "build_script_build" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types", - "alias": "pki_types" - }, - { - "id": "rustls-webpki 0.102.4", - "target": "webpki" - }, - { - "id": "subtle 2.5.0", - "target": "subtle" - }, - { - "id": "zeroize 1.7.0", - "target": "zeroize" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.22.4" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "link_deps": { - "common": [ - { - "id": "ring 0.17.8", - "target": "ring" - } - ], - "selects": {} - } - }, - "license": "Apache-2.0 OR ISC OR MIT", - "license_ids": [ - "Apache-2.0", - "ISC", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustls-pemfile 1.0.4": { - "name": "rustls-pemfile", - "version": "1.0.4", - "package_url": "https://github.com/rustls/pemfile", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls-pemfile/1.0.4/download", - "sha256": "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustls_pemfile", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustls_pemfile", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "base64 0.21.7", - "target": "base64" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "1.0.4" - }, - "license": "Apache-2.0 OR ISC OR MIT", - "license_ids": [ - "Apache-2.0", - "ISC", - "MIT" - ], - "license_file": "LICENSE" - }, - "rustls-pemfile 2.1.2": { - "name": "rustls-pemfile", - "version": "2.1.2", - "package_url": "https://github.com/rustls/pemfile", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls-pemfile/2.1.2/download", - "sha256": "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustls_pemfile", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustls_pemfile", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "default", - "std" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "base64 0.22.1", - "target": "base64" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types", - "alias": "pki_types" - } - ], - "selects": {} - }, - "edition": "2018", - "version": "2.1.2" - }, - "license": "Apache-2.0 OR ISC OR MIT", - "license_ids": [ - "Apache-2.0", - "ISC", - "MIT" - ], - "license_file": "LICENSE" - }, - "rustls-pki-types 1.7.0": { - "name": "rustls-pki-types", - "version": "1.7.0", - "package_url": "https://github.com/rustls/pki-types", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls-pki-types/1.7.0/download", - "sha256": "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" - } - }, - "targets": [ - { - "Library": { - "crate_name": "rustls_pki_types", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "rustls_pki_types", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "alloc", - "default", - "std" - ], - "selects": {} - }, - "edition": "2021", - "version": "1.7.0" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "rustls-webpki 0.101.7": { - "name": "rustls-webpki", - "version": "0.101.7", - "package_url": "https://github.com/rustls/webpki", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls-webpki/0.101.7/download", - "sha256": "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" - } - }, - "targets": [ - { - "Library": { - "crate_name": "webpki", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "webpki", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "alloc", - "default", - "std" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "ring 0.17.8", - "target": "ring" - }, - { - "id": "untrusted 0.9.0", - "target": "untrusted" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.101.7" - }, - "license": "ISC", - "license_ids": [ - "ISC" - ], - "license_file": "LICENSE" - }, - "rustls-webpki 0.102.4": { - "name": "rustls-webpki", - "version": "0.102.4", - "package_url": "https://github.com/rustls/webpki", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/rustls-webpki/0.102.4/download", - "sha256": "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" - } - }, - "targets": [ - { - "Library": { - "crate_name": "webpki", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "webpki", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "alloc", - "ring", - "std" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "ring 0.17.8", - "target": "ring" - }, - { - "id": "rustls-pki-types 1.7.0", - "target": "rustls_pki_types", - "alias": "pki_types" - }, - { - "id": "untrusted 0.9.0", - "target": "untrusted" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.102.4" - }, - "license": "ISC", - "license_ids": [ - "ISC" - ], - "license_file": "LICENSE" - }, - "ryu 1.0.18": { - "name": "ryu", - "version": "1.0.18", - "package_url": "https://github.com/dtolnay/ryu", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/ryu/1.0.18/download", - "sha256": "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" - } - }, - "targets": [ - { - "Library": { - "crate_name": "ryu", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "ryu", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "edition": "2018", - "version": "1.0.18" - }, - "license": "Apache-2.0 OR BSL-1.0", - "license_ids": [ - "Apache-2.0", - "BSL-1.0" - ], - "license_file": "LICENSE-APACHE" - }, - "same-file 1.0.6": { - "name": "same-file", - "version": "1.0.6", - "package_url": "https://github.com/BurntSushi/same-file", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/same-file/1.0.6/download", - "sha256": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" - } - }, - "targets": [ - { - "Library": { - "crate_name": "same_file", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "same_file", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [], - "selects": { - "cfg(windows)": [ - { - "id": "winapi-util 0.1.8", - "target": "winapi_util" - } - ] - } - }, - "edition": "2018", - "version": "1.0.6" - }, - "license": "Unlicense/MIT", - "license_ids": [ - "MIT", - "Unlicense" - ], - "license_file": "LICENSE-MIT" - }, - "scroll 0.12.0": { - "name": "scroll", - "version": "0.12.0", - "package_url": "https://github.com/m4b/scroll", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/scroll/0.12.0/download", - "sha256": "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" - } - }, - "targets": [ - { - "Library": { - "crate_name": "scroll", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } + ] } - } - ], - "library_target_name": "scroll", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [ - "default", - "derive", - "std" - ], - "selects": {} }, "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "scroll_derive 0.12.0", - "target": "scroll_derive" - } - ], - "selects": {} - }, - "version": "0.12.0" + "version": "0.38.34" }, - "license": "MIT", + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT", "license_ids": [ + "Apache-2.0", "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "scroll_derive 0.12.0": { - "name": "scroll_derive", - "version": "0.12.0", - "package_url": "https://github.com/m4b/scroll", + "rustls 0.21.12": { + "name": "rustls", + "version": "0.21.12", + "package_url": "https://github.com/rustls/rustls", "repository": { "Http": { - "url": "https://static.crates.io/crates/scroll_derive/0.12.0/download", - "sha256": "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" + "url": "https://static.crates.io/crates/rustls/0.21.12/download", + "sha256": "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" } }, "targets": [ { - "ProcMacro": { - "crate_name": "scroll_derive", + "Library": { + "crate_name": "rustls", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -13492,54 +10869,11 @@ ] } } - } - ], - "library_target_name": "scroll_derive", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "deps": { - "common": [ - { - "id": "proc-macro2 1.0.82", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.36", - "target": "quote" - }, - { - "id": "syn 2.0.64", - "target": "syn" - } - ], - "selects": {} }, - "edition": "2018", - "version": "0.12.0" - }, - "license": "MIT", - "license_ids": [ - "MIT" - ], - "license_file": "LICENSE" - }, - "sct 0.7.1": { - "name": "sct", - "version": "0.7.1", - "package_url": "https://github.com/rustls/sct.rs", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/sct/0.7.1/download", - "sha256": "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" - } - }, - "targets": [ { - "Library": { - "crate_name": "sct", - "crate_root": "src/lib.rs", + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", "srcs": { "allow_empty": false, "include": [ @@ -13549,196 +10883,85 @@ } } ], - "library_target_name": "sct", + "library_target_name": "rustls", "common_attrs": { "compile_data_glob": [ "**" ], - "deps": { + "crate_features": { "common": [ - { - "id": "ring 0.17.8", - "target": "ring" - }, - { - "id": "untrusted 0.9.0", - "target": "untrusted" - } + "dangerous_configuration", + "default", + "log", + "logging", + "tls12" ], "selects": {} }, - "edition": "2021", - "version": "0.7.1" - }, - "license": "Apache-2.0 OR ISC OR MIT", - "license_ids": [ - "Apache-2.0", - "ISC", - "MIT" - ], - "license_file": "LICENSE" - }, - "selenium-manager 0.4.22-nightly": { - "name": "selenium-manager", - "version": "0.4.22-nightly", - "package_url": "https://github.com/SeleniumHQ/selenium", - "repository": null, - "targets": [ - { - "Library": { - "crate_name": "selenium_manager", - "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "selenium_manager", - "common_attrs": { - "compile_data_glob": [ - "**" - ], "deps": { "common": [ - { - "id": "anyhow 1.0.86", - "target": "anyhow" - }, - { - "id": "apple-flat-package 0.18.0", - "target": "apple_flat_package" - }, - { - "id": "bzip2 0.4.4", - "target": "bzip2" - }, - { - "id": "clap 4.5.7", - "target": "clap" - }, - { - "id": "debpkg 0.6.0", - "target": "debpkg" - }, - { - "id": "directories 5.0.1", - "target": "directories" - }, - { - "id": "env_logger 0.11.3", - "target": "env_logger" - }, - { - "id": "exitcode 1.1.2", - "target": "exitcode" - }, - { - "id": "flate2 1.0.30", - "target": "flate2" - }, - { - "id": "infer 0.16.0", - "target": "infer" - }, { "id": "log 0.4.21", "target": "log" }, { - "id": "regex 1.10.5", - "target": "regex" - }, - { - "id": "reqwest 0.12.4", - "target": "reqwest" - }, - { - "id": "serde 1.0.203", - "target": "serde" - }, - { - "id": "serde_json 1.0.117", - "target": "serde_json" - }, - { - "id": "sevenz-rust 0.6.0", - "target": "sevenz_rust" - }, - { - "id": "tar 0.4.41", - "target": "tar" - }, - { - "id": "tempfile 3.10.1", - "target": "tempfile" - }, - { - "id": "tokio 1.38.0", - "target": "tokio" - }, - { - "id": "toml 0.8.14", - "target": "toml" + "id": "ring 0.17.8", + "target": "ring" }, { - "id": "walkdir 2.5.0", - "target": "walkdir" + "id": "rustls 0.21.12", + "target": "build_script_build" }, { - "id": "which 6.0.1", - "target": "which" + "id": "rustls-webpki 0.101.7", + "target": "webpki" }, { - "id": "zip 2.1.3", - "target": "zip" + "id": "sct 0.7.1", + "target": "sct" } ], "selects": {} }, - "deps_dev": { + "edition": "2021", + "version": "0.21.12" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ], + "link_deps": { "common": [ { - "id": "assert_cmd 2.0.14", - "target": "assert_cmd" - }, - { - "id": "is_executable 1.0.1", - "target": "is_executable" - }, - { - "id": "rstest 0.19.0", - "target": "rstest" + "id": "ring 0.17.8", + "target": "ring" } ], "selects": {} - }, - "edition": "2021", - "version": "0.4.22-nightly" + } }, - "license": "Apache-2.0", + "license": "Apache-2.0 OR ISC OR MIT", "license_ids": [ - "Apache-2.0" + "Apache-2.0", + "ISC", + "MIT" ], - "license_file": null + "license_file": "LICENSE-APACHE" }, - "semver 1.0.23": { - "name": "semver", - "version": "1.0.23", - "package_url": "https://github.com/dtolnay/semver", + "rustls 0.22.4": { + "name": "rustls", + "version": "0.22.4", + "package_url": "https://github.com/rustls/rustls", "repository": { "Http": { - "url": "https://static.crates.io/crates/semver/1.0.23/download", - "sha256": "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + "url": "https://static.crates.io/crates/rustls/0.22.4/download", + "sha256": "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" } }, "targets": [ { "Library": { - "crate_name": "semver", + "crate_name": "rustls", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -13761,7 +10984,7 @@ } } ], - "library_target_name": "semver", + "library_target_name": "rustls", "common_attrs": { "compile_data_glob": [ "**" @@ -13769,48 +10992,86 @@ "crate_features": { "common": [ "default", - "std" + "log", + "logging", + "ring", + "tls12" ], "selects": {} }, "deps": { "common": [ { - "id": "semver 1.0.23", + "id": "log 0.4.21", + "target": "log" + }, + { + "id": "ring 0.17.8", + "target": "ring" + }, + { + "id": "rustls 0.22.4", "target": "build_script_build" + }, + { + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types", + "alias": "pki_types" + }, + { + "id": "rustls-webpki 0.102.4", + "target": "webpki" + }, + { + "id": "subtle 2.5.0", + "target": "subtle" + }, + { + "id": "zeroize 1.7.0", + "target": "zeroize" } ], "selects": {} }, - "edition": "2018", - "version": "1.0.23" + "edition": "2021", + "version": "0.22.4" }, "build_script_attrs": { "data_glob": [ "**" - ] + ], + "link_deps": { + "common": [ + { + "id": "ring 0.17.8", + "target": "ring" + } + ], + "selects": {} + } }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0 OR ISC OR MIT", "license_ids": [ "Apache-2.0", + "ISC", "MIT" ], "license_file": "LICENSE-APACHE" }, - "serde 1.0.203": { - "name": "serde", - "version": "1.0.203", - "package_url": "https://github.com/serde-rs/serde", + "rustls-pemfile 1.0.4": { + "name": "rustls-pemfile", + "version": "1.0.4", + "package_url": "https://github.com/rustls/pemfile", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde/1.0.203/download", - "sha256": "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" + "url": "https://static.crates.io/crates/rustls-pemfile/1.0.4/download", + "sha256": "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" } }, "targets": [ { "Library": { - "crate_name": "serde", + "crate_name": "rustls_pemfile", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -13819,11 +11080,48 @@ ] } } + } + ], + "library_target_name": "rustls_pemfile", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "base64 0.21.7", + "target": "base64" + } + ], + "selects": {} }, + "edition": "2018", + "version": "1.0.4" + }, + "license": "Apache-2.0 OR ISC OR MIT", + "license_ids": [ + "Apache-2.0", + "ISC", + "MIT" + ], + "license_file": "LICENSE" + }, + "rustls-pemfile 2.1.2": { + "name": "rustls-pemfile", + "version": "2.1.2", + "package_url": "https://github.com/rustls/pemfile", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/rustls-pemfile/2.1.2/download", + "sha256": "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" + } + }, + "targets": [ { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", + "Library": { + "crate_name": "rustls_pemfile", + "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, "include": [ @@ -13833,7 +11131,7 @@ } } ], - "library_target_name": "serde", + "library_target_name": "rustls_pemfile", "common_attrs": { "compile_data_glob": [ "**" @@ -13841,8 +11139,6 @@ "crate_features": { "common": [ "default", - "derive", - "serde_derive", "std" ], "selects": {} @@ -13850,50 +11146,42 @@ "deps": { "common": [ { - "id": "serde 1.0.203", - "target": "build_script_build" - } - ], - "selects": {} - }, - "edition": "2018", - "proc_macro_deps": { - "common": [ + "id": "base64 0.22.1", + "target": "base64" + }, { - "id": "serde_derive 1.0.203", - "target": "serde_derive" + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types", + "alias": "pki_types" } ], "selects": {} }, - "version": "1.0.203" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ] + "edition": "2018", + "version": "2.1.2" }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0 OR ISC OR MIT", "license_ids": [ "Apache-2.0", + "ISC", "MIT" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "serde-xml-rs 0.6.0": { - "name": "serde-xml-rs", - "version": "0.6.0", - "package_url": "https://github.com/RReverser/serde-xml-rs", + "rustls-pki-types 1.7.0": { + "name": "rustls-pki-types", + "version": "1.7.0", + "package_url": "https://github.com/rustls/pki-types", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde-xml-rs/0.6.0/download", - "sha256": "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782" + "url": "https://static.crates.io/crates/rustls-pki-types/1.7.0/download", + "sha256": "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" } }, "targets": [ { "Library": { - "crate_name": "serde_xml_rs", + "crate_name": "rustls_pki_types", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -13904,55 +11192,43 @@ } } ], - "library_target_name": "serde_xml_rs", + "library_target_name": "rustls_pki_types", "common_attrs": { "compile_data_glob": [ "**" ], - "deps": { + "crate_features": { "common": [ - { - "id": "log 0.4.21", - "target": "log" - }, - { - "id": "serde 1.0.203", - "target": "serde" - }, - { - "id": "thiserror 1.0.61", - "target": "thiserror" - }, - { - "id": "xml-rs 0.8.20", - "target": "xml" - } + "alloc", + "default", + "std" ], "selects": {} }, - "edition": "2018", - "version": "0.6.0" + "edition": "2021", + "version": "1.7.0" }, - "license": "MIT", + "license": "MIT OR Apache-2.0", "license_ids": [ + "Apache-2.0", "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "serde_derive 1.0.203": { - "name": "serde_derive", - "version": "1.0.203", - "package_url": "https://github.com/serde-rs/serde", + "rustls-webpki 0.101.7": { + "name": "rustls-webpki", + "version": "0.101.7", + "package_url": "https://github.com/rustls/webpki", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_derive/1.0.203/download", - "sha256": "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" + "url": "https://static.crates.io/crates/rustls-webpki/0.101.7/download", + "sha256": "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" } }, "targets": [ { - "ProcMacro": { - "crate_name": "serde_derive", + "Library": { + "crate_name": "webpki", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -13963,58 +11239,55 @@ } } ], - "library_target_name": "serde_derive", + "library_target_name": "webpki", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "default" + "alloc", + "default", + "std" ], "selects": {} }, "deps": { "common": [ { - "id": "proc-macro2 1.0.82", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.36", - "target": "quote" + "id": "ring 0.17.8", + "target": "ring" }, { - "id": "syn 2.0.64", - "target": "syn" + "id": "untrusted 0.9.0", + "target": "untrusted" } ], "selects": {} }, - "edition": "2015", - "version": "1.0.203" + "edition": "2021", + "version": "0.101.7" }, - "license": "MIT OR Apache-2.0", + "license": "ISC", "license_ids": [ - "Apache-2.0", - "MIT" + "ISC" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "serde_json 1.0.117": { - "name": "serde_json", - "version": "1.0.117", - "package_url": "https://github.com/serde-rs/json", + "rustls-webpki 0.102.4": { + "name": "rustls-webpki", + "version": "0.102.4", + "package_url": "https://github.com/rustls/webpki", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_json/1.0.117/download", - "sha256": "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" + "url": "https://static.crates.io/crates/rustls-webpki/0.102.4/download", + "sha256": "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" } }, "targets": [ { "Library": { - "crate_name": "serde_json", + "crate_name": "webpki", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14023,28 +11296,17 @@ ] } } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } } ], - "library_target_name": "serde_json", + "library_target_name": "webpki", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "default", + "alloc", + "ring", "std" ], "selects": {} @@ -14052,53 +11314,44 @@ "deps": { "common": [ { - "id": "itoa 1.0.11", - "target": "itoa" - }, - { - "id": "ryu 1.0.18", - "target": "ryu" + "id": "ring 0.17.8", + "target": "ring" }, { - "id": "serde 1.0.203", - "target": "serde" + "id": "rustls-pki-types 1.7.0", + "target": "rustls_pki_types", + "alias": "pki_types" }, { - "id": "serde_json 1.0.117", - "target": "build_script_build" + "id": "untrusted 0.9.0", + "target": "untrusted" } ], "selects": {} }, "edition": "2021", - "version": "1.0.117" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ] + "version": "0.102.4" }, - "license": "MIT OR Apache-2.0", + "license": "ISC", "license_ids": [ - "Apache-2.0", - "MIT" + "ISC" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "serde_spanned 0.6.6": { - "name": "serde_spanned", - "version": "0.6.6", - "package_url": "https://github.com/toml-rs/toml", + "ryu 1.0.18": { + "name": "ryu", + "version": "1.0.18", + "package_url": "https://github.com/dtolnay/ryu", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_spanned/0.6.6/download", - "sha256": "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" + "url": "https://static.crates.io/crates/ryu/1.0.18/download", + "sha256": "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" } }, "targets": [ { "Library": { - "crate_name": "serde_spanned", + "crate_name": "ryu", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14109,50 +11362,35 @@ } } ], - "library_target_name": "serde_spanned", + "library_target_name": "ryu", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "serde" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "serde 1.0.203", - "target": "serde" - } - ], - "selects": {} - }, - "edition": "2021", - "version": "0.6.6" + "edition": "2018", + "version": "1.0.18" }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0 OR BSL-1.0", "license_ids": [ "Apache-2.0", - "MIT" + "BSL-1.0" ], "license_file": "LICENSE-APACHE" }, - "serde_urlencoded 0.7.1": { - "name": "serde_urlencoded", - "version": "0.7.1", - "package_url": "https://github.com/nox/serde_urlencoded", + "same-file 1.0.6": { + "name": "same-file", + "version": "1.0.6", + "package_url": "https://github.com/BurntSushi/same-file", "repository": { "Http": { - "url": "https://static.crates.io/crates/serde_urlencoded/0.7.1/download", - "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" + "url": "https://static.crates.io/crates/same-file/1.0.6/download", + "sha256": "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" } }, "targets": [ { "Library": { - "crate_name": "serde_urlencoded", + "crate_name": "same_file", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14163,56 +11401,46 @@ } } ], - "library_target_name": "serde_urlencoded", + "library_target_name": "same_file", "common_attrs": { "compile_data_glob": [ "**" ], "deps": { - "common": [ - { - "id": "form_urlencoded 1.2.1", - "target": "form_urlencoded" - }, - { - "id": "itoa 1.0.11", - "target": "itoa" - }, - { - "id": "ryu 1.0.18", - "target": "ryu" - }, - { - "id": "serde 1.0.203", - "target": "serde" - } - ], - "selects": {} + "common": [], + "selects": { + "cfg(windows)": [ + { + "id": "winapi-util 0.1.8", + "target": "winapi_util" + } + ] + } }, "edition": "2018", - "version": "0.7.1" + "version": "1.0.6" }, - "license": "MIT/Apache-2.0", + "license": "Unlicense/MIT", "license_ids": [ - "Apache-2.0", - "MIT" + "MIT", + "Unlicense" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE-MIT" }, - "sevenz-rust 0.6.0": { - "name": "sevenz-rust", - "version": "0.6.0", - "package_url": "https://github.com/dyz1990/sevenz-rust", + "scroll 0.12.0": { + "name": "scroll", + "version": "0.12.0", + "package_url": "https://github.com/m4b/scroll", "repository": { "Http": { - "url": "https://static.crates.io/crates/sevenz-rust/0.6.0/download", - "sha256": "9a24854621db6137e3f7ed7d82282485874d212c755c3427a7436fc0c62c3d23" + "url": "https://static.crates.io/crates/scroll/0.12.0/download", + "sha256": "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" } }, "targets": [ { "Library": { - "crate_name": "sevenz_rust", + "crate_name": "scroll", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14223,85 +11451,51 @@ } } ], - "library_target_name": "sevenz_rust", + "library_target_name": "scroll", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "compress", - "default" + "default", + "derive", + "std" ], "selects": {} }, - "deps": { + "edition": "2021", + "proc_macro_deps": { "common": [ { - "id": "bit-set 0.5.3", - "target": "bit_set" - }, - { - "id": "byteorder 1.5.0", - "target": "byteorder" - }, - { - "id": "crc 3.2.1", - "target": "crc" - }, - { - "id": "filetime_creation 0.2.0", - "target": "filetime_creation" - }, - { - "id": "lzma-rust 0.1.6", - "target": "lzma_rust" - }, - { - "id": "nt-time 0.6.10", - "target": "nt_time" - }, - { - "id": "sha2 0.10.8", - "target": "sha2" + "id": "scroll_derive 0.12.0", + "target": "scroll_derive" } ], - "selects": { - "cfg(target_arch = \"wasm32\")": [ - { - "id": "js-sys 0.3.69", - "target": "js_sys" - }, - { - "id": "wasm-bindgen 0.2.92", - "target": "wasm_bindgen" - } - ] - } + "selects": {} }, - "edition": "2021", - "version": "0.6.0" + "version": "0.12.0" }, - "license": "Apache-2.0", + "license": "MIT", "license_ids": [ - "Apache-2.0" + "MIT" ], "license_file": "LICENSE" }, - "sha1 0.10.6": { - "name": "sha1", - "version": "0.10.6", - "package_url": "https://github.com/RustCrypto/hashes", + "scroll_derive 0.12.0": { + "name": "scroll_derive", + "version": "0.12.0", + "package_url": "https://github.com/m4b/scroll", "repository": { "Http": { - "url": "https://static.crates.io/crates/sha1/0.10.6/download", - "sha256": "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" + "url": "https://static.crates.io/crates/scroll_derive/0.12.0/download", + "sha256": "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" } }, "targets": [ { - "Library": { - "crate_name": "sha1", + "ProcMacro": { + "crate_name": "scroll_derive", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14312,62 +11506,51 @@ } } ], - "library_target_name": "sha1", + "library_target_name": "scroll_derive", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "default", - "std" - ], - "selects": {} - }, "deps": { "common": [ { - "id": "cfg-if 1.0.0", - "target": "cfg_if" + "id": "proc-macro2 1.0.82", + "target": "proc_macro2" }, { - "id": "digest 0.10.7", - "target": "digest" + "id": "quote 1.0.36", + "target": "quote" + }, + { + "id": "syn 2.0.64", + "target": "syn" } ], - "selects": { - "cfg(any(target_arch = \"aarch64\", target_arch = \"x86\", target_arch = \"x86_64\"))": [ - { - "id": "cpufeatures 0.2.12", - "target": "cpufeatures" - } - ] - } + "selects": {} }, "edition": "2018", - "version": "0.10.6" + "version": "0.12.0" }, - "license": "MIT OR Apache-2.0", + "license": "MIT", "license_ids": [ - "Apache-2.0", "MIT" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "sha2 0.10.8": { - "name": "sha2", - "version": "0.10.8", - "package_url": "https://github.com/RustCrypto/hashes", + "sct 0.7.1": { + "name": "sct", + "version": "0.7.1", + "package_url": "https://github.com/rustls/sct.rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/sha2/0.10.8/download", - "sha256": "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" + "url": "https://static.crates.io/crates/sct/0.7.1/download", + "sha256": "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" } }, "targets": [ { "Library": { - "crate_name": "sha2", + "crate_name": "sct", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14378,62 +11561,44 @@ } } ], - "library_target_name": "sha2", + "library_target_name": "sct", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "default", - "std" - ], - "selects": {} - }, "deps": { "common": [ { - "id": "cfg-if 1.0.0", - "target": "cfg_if" + "id": "ring 0.17.8", + "target": "ring" }, { - "id": "digest 0.10.7", - "target": "digest" + "id": "untrusted 0.9.0", + "target": "untrusted" } ], - "selects": { - "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [ - { - "id": "cpufeatures 0.2.12", - "target": "cpufeatures" - } - ] - } + "selects": {} }, - "edition": "2018", - "version": "0.10.8" + "edition": "2021", + "version": "0.7.1" }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0 OR ISC OR MIT", "license_ids": [ "Apache-2.0", + "ISC", "MIT" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "signature 2.2.0": { - "name": "signature", - "version": "2.2.0", - "package_url": "https://github.com/RustCrypto/traits/tree/master/signature", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/signature/2.2.0/download", - "sha256": "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" - } - }, + "selenium-manager 0.4.22-nightly": { + "name": "selenium-manager", + "version": "0.4.22-nightly", + "package_url": "https://github.com/SeleniumHQ/selenium", + "repository": null, "targets": [ { "Library": { - "crate_name": "signature", + "crate_name": "selenium_manager", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14444,42 +11609,148 @@ } } ], - "library_target_name": "signature", + "library_target_name": "selenium_manager", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { + "deps": { "common": [ - "alloc", - "std" + { + "id": "anyhow 1.0.86", + "target": "anyhow" + }, + { + "id": "apple-flat-package 0.18.0", + "target": "apple_flat_package" + }, + { + "id": "bzip2 0.4.4", + "target": "bzip2" + }, + { + "id": "clap 4.5.7", + "target": "clap" + }, + { + "id": "debpkg 0.6.0", + "target": "debpkg" + }, + { + "id": "directories 5.0.1", + "target": "directories" + }, + { + "id": "env_logger 0.11.3", + "target": "env_logger" + }, + { + "id": "exitcode 1.1.2", + "target": "exitcode" + }, + { + "id": "flate2 1.0.30", + "target": "flate2" + }, + { + "id": "infer 0.16.0", + "target": "infer" + }, + { + "id": "log 0.4.21", + "target": "log" + }, + { + "id": "regex 1.10.5", + "target": "regex" + }, + { + "id": "reqwest 0.12.4", + "target": "reqwest" + }, + { + "id": "serde 1.0.203", + "target": "serde" + }, + { + "id": "serde_json 1.0.117", + "target": "serde_json" + }, + { + "id": "sevenz-rust 0.6.0", + "target": "sevenz_rust" + }, + { + "id": "tar 0.4.41", + "target": "tar" + }, + { + "id": "tempfile 3.10.1", + "target": "tempfile" + }, + { + "id": "tokio 1.38.0", + "target": "tokio" + }, + { + "id": "toml 0.8.14", + "target": "toml" + }, + { + "id": "walkdir 2.5.0", + "target": "walkdir" + }, + { + "id": "which 6.0.1", + "target": "which" + }, + { + "id": "zip 2.1.3", + "target": "zip" + } + ], + "selects": {} + }, + "deps_dev": { + "common": [ + { + "id": "assert_cmd 2.0.14", + "target": "assert_cmd" + }, + { + "id": "is_executable 1.0.1", + "target": "is_executable" + }, + { + "id": "rstest 0.19.0", + "target": "rstest" + } ], "selects": {} }, "edition": "2021", - "version": "2.2.0" + "version": "0.4.22-nightly" }, - "license": "Apache-2.0 OR MIT", + "license": "Apache-2.0", "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-APACHE" - }, - "simple-file-manifest 0.11.0": { - "name": "simple-file-manifest", - "version": "0.11.0", - "package_url": "https://github.com/indygreg/simple-file-manifest-rs.git", + "Apache-2.0" + ], + "license_file": null + }, + "semver 1.0.23": { + "name": "semver", + "version": "1.0.23", + "package_url": "https://github.com/dtolnay/semver", "repository": { "Http": { - "url": "https://static.crates.io/crates/simple-file-manifest/0.11.0/download", - "sha256": "5dd19be0257552dd56d1bb6946f89f193c6e5b9f13cc9327c4bc84a357507c74" + "url": "https://static.crates.io/crates/semver/1.0.23/download", + "sha256": "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" } }, "targets": [ { "Library": { - "crate_name": "simple_file_manifest", + "crate_name": "semver", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14488,15 +11759,48 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } } ], - "library_target_name": "simple_file_manifest", + "library_target_name": "semver", "common_attrs": { "compile_data_glob": [ "**" ], - "edition": "2021", - "version": "0.11.0" + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "semver 1.0.23", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.0.23" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -14505,20 +11809,20 @@ ], "license_file": "LICENSE-APACHE" }, - "slab 0.4.9": { - "name": "slab", - "version": "0.4.9", - "package_url": "https://github.com/tokio-rs/slab", + "serde 1.0.203": { + "name": "serde", + "version": "1.0.203", + "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/slab/0.4.9/download", - "sha256": "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" + "url": "https://static.crates.io/crates/serde/1.0.203/download", + "sha256": "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" } }, "targets": [ { "Library": { - "crate_name": "slab", + "crate_name": "serde", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14541,7 +11845,7 @@ } } ], - "library_target_name": "slab", + "library_target_name": "serde", "common_attrs": { "compile_data_glob": [ "**" @@ -14549,6 +11853,8 @@ "crate_features": { "common": [ "default", + "derive", + "serde_derive", "std" ], "selects": {} @@ -14556,221 +11862,109 @@ "deps": { "common": [ { - "id": "slab 0.4.9", + "id": "serde 1.0.203", "target": "build_script_build" } ], "selects": {} }, "edition": "2018", - "version": "0.4.9" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ], - "deps": { + "proc_macro_deps": { "common": [ { - "id": "autocfg 1.3.0", - "target": "autocfg" + "id": "serde_derive 1.0.203", + "target": "serde_derive" } ], "selects": {} - } + }, + "version": "1.0.203" }, - "license": "MIT", + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", "license_ids": [ + "Apache-2.0", "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "smallvec 1.13.2": { - "name": "smallvec", - "version": "1.13.2", - "package_url": "https://github.com/servo/rust-smallvec", + "serde-xml-rs 0.6.0": { + "name": "serde-xml-rs", + "version": "0.6.0", + "package_url": "https://github.com/RReverser/serde-xml-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/smallvec/1.13.2/download", - "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" + "url": "https://static.crates.io/crates/serde-xml-rs/0.6.0/download", + "sha256": "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782" } }, "targets": [ { "Library": { - "crate_name": "smallvec", + "crate_name": "serde_xml_rs", "crate_root": "src/lib.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } - } - ], - "library_target_name": "smallvec", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "crate_features": { - "common": [], - "selects": { - "aarch64-apple-darwin": [ - "const_generics", - "const_new" - ], - "aarch64-apple-ios": [ - "const_generics", - "const_new" - ], - "aarch64-apple-ios-sim": [ - "const_generics", - "const_new" - ], - "aarch64-fuchsia": [ - "const_generics", - "const_new" - ], - "aarch64-linux-android": [ - "const_generics", - "const_new" - ], - "aarch64-pc-windows-msvc": [ - "const_generics", - "const_new" - ], - "aarch64-unknown-linux-gnu": [ - "const_generics", - "const_new" - ], - "aarch64-unknown-nixos-gnu": [ - "const_generics", - "const_new" - ], - "aarch64-unknown-nto-qnx710": [ - "const_generics", - "const_new" - ], - "arm-unknown-linux-gnueabi": [ - "const_generics", - "const_new" - ], - "armv7-linux-androideabi": [ - "const_generics", - "const_new" - ], - "armv7-unknown-linux-gnueabi": [ - "const_generics", - "const_new" - ], - "i686-apple-darwin": [ - "const_generics", - "const_new" - ], - "i686-linux-android": [ - "const_generics", - "const_new" - ], - "i686-pc-windows-msvc": [ - "const_generics", - "const_new" - ], - "i686-unknown-freebsd": [ - "const_generics", - "const_new" - ], - "i686-unknown-linux-gnu": [ - "const_generics", - "const_new" - ], - "powerpc-unknown-linux-gnu": [ - "const_generics", - "const_new" - ], - "riscv32imc-unknown-none-elf": [ - "const_generics", - "const_new" - ], - "riscv64gc-unknown-none-elf": [ - "const_generics", - "const_new" - ], - "s390x-unknown-linux-gnu": [ - "const_generics", - "const_new" - ], - "thumbv7em-none-eabi": [ - "const_generics", - "const_new" - ], - "thumbv8m.main-none-eabi": [ - "const_generics", - "const_new" - ], - "x86_64-apple-darwin": [ - "const_generics", - "const_new" - ], - "x86_64-apple-ios": [ - "const_generics", - "const_new" - ], - "x86_64-fuchsia": [ - "const_generics", - "const_new" - ], - "x86_64-linux-android": [ - "const_generics", - "const_new" - ], - "x86_64-pc-windows-msvc": [ - "const_generics", - "const_new" - ], - "x86_64-unknown-freebsd": [ - "const_generics", - "const_new" - ], - "x86_64-unknown-linux-gnu": [ - "const_generics", - "const_new" - ], - "x86_64-unknown-nixos-gnu": [ - "const_generics", - "const_new" - ], - "x86_64-unknown-none": [ - "const_generics", - "const_new" - ] + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } } + } + ], + "library_target_name": "serde_xml_rs", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "log 0.4.21", + "target": "log" + }, + { + "id": "serde 1.0.203", + "target": "serde" + }, + { + "id": "thiserror 1.0.61", + "target": "thiserror" + }, + { + "id": "xml-rs 0.8.20", + "target": "xml" + } + ], + "selects": {} }, "edition": "2018", - "version": "1.13.2" + "version": "0.6.0" }, - "license": "MIT OR Apache-2.0", + "license": "MIT", "license_ids": [ - "Apache-2.0", "MIT" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "socket2 0.5.7": { - "name": "socket2", - "version": "0.5.7", - "package_url": "https://github.com/rust-lang/socket2", + "serde_derive 1.0.203": { + "name": "serde_derive", + "version": "1.0.203", + "package_url": "https://github.com/serde-rs/serde", "repository": { "Http": { - "url": "https://static.crates.io/crates/socket2/0.5.7/download", - "sha256": "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" + "url": "https://static.crates.io/crates/serde_derive/1.0.203/download", + "sha256": "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" } }, "targets": [ { - "Library": { - "crate_name": "socket2", + "ProcMacro": { + "crate_name": "serde_derive", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14781,36 +11975,36 @@ } } ], - "library_target_name": "socket2", + "library_target_name": "serde_derive", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "all" + "default" ], "selects": {} }, "deps": { - "common": [], - "selects": { - "cfg(unix)": [ - { - "id": "libc 0.2.154", - "target": "libc" - } - ], - "cfg(windows)": [ - { - "id": "windows-sys 0.52.0", - "target": "windows_sys" - } - ] - } + "common": [ + { + "id": "proc-macro2 1.0.82", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.36", + "target": "quote" + }, + { + "id": "syn 2.0.64", + "target": "syn" + } + ], + "selects": {} }, - "edition": "2021", - "version": "0.5.7" + "edition": "2015", + "version": "1.0.203" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -14819,20 +12013,20 @@ ], "license_file": "LICENSE-APACHE" }, - "spin 0.9.8": { - "name": "spin", - "version": "0.9.8", - "package_url": "https://github.com/mvdnes/spin-rs.git", + "serde_json 1.0.117": { + "name": "serde_json", + "version": "1.0.117", + "package_url": "https://github.com/serde-rs/json", "repository": { "Http": { - "url": "https://static.crates.io/crates/spin/0.9.8/download", - "sha256": "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + "url": "https://static.crates.io/crates/serde_json/1.0.117/download", + "sha256": "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" } }, "targets": [ { "Library": { - "crate_name": "spin", + "crate_name": "serde_json", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14841,42 +12035,82 @@ ] } } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } } ], - "library_target_name": "spin", + "library_target_name": "serde_json", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "once" + "default", + "std" ], "selects": {} }, - "edition": "2015", - "version": "0.9.8" + "deps": { + "common": [ + { + "id": "itoa 1.0.11", + "target": "itoa" + }, + { + "id": "ryu 1.0.18", + "target": "ryu" + }, + { + "id": "serde 1.0.203", + "target": "serde" + }, + { + "id": "serde_json 1.0.117", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "1.0.117" }, - "license": "MIT", + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", "license_ids": [ + "Apache-2.0", "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "spki 0.7.3": { - "name": "spki", - "version": "0.7.3", - "package_url": "https://github.com/RustCrypto/formats/tree/master/spki", + "serde_spanned 0.6.6": { + "name": "serde_spanned", + "version": "0.6.6", + "package_url": "https://github.com/toml-rs/toml", "repository": { "Http": { - "url": "https://static.crates.io/crates/spki/0.7.3/download", - "sha256": "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" + "url": "https://static.crates.io/crates/serde_spanned/0.6.6/download", + "sha256": "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" } }, "targets": [ { "Library": { - "crate_name": "spki", + "crate_name": "serde_spanned", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14887,50 +12121,110 @@ } } ], - "library_target_name": "spki", + "library_target_name": "serde_spanned", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "alloc" + "serde" ], "selects": {} }, "deps": { "common": [ { - "id": "der 0.7.9", - "target": "der" + "id": "serde 1.0.203", + "target": "serde" } ], "selects": {} }, "edition": "2021", - "version": "0.7.3" + "version": "0.6.6" }, - "license": "Apache-2.0 OR MIT", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], "license_file": "LICENSE-APACHE" }, - "strsim 0.11.1": { - "name": "strsim", - "version": "0.11.1", - "package_url": "https://github.com/rapidfuzz/strsim-rs", + "serde_urlencoded 0.7.1": { + "name": "serde_urlencoded", + "version": "0.7.1", + "package_url": "https://github.com/nox/serde_urlencoded", "repository": { "Http": { - "url": "https://static.crates.io/crates/strsim/0.11.1/download", - "sha256": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + "url": "https://static.crates.io/crates/serde_urlencoded/0.7.1/download", + "sha256": "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" + } + }, + "targets": [ + { + "Library": { + "crate_name": "serde_urlencoded", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "serde_urlencoded", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "form_urlencoded 1.2.1", + "target": "form_urlencoded" + }, + { + "id": "itoa 1.0.11", + "target": "itoa" + }, + { + "id": "ryu 1.0.18", + "target": "ryu" + }, + { + "id": "serde 1.0.203", + "target": "serde" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "0.7.1" + }, + "license": "MIT/Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "sevenz-rust 0.6.0": { + "name": "sevenz-rust", + "version": "0.6.0", + "package_url": "https://github.com/dyz1990/sevenz-rust", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/sevenz-rust/0.6.0/download", + "sha256": "9a24854621db6137e3f7ed7d82282485874d212c755c3427a7436fc0c62c3d23" } }, "targets": [ { "Library": { - "crate_name": "strsim", + "crate_name": "sevenz_rust", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14941,34 +12235,85 @@ } } ], - "library_target_name": "strsim", + "library_target_name": "sevenz_rust", "common_attrs": { "compile_data_glob": [ "**" ], - "edition": "2015", - "version": "0.11.1" + "crate_features": { + "common": [ + "compress", + "default" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "bit-set 0.5.3", + "target": "bit_set" + }, + { + "id": "byteorder 1.5.0", + "target": "byteorder" + }, + { + "id": "crc 3.2.1", + "target": "crc" + }, + { + "id": "filetime_creation 0.2.0", + "target": "filetime_creation" + }, + { + "id": "lzma-rust 0.1.6", + "target": "lzma_rust" + }, + { + "id": "nt-time 0.6.10", + "target": "nt_time" + }, + { + "id": "sha2 0.10.8", + "target": "sha2" + } + ], + "selects": { + "cfg(target_arch = \"wasm32\")": [ + { + "id": "js-sys 0.3.69", + "target": "js_sys" + }, + { + "id": "wasm-bindgen 0.2.92", + "target": "wasm_bindgen" + } + ] + } + }, + "edition": "2021", + "version": "0.6.0" }, - "license": "MIT", + "license": "Apache-2.0", "license_ids": [ - "MIT" + "Apache-2.0" ], "license_file": "LICENSE" }, - "subtle 2.5.0": { - "name": "subtle", - "version": "2.5.0", - "package_url": "https://github.com/dalek-cryptography/subtle", + "sha1 0.10.6": { + "name": "sha1", + "version": "0.10.6", + "package_url": "https://github.com/RustCrypto/hashes", "repository": { "Http": { - "url": "https://static.crates.io/crates/subtle/2.5.0/download", - "sha256": "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + "url": "https://static.crates.io/crates/sha1/0.10.6/download", + "sha256": "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" } }, "targets": [ { "Library": { - "crate_name": "subtle", + "crate_name": "sha1", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -14979,34 +12324,62 @@ } } ], - "library_target_name": "subtle", + "library_target_name": "sha1", "common_attrs": { "compile_data_glob": [ "**" ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "digest 0.10.7", + "target": "digest" + } + ], + "selects": { + "cfg(any(target_arch = \"aarch64\", target_arch = \"x86\", target_arch = \"x86_64\"))": [ + { + "id": "cpufeatures 0.2.12", + "target": "cpufeatures" + } + ] + } + }, "edition": "2018", - "version": "2.5.0" + "version": "0.10.6" }, - "license": "BSD-3-Clause", + "license": "MIT OR Apache-2.0", "license_ids": [ - "BSD-3-Clause" + "Apache-2.0", + "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "syn 2.0.64": { - "name": "syn", - "version": "2.0.64", - "package_url": "https://github.com/dtolnay/syn", + "sha2 0.10.8": { + "name": "sha2", + "version": "0.10.8", + "package_url": "https://github.com/RustCrypto/hashes", "repository": { "Http": { - "url": "https://static.crates.io/crates/syn/2.0.64/download", - "sha256": "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" + "url": "https://static.crates.io/crates/sha2/0.10.8/download", + "sha256": "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" } }, "targets": [ { "Library": { - "crate_name": "syn", + "crate_name": "sha2", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15017,45 +12390,40 @@ } } ], - "library_target_name": "syn", + "library_target_name": "sha2", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "clone-impls", "default", - "derive", - "extra-traits", - "full", - "parsing", - "printing", - "proc-macro", - "visit", - "visit-mut" + "std" ], "selects": {} }, "deps": { "common": [ { - "id": "proc-macro2 1.0.82", - "target": "proc_macro2" - }, - { - "id": "quote 1.0.36", - "target": "quote" + "id": "cfg-if 1.0.0", + "target": "cfg_if" }, { - "id": "unicode-ident 1.0.12", - "target": "unicode_ident" + "id": "digest 0.10.7", + "target": "digest" } ], - "selects": {} + "selects": { + "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))": [ + { + "id": "cpufeatures 0.2.12", + "target": "cpufeatures" + } + ] + } }, - "edition": "2021", - "version": "2.0.64" + "edition": "2018", + "version": "0.10.8" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -15064,20 +12432,20 @@ ], "license_file": "LICENSE-APACHE" }, - "sync_wrapper 0.1.2": { - "name": "sync_wrapper", - "version": "0.1.2", - "package_url": "https://github.com/Actyx/sync_wrapper", + "signature 2.2.0": { + "name": "signature", + "version": "2.2.0", + "package_url": "https://github.com/RustCrypto/traits/tree/master/signature", "repository": { "Http": { - "url": "https://static.crates.io/crates/sync_wrapper/0.1.2/download", - "sha256": "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + "url": "https://static.crates.io/crates/signature/2.2.0/download", + "sha256": "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" } }, "targets": [ { "Library": { - "crate_name": "sync_wrapper", + "crate_name": "signature", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15088,34 +12456,42 @@ } } ], - "library_target_name": "sync_wrapper", + "library_target_name": "signature", "common_attrs": { "compile_data_glob": [ "**" ], - "edition": "2018", - "version": "0.1.2" + "crate_features": { + "common": [ + "alloc", + "std" + ], + "selects": {} + }, + "edition": "2021", + "version": "2.2.0" }, - "license": "Apache-2.0", + "license": "Apache-2.0 OR MIT", "license_ids": [ - "Apache-2.0" + "Apache-2.0", + "MIT" ], - "license_file": "LICENSE" + "license_file": "LICENSE-APACHE" }, - "system-configuration 0.5.1": { - "name": "system-configuration", - "version": "0.5.1", - "package_url": "https://github.com/mullvad/system-configuration-rs", + "simple-file-manifest 0.11.0": { + "name": "simple-file-manifest", + "version": "0.11.0", + "package_url": "https://github.com/indygreg/simple-file-manifest-rs.git", "repository": { "Http": { - "url": "https://static.crates.io/crates/system-configuration/0.5.1/download", - "sha256": "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" + "url": "https://static.crates.io/crates/simple-file-manifest/0.11.0/download", + "sha256": "5dd19be0257552dd56d1bb6946f89f193c6e5b9f13cc9327c4bc84a357507c74" } }, "targets": [ { "Library": { - "crate_name": "system_configuration", + "crate_name": "simple_file_manifest", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15126,52 +12502,35 @@ } } ], - "library_target_name": "system_configuration", + "library_target_name": "simple_file_manifest", "common_attrs": { "compile_data_glob": [ "**" ], - "deps": { - "common": [ - { - "id": "bitflags 1.3.2", - "target": "bitflags" - }, - { - "id": "core-foundation 0.9.4", - "target": "core_foundation" - }, - { - "id": "system-configuration-sys 0.5.0", - "target": "system_configuration_sys" - } - ], - "selects": {} - }, "edition": "2021", - "version": "0.5.1" + "version": "0.11.0" }, "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], - "license_file": null + "license_file": "LICENSE-APACHE" }, - "system-configuration-sys 0.5.0": { - "name": "system-configuration-sys", - "version": "0.5.0", - "package_url": "https://github.com/mullvad/system-configuration-rs", + "slab 0.4.9": { + "name": "slab", + "version": "0.4.9", + "package_url": "https://github.com/tokio-rs/slab", "repository": { "Http": { - "url": "https://static.crates.io/crates/system-configuration-sys/0.5.0/download", - "sha256": "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" + "url": "https://static.crates.io/crates/slab/0.4.9/download", + "sha256": "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" } }, "targets": [ { "Library": { - "crate_name": "system_configuration_sys", + "crate_name": "slab", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15194,57 +12553,64 @@ } } ], - "library_target_name": "system_configuration_sys", + "library_target_name": "slab", "common_attrs": { "compile_data_glob": [ "**" ], + "crate_features": { + "common": [ + "default", + "std" + ], + "selects": {} + }, "deps": { "common": [ { - "id": "core-foundation-sys 0.8.6", - "target": "core_foundation_sys" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "system-configuration-sys 0.5.0", + "id": "slab 0.4.9", "target": "build_script_build" } ], "selects": {} }, - "edition": "2021", - "version": "0.5.0" + "edition": "2018", + "version": "0.4.9" }, "build_script_attrs": { "data_glob": [ "**" - ] + ], + "deps": { + "common": [ + { + "id": "autocfg 1.3.0", + "target": "autocfg" + } + ], + "selects": {} + } }, - "license": "MIT OR Apache-2.0", + "license": "MIT", "license_ids": [ - "Apache-2.0", "MIT" ], - "license_file": null + "license_file": "LICENSE" }, - "tar 0.4.41": { - "name": "tar", - "version": "0.4.41", - "package_url": "https://github.com/alexcrichton/tar-rs", + "smallvec 1.13.2": { + "name": "smallvec", + "version": "1.13.2", + "package_url": "https://github.com/servo/rust-smallvec", "repository": { "Http": { - "url": "https://static.crates.io/crates/tar/0.4.41/download", - "sha256": "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" + "url": "https://static.crates.io/crates/smallvec/1.13.2/download", + "sha256": "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" } }, "targets": [ { "Library": { - "crate_name": "tar", + "crate_name": "smallvec", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15255,180 +12621,146 @@ } } ], - "library_target_name": "tar", + "library_target_name": "smallvec", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { - "common": [ - "default", - "xattr" - ], - "selects": {} - }, - "deps": { - "common": [ - { - "id": "filetime 0.2.23", - "target": "filetime" - } - ], + "common": [], "selects": { "aarch64-apple-darwin": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-apple-ios": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-apple-ios-sim": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-fuchsia": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-linux-android": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "aarch64-pc-windows-msvc": [ + "const_generics", + "const_new" ], "aarch64-unknown-linux-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-unknown-nixos-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "aarch64-unknown-nto-qnx710": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "arm-unknown-linux-gnueabi": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "armv7-linux-androideabi": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "armv7-unknown-linux-gnueabi": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } - ], - "cfg(unix)": [ - { - "id": "libc 0.2.154", - "target": "libc" - } + "const_generics", + "const_new" ], "i686-apple-darwin": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "i686-linux-android": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "i686-pc-windows-msvc": [ + "const_generics", + "const_new" ], "i686-unknown-freebsd": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "i686-unknown-linux-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "powerpc-unknown-linux-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "riscv32imc-unknown-none-elf": [ + "const_generics", + "const_new" + ], + "riscv64gc-unknown-none-elf": [ + "const_generics", + "const_new" ], "s390x-unknown-linux-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "thumbv7em-none-eabi": [ + "const_generics", + "const_new" + ], + "thumbv8m.main-none-eabi": [ + "const_generics", + "const_new" ], "x86_64-apple-darwin": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "x86_64-apple-ios": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "x86_64-fuchsia": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "x86_64-linux-android": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "x86_64-pc-windows-msvc": [ + "const_generics", + "const_new" ], "x86_64-unknown-freebsd": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "x86_64-unknown-linux-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" ], "x86_64-unknown-nixos-gnu": [ - { - "id": "xattr 1.3.1", - "target": "xattr" - } + "const_generics", + "const_new" + ], + "x86_64-unknown-none": [ + "const_generics", + "const_new" ] } }, - "edition": "2021", - "version": "0.4.41" + "edition": "2018", + "version": "1.13.2" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -15437,20 +12769,20 @@ ], "license_file": "LICENSE-APACHE" }, - "tempfile 3.10.1": { - "name": "tempfile", - "version": "3.10.1", - "package_url": "https://github.com/Stebalien/tempfile", + "socket2 0.5.7": { + "name": "socket2", + "version": "0.5.7", + "package_url": "https://github.com/rust-lang/socket2", "repository": { "Http": { - "url": "https://static.crates.io/crates/tempfile/3.10.1/download", - "sha256": "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" + "url": "https://static.crates.io/crates/socket2/0.5.7/download", + "sha256": "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" } }, "targets": [ { "Library": { - "crate_name": "tempfile", + "crate_name": "socket2", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15461,27 +12793,24 @@ } } ], - "library_target_name": "tempfile", + "library_target_name": "socket2", "common_attrs": { "compile_data_glob": [ "**" ], - "deps": { + "crate_features": { "common": [ - { - "id": "cfg-if 1.0.0", - "target": "cfg_if" - }, - { - "id": "fastrand 2.1.0", - "target": "fastrand" - } + "all" ], + "selects": {} + }, + "deps": { + "common": [], "selects": { - "cfg(any(unix, target_os = \"wasi\"))": [ + "cfg(unix)": [ { - "id": "rustix 0.38.34", - "target": "rustix" + "id": "libc 0.2.154", + "target": "libc" } ], "cfg(windows)": [ @@ -15493,7 +12822,7 @@ } }, "edition": "2021", - "version": "3.10.1" + "version": "0.5.7" }, "license": "MIT OR Apache-2.0", "license_ids": [ @@ -15502,20 +12831,20 @@ ], "license_file": "LICENSE-APACHE" }, - "termtree 0.4.1": { - "name": "termtree", - "version": "0.4.1", - "package_url": "https://github.com/rust-cli/termtree", + "spin 0.9.8": { + "name": "spin", + "version": "0.9.8", + "package_url": "https://github.com/mvdnes/spin-rs.git", "repository": { "Http": { - "url": "https://static.crates.io/crates/termtree/0.4.1/download", - "sha256": "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + "url": "https://static.crates.io/crates/spin/0.9.8/download", + "sha256": "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" } }, "targets": [ { "Library": { - "crate_name": "termtree", + "crate_name": "spin", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15526,13 +12855,19 @@ } } ], - "library_target_name": "termtree", + "library_target_name": "spin", "common_attrs": { "compile_data_glob": [ "**" ], - "edition": "2018", - "version": "0.4.1" + "crate_features": { + "common": [ + "once" + ], + "selects": {} + }, + "edition": "2015", + "version": "0.9.8" }, "license": "MIT", "license_ids": [ @@ -15540,20 +12875,20 @@ ], "license_file": "LICENSE" }, - "thiserror 1.0.61": { - "name": "thiserror", - "version": "1.0.61", - "package_url": "https://github.com/dtolnay/thiserror", + "spki 0.7.3": { + "name": "spki", + "version": "0.7.3", + "package_url": "https://github.com/RustCrypto/formats/tree/master/spki", "repository": { "Http": { - "url": "https://static.crates.io/crates/thiserror/1.0.61/download", - "sha256": "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" + "url": "https://static.crates.io/crates/spki/0.7.3/download", + "sha256": "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" } }, "targets": [ { "Library": { - "crate_name": "thiserror", + "crate_name": "spki", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15562,72 +12897,52 @@ ] } } - }, - { - "BuildScript": { - "crate_name": "build_script_build", - "crate_root": "build.rs", - "srcs": { - "allow_empty": false, - "include": [ - "**/*.rs" - ] - } - } } ], - "library_target_name": "thiserror", + "library_target_name": "spki", "common_attrs": { "compile_data_glob": [ "**" ], - "deps": { + "crate_features": { "common": [ - { - "id": "thiserror 1.0.61", - "target": "build_script_build" - } + "alloc" ], "selects": {} }, - "edition": "2021", - "proc_macro_deps": { + "deps": { "common": [ { - "id": "thiserror-impl 1.0.61", - "target": "thiserror_impl" + "id": "der 0.7.9", + "target": "der" } ], "selects": {} }, - "version": "1.0.61" - }, - "build_script_attrs": { - "data_glob": [ - "**" - ] + "edition": "2021", + "version": "0.7.3" }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0 OR MIT", "license_ids": [ "Apache-2.0", "MIT" ], "license_file": "LICENSE-APACHE" }, - "thiserror-impl 1.0.61": { - "name": "thiserror-impl", - "version": "1.0.61", - "package_url": "https://github.com/dtolnay/thiserror", + "strsim 0.11.1": { + "name": "strsim", + "version": "0.11.1", + "package_url": "https://github.com/rapidfuzz/strsim-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/thiserror-impl/1.0.61/download", - "sha256": "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" + "url": "https://static.crates.io/crates/strsim/0.11.1/download", + "sha256": "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" } }, "targets": [ { - "ProcMacro": { - "crate_name": "thiserror_impl", + "Library": { + "crate_name": "strsim", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15638,11 +12953,102 @@ } } ], - "library_target_name": "thiserror_impl", + "library_target_name": "strsim", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2015", + "version": "0.11.1" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": "LICENSE" + }, + "subtle 2.5.0": { + "name": "subtle", + "version": "2.5.0", + "package_url": "https://github.com/dalek-cryptography/subtle", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/subtle/2.5.0/download", + "sha256": "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + } + }, + "targets": [ + { + "Library": { + "crate_name": "subtle", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "subtle", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "2.5.0" + }, + "license": "BSD-3-Clause", + "license_ids": [ + "BSD-3-Clause" + ], + "license_file": "LICENSE" + }, + "syn 2.0.64": { + "name": "syn", + "version": "2.0.64", + "package_url": "https://github.com/dtolnay/syn", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/syn/2.0.64/download", + "sha256": "7ad3dee41f36859875573074334c200d1add8e4a87bb37113ebd31d926b7b11f" + } + }, + "targets": [ + { + "Library": { + "crate_name": "syn", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "syn", "common_attrs": { "compile_data_glob": [ "**" ], + "crate_features": { + "common": [ + "clone-impls", + "default", + "derive", + "extra-traits", + "full", + "parsing", + "printing", + "proc-macro", + "visit", + "visit-mut" + ], + "selects": {} + }, "deps": { "common": [ { @@ -15654,36 +13060,74 @@ "target": "quote" }, { - "id": "syn 2.0.64", - "target": "syn" + "id": "unicode-ident 1.0.12", + "target": "unicode_ident" } ], "selects": {} }, "edition": "2021", - "version": "1.0.61" + "version": "2.0.64" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "sync_wrapper 0.1.2": { + "name": "sync_wrapper", + "version": "0.1.2", + "package_url": "https://github.com/Actyx/sync_wrapper", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/sync_wrapper/0.1.2/download", + "sha256": "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + } + }, + "targets": [ + { + "Library": { + "crate_name": "sync_wrapper", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "sync_wrapper", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "0.1.2" }, - "license": "MIT OR Apache-2.0", + "license": "Apache-2.0", "license_ids": [ - "Apache-2.0", - "MIT" + "Apache-2.0" ], - "license_file": "LICENSE-APACHE" + "license_file": "LICENSE" }, - "time 0.3.36": { - "name": "time", - "version": "0.3.36", - "package_url": "https://github.com/time-rs/time", + "system-configuration 0.5.1": { + "name": "system-configuration", + "version": "0.5.1", + "package_url": "https://github.com/mullvad/system-configuration-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/time/0.3.36/download", - "sha256": "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" + "url": "https://static.crates.io/crates/system-configuration/0.5.1/download", + "sha256": "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" } }, "targets": [ { "Library": { - "crate_name": "time", + "crate_name": "system_configuration", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15694,73 +13138,52 @@ } } ], - "library_target_name": "time", + "library_target_name": "system_configuration", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "alloc", - "macros", - "std" - ], - "selects": {} - }, "deps": { "common": [ { - "id": "deranged 0.3.11", - "target": "deranged" - }, - { - "id": "num-conv 0.1.0", - "target": "num_conv" + "id": "bitflags 1.3.2", + "target": "bitflags" }, { - "id": "powerfmt 0.2.0", - "target": "powerfmt" + "id": "core-foundation 0.9.4", + "target": "core_foundation" }, { - "id": "time-core 0.1.2", - "target": "time_core" + "id": "system-configuration-sys 0.5.0", + "target": "system_configuration_sys" } ], "selects": {} }, "edition": "2021", - "proc_macro_deps": { - "common": [ - { - "id": "time-macros 0.2.18", - "target": "time_macros" - } - ], - "selects": {} - }, - "version": "0.3.36" + "version": "0.5.1" }, "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], - "license_file": "LICENSE-Apache" + "license_file": null }, - "time-core 0.1.2": { - "name": "time-core", - "version": "0.1.2", - "package_url": "https://github.com/time-rs/time", + "system-configuration-sys 0.5.0": { + "name": "system-configuration-sys", + "version": "0.5.0", + "package_url": "https://github.com/mullvad/system-configuration-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/time-core/0.1.2/download", - "sha256": "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + "url": "https://static.crates.io/crates/system-configuration-sys/0.5.0/download", + "sha256": "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" } }, "targets": [ { "Library": { - "crate_name": "time_core", + "crate_name": "system_configuration_sys", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15769,38 +13192,11 @@ ] } } - } - ], - "library_target_name": "time_core", - "common_attrs": { - "compile_data_glob": [ - "**" - ], - "edition": "2021", - "version": "0.1.2" - }, - "license": "MIT OR Apache-2.0", - "license_ids": [ - "Apache-2.0", - "MIT" - ], - "license_file": "LICENSE-Apache" - }, - "time-macros 0.2.18": { - "name": "time-macros", - "version": "0.2.18", - "package_url": "https://github.com/time-rs/time", - "repository": { - "Http": { - "url": "https://static.crates.io/crates/time-macros/0.2.18/download", - "sha256": "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" - } - }, - "targets": [ + }, { - "ProcMacro": { - "crate_name": "time_macros", - "crate_root": "src/lib.rs", + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", "srcs": { "allow_empty": false, "include": [ @@ -15810,7 +13206,7 @@ } } ], - "library_target_name": "time_macros", + "library_target_name": "system_configuration_sys", "common_attrs": { "compile_data_glob": [ "**" @@ -15818,40 +13214,49 @@ "deps": { "common": [ { - "id": "num-conv 0.1.0", - "target": "num_conv" + "id": "core-foundation-sys 0.8.6", + "target": "core_foundation_sys" }, { - "id": "time-core 0.1.2", - "target": "time_core" + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "system-configuration-sys 0.5.0", + "target": "build_script_build" } ], "selects": {} }, "edition": "2021", - "version": "0.2.18" + "version": "0.5.0" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] }, "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", "MIT" ], - "license_file": "LICENSE-Apache" + "license_file": null }, - "tinyvec 1.6.0": { - "name": "tinyvec", - "version": "1.6.0", - "package_url": "https://github.com/Lokathor/tinyvec", + "tar 0.4.41": { + "name": "tar", + "version": "0.4.41", + "package_url": "https://github.com/alexcrichton/tar-rs", "repository": { "Http": { - "url": "https://static.crates.io/crates/tinyvec/1.6.0/download", - "sha256": "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" + "url": "https://static.crates.io/crates/tar/0.4.41/download", + "sha256": "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" } }, "targets": [ { "Library": { - "crate_name": "tinyvec", + "crate_name": "tar", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15862,53 +13267,62 @@ } } ], - "library_target_name": "tinyvec", + "library_target_name": "tar", "common_attrs": { "compile_data_glob": [ "**" ], "crate_features": { "common": [ - "alloc", "default", - "tinyvec_macros" + "xattr" ], "selects": {} }, "deps": { "common": [ { - "id": "tinyvec_macros 0.1.1", - "target": "tinyvec_macros" + "id": "filetime 0.2.23", + "target": "filetime" } ], - "selects": {} + "selects": { + "cfg(unix)": [ + { + "id": "libc 0.2.154", + "target": "libc" + }, + { + "id": "xattr 1.3.1", + "target": "xattr" + } + ] + } }, - "edition": "2018", - "version": "1.6.0" + "edition": "2021", + "version": "0.4.41" }, - "license": "Zlib OR Apache-2.0 OR MIT", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", - "MIT", - "Zlib" + "MIT" ], - "license_file": "LICENSE-APACHE.md" + "license_file": "LICENSE-APACHE" }, - "tinyvec_macros 0.1.1": { - "name": "tinyvec_macros", - "version": "0.1.1", - "package_url": "https://github.com/Soveu/tinyvec_macros", + "tempfile 3.10.1": { + "name": "tempfile", + "version": "3.10.1", + "package_url": "https://github.com/Stebalien/tempfile", "repository": { "Http": { - "url": "https://static.crates.io/crates/tinyvec_macros/0.1.1/download", - "sha256": "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + "url": "https://static.crates.io/crates/tempfile/3.10.1/download", + "sha256": "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" } }, "targets": [ { "Library": { - "crate_name": "tinyvec_macros", + "crate_name": "tempfile", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15919,36 +13333,61 @@ } } ], - "library_target_name": "tinyvec_macros", + "library_target_name": "tempfile", "common_attrs": { "compile_data_glob": [ "**" ], - "edition": "2018", - "version": "0.1.1" + "deps": { + "common": [ + { + "id": "cfg-if 1.0.0", + "target": "cfg_if" + }, + { + "id": "fastrand 2.1.0", + "target": "fastrand" + } + ], + "selects": { + "cfg(any(unix, target_os = \"wasi\"))": [ + { + "id": "rustix 0.38.34", + "target": "rustix" + } + ], + "cfg(windows)": [ + { + "id": "windows-sys 0.52.0", + "target": "windows_sys" + } + ] + } + }, + "edition": "2021", + "version": "3.10.1" }, - "license": "MIT OR Apache-2.0 OR Zlib", + "license": "MIT OR Apache-2.0", "license_ids": [ "Apache-2.0", - "MIT", - "Zlib" + "MIT" ], - "license_file": "LICENSE-APACHE.md" + "license_file": "LICENSE-APACHE" }, - "tokio 1.38.0": { - "name": "tokio", - "version": "1.38.0", - "package_url": "https://github.com/tokio-rs/tokio", + "termtree 0.4.1": { + "name": "termtree", + "version": "0.4.1", + "package_url": "https://github.com/rust-cli/termtree", "repository": { "Http": { - "url": "https://static.crates.io/crates/tokio/1.38.0/download", - "sha256": "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" + "url": "https://static.crates.io/crates/termtree/0.4.1/download", + "sha256": "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" } }, "targets": [ { "Library": { - "crate_name": "tokio", + "crate_name": "termtree", "crate_root": "src/lib.rs", "srcs": { "allow_empty": false, @@ -15959,260 +13398,458 @@ } } ], - "library_target_name": "tokio", + "library_target_name": "termtree", "common_attrs": { "compile_data_glob": [ "**" ], - "crate_features": { - "common": [ - "libc", - "macros", - "mio", - "net", - "num_cpus", - "rt", - "rt-multi-thread", - "socket2", - "tokio-macros" - ], - "selects": { - "aarch64-apple-darwin": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-apple-ios": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-apple-ios-sim": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-fuchsia": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" - ], - "aarch64-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-unknown-nixos-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "aarch64-unknown-nto-qnx710": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "arm-unknown-linux-gnueabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "armv7-linux-androideabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "armv7-unknown-linux-gnueabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "i686-apple-darwin": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "i686-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "i686-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" - ], - "i686-unknown-freebsd": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "i686-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "powerpc-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "riscv32imc-unknown-none-elf": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "riscv64gc-unknown-none-elf": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "s390x-unknown-linux-gnu": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "thumbv7em-none-eabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "thumbv8m.main-none-eabi": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-apple-darwin": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-apple-ios": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-fuchsia": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-linux-android": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-pc-windows-msvc": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time", - "windows-sys" - ], - "x86_64-unknown-freebsd": [ - "bytes", - "default", - "io-std", - "io-util", - "sync", - "time" - ], - "x86_64-unknown-linux-gnu": [ + "edition": "2018", + "version": "0.4.1" + }, + "license": "MIT", + "license_ids": [ + "MIT" + ], + "license_file": "LICENSE" + }, + "thiserror 1.0.61": { + "name": "thiserror", + "version": "1.0.61", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/thiserror/1.0.61/download", + "sha256": "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" + } + }, + "targets": [ + { + "Library": { + "crate_name": "thiserror", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + }, + { + "BuildScript": { + "crate_name": "build_script_build", + "crate_root": "build.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "thiserror", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "thiserror 1.0.61", + "target": "build_script_build" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "thiserror-impl 1.0.61", + "target": "thiserror_impl" + } + ], + "selects": {} + }, + "version": "1.0.61" + }, + "build_script_attrs": { + "data_glob": [ + "**" + ] + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "thiserror-impl 1.0.61": { + "name": "thiserror-impl", + "version": "1.0.61", + "package_url": "https://github.com/dtolnay/thiserror", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/thiserror-impl/1.0.61/download", + "sha256": "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" + } + }, + "targets": [ + { + "ProcMacro": { + "crate_name": "thiserror_impl", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "thiserror_impl", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "proc-macro2 1.0.82", + "target": "proc_macro2" + }, + { + "id": "quote 1.0.36", + "target": "quote" + }, + { + "id": "syn 2.0.64", + "target": "syn" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "1.0.61" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-APACHE" + }, + "time 0.3.36": { + "name": "time", + "version": "0.3.36", + "package_url": "https://github.com/time-rs/time", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/time/0.3.36/download", + "sha256": "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" + } + }, + "targets": [ + { + "Library": { + "crate_name": "time", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "time", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "alloc", + "macros", + "std" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "deranged 0.3.11", + "target": "deranged" + }, + { + "id": "num-conv 0.1.0", + "target": "num_conv" + }, + { + "id": "powerfmt 0.2.0", + "target": "powerfmt" + }, + { + "id": "time-core 0.1.2", + "target": "time_core" + } + ], + "selects": {} + }, + "edition": "2021", + "proc_macro_deps": { + "common": [ + { + "id": "time-macros 0.2.18", + "target": "time_macros" + } + ], + "selects": {} + }, + "version": "0.3.36" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-Apache" + }, + "time-core 0.1.2": { + "name": "time-core", + "version": "0.1.2", + "package_url": "https://github.com/time-rs/time", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/time-core/0.1.2/download", + "sha256": "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + } + }, + "targets": [ + { + "Library": { + "crate_name": "time_core", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "time_core", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2021", + "version": "0.1.2" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-Apache" + }, + "time-macros 0.2.18": { + "name": "time-macros", + "version": "0.2.18", + "package_url": "https://github.com/time-rs/time", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/time-macros/0.2.18/download", + "sha256": "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" + } + }, + "targets": [ + { + "ProcMacro": { + "crate_name": "time_macros", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "time_macros", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "deps": { + "common": [ + { + "id": "num-conv 0.1.0", + "target": "num_conv" + }, + { + "id": "time-core 0.1.2", + "target": "time_core" + } + ], + "selects": {} + }, + "edition": "2021", + "version": "0.2.18" + }, + "license": "MIT OR Apache-2.0", + "license_ids": [ + "Apache-2.0", + "MIT" + ], + "license_file": "LICENSE-Apache" + }, + "tinyvec 1.6.0": { + "name": "tinyvec", + "version": "1.6.0", + "package_url": "https://github.com/Lokathor/tinyvec", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/tinyvec/1.6.0/download", + "sha256": "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tinyvec", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "tinyvec", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "alloc", + "default", + "tinyvec_macros" + ], + "selects": {} + }, + "deps": { + "common": [ + { + "id": "tinyvec_macros 0.1.1", + "target": "tinyvec_macros" + } + ], + "selects": {} + }, + "edition": "2018", + "version": "1.6.0" + }, + "license": "Zlib OR Apache-2.0 OR MIT", + "license_ids": [ + "Apache-2.0", + "MIT", + "Zlib" + ], + "license_file": "LICENSE-APACHE.md" + }, + "tinyvec_macros 0.1.1": { + "name": "tinyvec_macros", + "version": "0.1.1", + "package_url": "https://github.com/Soveu/tinyvec_macros", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/tinyvec_macros/0.1.1/download", + "sha256": "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tinyvec_macros", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "tinyvec_macros", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "edition": "2018", + "version": "0.1.1" + }, + "license": "MIT OR Apache-2.0 OR Zlib", + "license_ids": [ + "Apache-2.0", + "MIT", + "Zlib" + ], + "license_file": "LICENSE-APACHE.md" + }, + "tokio 1.38.0": { + "name": "tokio", + "version": "1.38.0", + "package_url": "https://github.com/tokio-rs/tokio", + "repository": { + "Http": { + "url": "https://static.crates.io/crates/tokio/1.38.0/download", + "sha256": "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" + } + }, + "targets": [ + { + "Library": { + "crate_name": "tokio", + "crate_root": "src/lib.rs", + "srcs": { + "allow_empty": false, + "include": [ + "**/*.rs" + ] + } + } + } + ], + "library_target_name": "tokio", + "common_attrs": { + "compile_data_glob": [ + "**" + ], + "crate_features": { + "common": [ + "libc", + "macros", + "mio", + "net", + "num_cpus", + "rt", + "rt-multi-thread", + "socket2", + "tokio-macros" + ], + "selects": { + "aarch64-apple-darwin": [ "bytes", "default", "io-std", @@ -16220,7 +13857,7 @@ "sync", "time" ], - "x86_64-unknown-nixos-gnu": [ + "aarch64-apple-ios": [ "bytes", "default", "io-std", @@ -16228,464 +13865,293 @@ "sync", "time" ], - "x86_64-unknown-none": [ + "aarch64-apple-ios-sim": [ "bytes", "default", "io-std", "io-util", "sync", "time" - ] - } - }, - "deps": { - "common": [ - { - "id": "mio 0.8.11", - "target": "mio" - }, - { - "id": "num_cpus 1.16.0", - "target": "num_cpus" - }, - { - "id": "pin-project-lite 0.2.14", - "target": "pin_project_lite" - } - ], - "selects": { - "aarch64-apple-darwin": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } - ], - "aarch64-apple-ios": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } - ], - "aarch64-apple-ios-sim": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } ], "aarch64-fuchsia": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "aarch64-linux-android": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "aarch64-pc-windows-msvc": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.48.0", - "target": "windows_sys" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" ], "aarch64-unknown-linux-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "aarch64-unknown-nixos-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "aarch64-unknown-nto-qnx710": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "arm-unknown-linux-gnueabi": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "armv7-linux-androideabi": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "armv7-unknown-linux-gnueabi": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } - ], - "cfg(tokio_taskdump)": [ - { - "id": "backtrace 0.3.71", - "target": "backtrace" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "i686-apple-darwin": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "i686-linux-android": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "i686-pc-windows-msvc": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.48.0", - "target": "windows_sys" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" ], "i686-unknown-freebsd": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "i686-unknown-linux-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "powerpc-unknown-linux-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "riscv32imc-unknown-none-elf": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } - ], - "riscv64gc-unknown-none-elf": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "riscv64gc-unknown-none-elf": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "s390x-unknown-linux-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "thumbv7em-none-eabi": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "thumbv8m.main-none-eabi": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-apple-darwin": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-apple-ios": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-fuchsia": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-linux-android": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-pc-windows-msvc": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - }, - { - "id": "windows-sys 0.48.0", - "target": "windows_sys" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time", + "windows-sys" ], "x86_64-unknown-freebsd": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" - } + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" ], "x86_64-unknown-linux-gnu": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, - { - "id": "libc 0.2.154", - "target": "libc" - }, + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-unknown-nixos-gnu": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ], + "x86_64-unknown-none": [ + "bytes", + "default", + "io-std", + "io-util", + "sync", + "time" + ] + } + }, + "deps": { + "common": [ + { + "id": "bytes 1.6.0", + "target": "bytes" + }, + { + "id": "mio 0.8.11", + "target": "mio" + }, + { + "id": "num_cpus 1.16.0", + "target": "num_cpus" + }, + { + "id": "pin-project-lite 0.2.14", + "target": "pin_project_lite" + } + ], + "selects": { + "cfg(not(target_family = \"wasm\"))": [ { "id": "socket2 0.5.7", "target": "socket2" } ], - "x86_64-unknown-nixos-gnu": [ + "cfg(tokio_taskdump)": [ { - "id": "bytes 1.6.0", - "target": "bytes" - }, + "id": "backtrace 0.3.71", + "target": "backtrace" + } + ], + "cfg(unix)": [ { "id": "libc 0.2.154", "target": "libc" - }, - { - "id": "socket2 0.5.7", - "target": "socket2" } ], - "x86_64-unknown-none": [ - { - "id": "bytes 1.6.0", - "target": "bytes" - }, + "cfg(windows)": [ { - "id": "socket2 0.5.7", - "target": "socket2" + "id": "windows-sys 0.48.0", + "target": "windows_sys" } ] } @@ -21335,8 +18801,7 @@ "aarch64-pc-windows-msvc" ], "aarch64-unknown-linux-gnu": [ - "aarch64-unknown-linux-gnu", - "aarch64-unknown-nixos-gnu" + "aarch64-unknown-linux-gnu" ], "aarch64-unknown-nixos-gnu": [ "aarch64-unknown-nixos-gnu" @@ -21423,6 +18888,9 @@ "aarch64-apple-ios-sim" ], "cfg(all(target_arch = \"loongarch64\", target_os = \"linux\"))": [], + "cfg(all(target_arch = \"wasm32\", not(any(target_os = \"emscripten\", target_os = \"wasi\"))))": [ + "wasm32-unknown-unknown" + ], "cfg(all(target_arch = \"x86\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": [ "i686-unknown-linux-gnu" ], @@ -21690,6 +19158,40 @@ "x86_64-unknown-nixos-gnu", "x86_64-unknown-none" ], + "cfg(not(target_family = \"wasm\"))": [ + "aarch64-apple-darwin", + "aarch64-apple-ios", + "aarch64-apple-ios-sim", + "aarch64-fuchsia", + "aarch64-linux-android", + "aarch64-pc-windows-msvc", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-nixos-gnu", + "aarch64-unknown-nto-qnx710", + "arm-unknown-linux-gnueabi", + "armv7-linux-androideabi", + "armv7-unknown-linux-gnueabi", + "i686-apple-darwin", + "i686-linux-android", + "i686-pc-windows-msvc", + "i686-unknown-freebsd", + "i686-unknown-linux-gnu", + "powerpc-unknown-linux-gnu", + "riscv32imc-unknown-none-elf", + "riscv64gc-unknown-none-elf", + "s390x-unknown-linux-gnu", + "thumbv7em-none-eabi", + "thumbv8m.main-none-eabi", + "x86_64-apple-darwin", + "x86_64-apple-ios", + "x86_64-fuchsia", + "x86_64-linux-android", + "x86_64-pc-windows-msvc", + "x86_64-unknown-freebsd", + "x86_64-unknown-linux-gnu", + "x86_64-unknown-nixos-gnu", + "x86_64-unknown-none" + ], "cfg(not(windows))": [ "aarch64-apple-darwin", "aarch64-apple-ios", @@ -21855,8 +19357,7 @@ "x86_64-unknown-freebsd" ], "x86_64-unknown-linux-gnu": [ - "x86_64-unknown-linux-gnu", - "x86_64-unknown-nixos-gnu" + "x86_64-unknown-linux-gnu" ], "x86_64-unknown-nixos-gnu": [ "x86_64-unknown-nixos-gnu" From 0e4ab71121f2dd140a38b8c8e0948da16638dcff Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sat, 15 Jun 2024 18:14:50 -0500 Subject: [PATCH 105/176] [rb] specify that firefox tests use latest version of browser --- .../selenium/webdriver/spec_support/test_environment.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb index 123b889bdbb3c..c7b334dca6b97 100644 --- a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb +++ b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb @@ -272,7 +272,7 @@ def firefox_options(args: [], **opts) opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['FIREFOX_BINARY'] if ENV.key?('FIREFOX_BINARY') args << '--headless' if ENV['HEADLESS'] - WebDriver::Options.firefox(args: args, **opts) + WebDriver::Options.firefox(browser_version: 'stable', args: args, **opts) end def ie_options(**opts) From 01fa154e2b4591cf2a9ab6ef9acdd8c7ba612953 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 09:03:49 -0500 Subject: [PATCH 106/176] [rb] use pinned browsers for tests on github runners --- .github/workflows/ci-ruby.yml | 2 ++ .../integration/selenium/webdriver/element_spec.rb | 14 ++++++++------ .../webdriver/spec_support/test_environment.rb | 6 +++--- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci-ruby.yml b/.github/workflows/ci-ruby.yml index d93d4dc7ad25c..4ce5b897f8717 100644 --- a/.github/workflows/ci-ruby.yml +++ b/.github/workflows/ci-ruby.yml @@ -94,6 +94,7 @@ jobs: --local_test_jobs 1 --test_size_filters large --test_tag_filters ${{ matrix.browser }} + --pin_browsers=true //rb/spec/... integration-tests-remote: @@ -123,4 +124,5 @@ jobs: --local_test_jobs 1 --test_size_filters large --test_tag_filters ${{ matrix.browser }}-remote + --pin_browsers=true //rb/spec/... diff --git a/rb/spec/integration/selenium/webdriver/element_spec.rb b/rb/spec/integration/selenium/webdriver/element_spec.rb index d5985d64dcf0d..46a6a102d2533 100644 --- a/rb/spec/integration/selenium/webdriver/element_spec.rb +++ b/rb/spec/integration/selenium/webdriver/element_spec.rb @@ -568,14 +568,16 @@ module WebDriver end it 'knows when two elements are not equal' do - driver.navigate.to url_for('simpleTest.html') + reset_driver!(args: '--no-sandbox') do |driver| + driver.navigate.to url_for('simpleTest.html') - elements = driver.find_elements(tag_name: 'p') - p1 = elements.fetch(0) - p2 = elements.fetch(1) + elements = driver.find_elements(tag_name: 'p') + p1 = elements.fetch(0) + p2 = elements.fetch(1) - expect(p1).not_to eq(p2) - expect(p1).not_to eql(p2) + expect(p1).not_to eq(p2) + expect(p1).not_to eql(p2) + end end it 'returns the same #hash for equal elements when found by Driver#find_element' do diff --git a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb index c7b334dca6b97..126e233fe2d6a 100644 --- a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb +++ b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb @@ -256,7 +256,7 @@ def chrome_options(args: [], **opts) args << '--headless=chrome' if ENV['HEADLESS'] args << '--no-sandbox' if ENV['NO_SANDBOX'] args << '--disable-gpu' - WebDriver::Options.chrome(browser_version: 'stable', args: args, **opts) + WebDriver::Options.chrome(args: args, **opts) end def edge_options(args: [], **opts) @@ -265,14 +265,14 @@ def edge_options(args: [], **opts) args << '--headless=chrome' if ENV['HEADLESS'] args << '--no-sandbox' if ENV['NO_SANDBOX'] args << '--disable-gpu' - WebDriver::Options.edge(browser_version: 'stable', args: args, **opts) + WebDriver::Options.edge(args: args, **opts) end def firefox_options(args: [], **opts) opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['FIREFOX_BINARY'] if ENV.key?('FIREFOX_BINARY') args << '--headless' if ENV['HEADLESS'] - WebDriver::Options.firefox(browser_version: 'stable', args: args, **opts) + WebDriver::Options.firefox(args: args, **opts) end def ie_options(**opts) From 7dafbd458ef8b160982a7a10ba9b7935cb27ac3c Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 10:17:22 -0500 Subject: [PATCH 107/176] [rb] remove unnecessary code from test --- .../integration/selenium/webdriver/element_spec.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/element_spec.rb b/rb/spec/integration/selenium/webdriver/element_spec.rb index 46a6a102d2533..d5985d64dcf0d 100644 --- a/rb/spec/integration/selenium/webdriver/element_spec.rb +++ b/rb/spec/integration/selenium/webdriver/element_spec.rb @@ -568,16 +568,14 @@ module WebDriver end it 'knows when two elements are not equal' do - reset_driver!(args: '--no-sandbox') do |driver| - driver.navigate.to url_for('simpleTest.html') + driver.navigate.to url_for('simpleTest.html') - elements = driver.find_elements(tag_name: 'p') - p1 = elements.fetch(0) - p2 = elements.fetch(1) + elements = driver.find_elements(tag_name: 'p') + p1 = elements.fetch(0) + p2 = elements.fetch(1) - expect(p1).not_to eq(p2) - expect(p1).not_to eql(p2) - end + expect(p1).not_to eq(p2) + expect(p1).not_to eql(p2) end it 'returns the same #hash for equal elements when found by Driver#find_element' do From 55b5cefe7e4c028f94f1d79203f4a23f5451efff Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 12:35:46 -0500 Subject: [PATCH 108/176] [rb] set browser version to stable in tests for windows since pinning browsers does not apply --- .../selenium/webdriver/spec_support/test_environment.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb index 126e233fe2d6a..881a729ebd4b3 100644 --- a/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb +++ b/rb/spec/integration/selenium/webdriver/spec_support/test_environment.rb @@ -251,6 +251,7 @@ def safari_preview_driver(**opts) end def chrome_options(args: [], **opts) + opts[:browser_version] = 'stable' if WebDriver::Platform.windows? opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['CHROME_BINARY'] if ENV.key?('CHROME_BINARY') args << '--headless=chrome' if ENV['HEADLESS'] @@ -260,6 +261,7 @@ def chrome_options(args: [], **opts) end def edge_options(args: [], **opts) + opts[:browser_version] = 'stable' if WebDriver::Platform.windows? opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['EDGE_BINARY'] if ENV.key?('EDGE_BINARY') args << '--headless=chrome' if ENV['HEADLESS'] @@ -269,6 +271,7 @@ def edge_options(args: [], **opts) end def firefox_options(args: [], **opts) + opts[:browser_version] = 'stable' if WebDriver::Platform.windows? opts[:web_socket_url] = true if ENV['WEBDRIVER_BIDI'] && !opts.key?(:web_socket_url) opts[:binary] ||= ENV['FIREFOX_BINARY'] if ENV.key?('FIREFOX_BINARY') args << '--headless' if ENV['HEADLESS'] From 7eaf1547258fa72de61f8c75c8b947ab6e28ab37 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 13:07:19 -0500 Subject: [PATCH 109/176] [build] explicitly do not set pin browsers on windows github runners --- .github/workflows/ci-ruby.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-ruby.yml b/.github/workflows/ci-ruby.yml index 4ce5b897f8717..79f941a23485b 100644 --- a/.github/workflows/ci-ruby.yml +++ b/.github/workflows/ci-ruby.yml @@ -94,7 +94,7 @@ jobs: --local_test_jobs 1 --test_size_filters large --test_tag_filters ${{ matrix.browser }} - --pin_browsers=true + ${{ matrix.os != 'windows' && '--pin_browsers=true' || '' }} //rb/spec/... integration-tests-remote: @@ -124,5 +124,5 @@ jobs: --local_test_jobs 1 --test_size_filters large --test_tag_filters ${{ matrix.browser }}-remote - --pin_browsers=true + ${{ matrix.os != 'windows' && '--pin_browsers=true' || '' }} //rb/spec/... From 419944d5deb1166194ef0ea72456bd9403756dda Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 13:07:41 -0500 Subject: [PATCH 110/176] [rb] add test guard back --- .../integration/selenium/webdriver/firefox/driver_spec.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb index ae98bca405a3e..4445a32192904 100644 --- a/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/firefox/driver_spec.rb @@ -44,8 +44,10 @@ module Firefox page: {width: 30})).to include(magic_number) end - it 'prints full page', except: {platform: :windows, - reason: 'Some issues with resolution?'} do + it 'prints full page', except: [{platform: :windows, + reason: 'Some issues with resolution?'}, + {platform: :macosx, + reason: 'showing half resolution of what expected'}] do viewport_width = driver.execute_script('return window.innerWidth;') viewport_height = driver.execute_script('return window.innerHeight;') From 288c490ab6e2f8f3e061333cf7ed1c77356c7d8f Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 22:00:00 -0500 Subject: [PATCH 111/176] [rb] update gemfile lock to use the correct version of bundler --- rb/Gemfile.lock | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/rb/Gemfile.lock b/rb/Gemfile.lock index 86a71ae9c2f04..db26862e92f53 100644 --- a/rb/Gemfile.lock +++ b/rb/Gemfile.lock @@ -175,6 +175,7 @@ PLATFORMS universal-java-17 universal-java-18 x64-mingw32 + x86_64-darwin-22 DEPENDENCIES debug (~> 1.7) @@ -194,4 +195,4 @@ DEPENDENCIES yard (~> 0.9.11, >= 0.9.36) BUNDLED WITH - 2.5.6 + 2.2.33 From 85cb2d16281e4e88ca436dbe4cf60dbdbe06e105 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 22:03:59 -0500 Subject: [PATCH 112/176] [build] fix ruby nightly release --- Rakefile | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/Rakefile b/Rakefile index 27abfa8e49f5b..e3fbf4dc026e2 100644 --- a/Rakefile +++ b/Rakefile @@ -706,9 +706,6 @@ namespace :rb do args = arguments.to_a.compact webdriver = args.delete('webdriver') devtools = args.delete('devtools') - if args.include?('--config=remote') || args.include?('--config=release') - File.write('rb/.ruby-version', 'jruby-9.4.7.0') - end Bazel.execute('build', args, '//rb:selenium-webdriver') if webdriver || !devtools Bazel.execute('build', args, '//rb:selenium-devtools') if devtools || !webdriver @@ -724,16 +721,15 @@ namespace :rb do desc 'Push Ruby gems to rubygems' task :release do |_task, arguments| args = arguments.to_a.compact - if args.include?('--config=remote') || args.include?('--config=release') - File.write('rb/.ruby-version', 'jruby-9.4.7.0') - end - nightly = args.delete('nightly') - wd_target = nightly ? '//rb:selenium-webdriver-release' : '//rb:selenium-webdriver-release-nightly' - cdp_target = nightly ? '//rb:selenium-devtools-release' : '//rb:selenium-devtools-release-nightly' - Bazel.execute('run', args, wd_target) - Bazel.execute('run', args, cdp_target) + if nightly + Bazel.execute('run', [], '//rb:selenium-webdriver-bump-nightly-version') + Bazel.execute('run', args, '//rb:selenium-webdriver-release-nightly') + else + Bazel.execute('run', args, '//rb:selenium-webdriver-release') + Bazel.execute('run', args, '//rb:selenium-devtools-release') + end end desc 'Generate Ruby documentation' From 1669f181ac43c51337d22724600a32dd5cb80904 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Sun, 16 Jun 2024 23:28:25 -0500 Subject: [PATCH 113/176] [build] fix java nightly release --- .github/workflows/nightly.yml | 4 ++-- Rakefile | 19 ++++++++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 543f1e9e761c4..1d6dd0325209b 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -37,7 +37,7 @@ jobs: cache-key: rb-nightly-${{ matrix.gem }} run: | export GEM_HOST_API_KEY="Bearer $GITHUB_TOKEN" - ./go rb:release['nightly','--config=release'] + ./go rb:release[nightly,--config=release] on-ruby-failure: name: On Ruby Failure runs-on: ubuntu-latest @@ -90,7 +90,7 @@ jobs: with: name: Nightly Java Release cache-key: java-nightly - run: ./go publish-maven-snapshot + run: ./go java:release[--stamp,nightly] secrets: inherit on-java-failure: name: On Java Failure diff --git a/Rakefile b/Rakefile index e3fbf4dc026e2..a05aafb30596c 100644 --- a/Rakefile +++ b/Rakefile @@ -914,8 +914,25 @@ namespace :java do desc 'Deploy all jars to Maven' task :release do |_task, arguments| args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + nightly = args.delete('nightly') + user, password = read_m2_user_pass + repo = nightly ? 'content/repositories/snapshots' : 'service/local/staging/deploy/maven2' + gpg = nightly ? 'false' : 'true' + + Rake::Task['java:version'].invoke if nightly Rake::Task['java:package'].invoke(*args) - Rake::Task['publish-maven'].invoke + + JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('build', [], target) } + release_args = ['--stamp', + '--define', + "maven_repo=https://oss.sonatype.org/#{repo}", + '--define', + "maven_user=#{user}", + "--define", + "maven_password=#{password}", + '--define', + "gpg_sign=#{gpg}"] + JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', release_args, target) } end desc 'Install jars to local m2 directory' From 8805fd61f85a64c0767894abb2d7ee4c843410d6 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 00:32:25 -0500 Subject: [PATCH 114/176] [build] fix python nightly release --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1d6dd0325209b..b46597c7583e0 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -63,7 +63,7 @@ jobs: with: name: Nightly Python Release cache-key: python-nightly - run: ./go py:release['nightly','--config=release'] + run: ./go py:release[--stamp,nightly] secrets: inherit on-python-failure: name: On Python Failure From 69f8d0489a0e0e4f3f61c56f18fb8640de9c3663 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 00:35:35 -0500 Subject: [PATCH 115/176] [build] fix .NET nightly release --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index b46597c7583e0..1444435a20c6d 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -118,7 +118,7 @@ jobs: name: Nightly DotNet Release cache-key: dotnet-nightly dotnet-version: '6.x' - run: ./go dotnet:release['nightly','--config=release'] + run: ./go dotnet:release[--stamp,nightly] secrets: inherit on-dotnet-failure: name: On .NET Failure From 36537b53a1db7c44f6e8fbfdc71c1b4be425e2a1 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 00:42:26 -0500 Subject: [PATCH 116/176] [build] fix linter issue --- Rakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Rakefile b/Rakefile index a05aafb30596c..1a9b72a5a69bd 100644 --- a/Rakefile +++ b/Rakefile @@ -928,7 +928,7 @@ namespace :java do "maven_repo=https://oss.sonatype.org/#{repo}", '--define', "maven_user=#{user}", - "--define", + '--define', "maven_password=#{password}", '--define', "gpg_sign=#{gpg}"] From 9ce4e666d5ac5c98d14de1f904e06c1a42301a93 Mon Sep 17 00:00:00 2001 From: Selenium CI Bot Date: Mon, 17 Jun 2024 16:22:57 +0200 Subject: [PATCH 117/176] [dotnet][rb][java][js][py] Automated Browser Version Update (#14139) Update pinned browser versions Co-authored-by: Selenium CI Bot Co-authored-by: Titus Fortner --- common/repositories.bzl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/repositories.bzl b/common/repositories.bzl index 334404c813c90..4211c2a67cd5a 100644 --- a/common/repositories.bzl +++ b/common/repositories.bzl @@ -50,8 +50,8 @@ js_library( http_archive( name = "linux_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b2/linux-x86_64/en-US/firefox-128.0b2.tar.bz2", - sha256 = "b621c23f59ad08d536c20b5d1ff40d235bb4b0e05aeba6ff115438642e83ea48", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b3/linux-x86_64/en-US/firefox-128.0b3.tar.bz2", + sha256 = "a44bd8e6c0cbdf28e270190f5dcaab0b803103509f556619047990551b7bea2d", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -72,8 +72,8 @@ js_library( dmg_archive( name = "mac_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b2/mac/en-US/Firefox%20128.0b2.dmg", - sha256 = "41fe14f425bc0f5777b52fd98fb6a425ead516b7c68df7acec3d1da087d9d0fc", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b3/mac/en-US/Firefox%20128.0b3.dmg", + sha256 = "8941d09bfc01cf0bae0ebd82c93b0a03eeceea374152c4c1d448fd45911311bb", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) From 2145a54cc85d36c370707f1d03dbc400fc39a279 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 12:02:18 -0500 Subject: [PATCH 118/176] [build] remove bazel function to release python and duplicate the info for nightly target --- py/BUILD.bazel | 38 +++++++++++++++++++++++++++++---- py/private/release_selenium.bzl | 26 ---------------------- 2 files changed, 34 insertions(+), 30 deletions(-) delete mode 100644 py/private/release_selenium.bzl diff --git a/py/BUILD.bazel b/py/BUILD.bazel index 5e5b98e884986..50af74c030201 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -9,18 +9,48 @@ load("//common:defs.bzl", "copy_file") load("//py:defs.bzl", "generate_devtools", "py_test_suite") load("//py/private:browsers.bzl", "BROWSERS") load("//py/private:import.bzl", "py_import") -load("//py/private:release_selenium.bzl", "release_selenium") -release_selenium( +py_binary( name = "selenium-release", + srcs = [ + "release-selenium.py", + ], + args = [ + "upload", + "$(location :selenium-wheel)", + "$(location :selenium-sdist)", + ], + data = [ + ":selenium-sdist", + ":selenium-wheel", + ], + main = "release-selenium.py", + deps = [ + requirement("twine"), + ], ) -release_selenium( + +py_binary( name = "selenium-release-nightly", - additional_args = [ + srcs = [ + "release-selenium.py", + ], + args = [ + "upload", + "$(location :selenium-wheel)", + "$(location :selenium-sdist)", "--repository", "testpypi", ], + data = [ + ":selenium-sdist", + ":selenium-wheel", + ], + main = "release-selenium.py", + deps = [ + requirement("twine"), + ], ) compile_pip_requirements( diff --git a/py/private/release_selenium.bzl b/py/private/release_selenium.bzl deleted file mode 100644 index eaf9459aba2e5..0000000000000 --- a/py/private/release_selenium.bzl +++ /dev/null @@ -1,26 +0,0 @@ -load("@py_dev_requirements//:requirements.bzl", "requirement") - -def release_selenium(name, additional_args = []): - native.py_binary( - name = name, - srcs = [ - "release-selenium.py", - ], - args = [ - "upload", - "$(location :selenium-wheel)", - "$(location :selenium-sdist)", - ] + additional_args, - data = [ - ":selenium-sdist", - ":selenium-wheel", - ], - main = "release-selenium.py", - deps = [ - requirement("twine"), - ], - env = { - "TWINE_USERNAME": "$(TWINE_USERNAME)", - "TWINE_PASSWORD": "$(TWINE_PASSWORD)", - }, - ) From 8616a27171b1c3c267cff767f4df74110fc42a15 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 14:02:03 -0500 Subject: [PATCH 119/176] [build] run nightly jobs with stamp not config release --- .github/workflows/nightly.yml | 4 ++-- Rakefile | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1444435a20c6d..6ca5d988529f3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -37,7 +37,7 @@ jobs: cache-key: rb-nightly-${{ matrix.gem }} run: | export GEM_HOST_API_KEY="Bearer $GITHUB_TOKEN" - ./go rb:release[nightly,--config=release] + ./go rb:release[--stamp,nightly] on-ruby-failure: name: On Ruby Failure runs-on: ubuntu-latest @@ -179,7 +179,7 @@ jobs: echo "//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}" >> ~/.npmrc echo "@seleniumhq:registry=https://npm.pkg.github.com" >> ~/.npmrc echo "always-auth=true" >> ~/.npmrc - ./go node:release['nightly','--config=release'] + ./go node:release[--stamp,nightly] secrets: inherit on-javascript-failure: name: On JavaScript Failure diff --git a/Rakefile b/Rakefile index 1a9b72a5a69bd..7dacc9d91cf8c 100644 --- a/Rakefile +++ b/Rakefile @@ -554,7 +554,7 @@ namespace :py do nightly = args.delete('nightly') Rake::Task['py:version'].invoke('nightly') if nightly - command = nightly.nil? ? '//py:selenium-release' : '//py:selenium-release-nightly' + command = nightly ? '//py:selenium-release-nightly' : '//py:selenium-release' Bazel.execute('run', args, command) end From 7fda6601feaa7fd26bb62cd2eb35df8b74a07942 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 14:59:32 -0500 Subject: [PATCH 120/176] [build] do not stamp nightly python release --- .github/workflows/nightly.yml | 2 +- py/BUILD.bazel | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 6ca5d988529f3..2cc9e93d8917d 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -63,7 +63,7 @@ jobs: with: name: Nightly Python Release cache-key: python-nightly - run: ./go py:release[--stamp,nightly] + run: ./go py:release[nightly] secrets: inherit on-python-failure: name: On Python Failure diff --git a/py/BUILD.bazel b/py/BUILD.bazel index 50af74c030201..c939a3ac93ac4 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -38,10 +38,10 @@ py_binary( ], args = [ "upload", - "$(location :selenium-wheel)", - "$(location :selenium-sdist)", "--repository", "testpypi", + "$(location :selenium-wheel)", + "$(location :selenium-sdist)", ], data = [ ":selenium-sdist", From 0eb6be42d955632e8b4aed8687fc795d0bf47ccc Mon Sep 17 00:00:00 2001 From: Simon Mavi Stewart Date: Mon, 17 Jun 2024 21:12:26 +0100 Subject: [PATCH 121/176] py: update requirements_lock.txt --- py/requirements_lock.txt | 293 ++++++++++++++++++++++----------------- 1 file changed, 162 insertions(+), 131 deletions(-) diff --git a/py/requirements_lock.txt b/py/requirements_lock.txt index 037a8bda20bd5..fe47016c6d822 100644 --- a/py/requirements_lock.txt +++ b/py/requirements_lock.txt @@ -11,16 +11,16 @@ async-generator==1.10 \ # -r py/requirements.txt # trio # trio-websocket -attrs==23.1.0 \ - --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ - --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 +attrs==23.2.0 \ + --hash=sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30 \ + --hash=sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1 # via # -r py/requirements.txt # outcome # trio -certifi==2023.7.22 \ - --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ - --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 +certifi==2023.11.17 \ + --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ + --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 # via # -r py/requirements.txt # requests @@ -172,65 +172,65 @@ charset-normalizer==3.3.2 \ --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -cryptography==42.0.4 \ - --hash=sha256:01911714117642a3f1792c7f376db572aadadbafcd8d75bb527166009c9f1d1b \ - --hash=sha256:0e89f7b84f421c56e7ff69f11c441ebda73b8a8e6488d322ef71746224c20fce \ - --hash=sha256:12d341bd42cdb7d4937b0cabbdf2a94f949413ac4504904d0cdbdce4a22cbf88 \ - --hash=sha256:15a1fb843c48b4a604663fa30af60818cd28f895572386e5f9b8a665874c26e7 \ - --hash=sha256:1cdcdbd117681c88d717437ada72bdd5be9de117f96e3f4d50dab3f59fd9ab20 \ - --hash=sha256:1df6fcbf60560d2113b5ed90f072dc0b108d64750d4cbd46a21ec882c7aefce9 \ - --hash=sha256:3c6048f217533d89f2f8f4f0fe3044bf0b2090453b7b73d0b77db47b80af8dff \ - --hash=sha256:3e970a2119507d0b104f0a8e281521ad28fc26f2820687b3436b8c9a5fcf20d1 \ - --hash=sha256:44a64043f743485925d3bcac548d05df0f9bb445c5fcca6681889c7c3ab12764 \ - --hash=sha256:4e36685cb634af55e0677d435d425043967ac2f3790ec652b2b88ad03b85c27b \ - --hash=sha256:5f8907fcf57392cd917892ae83708761c6ff3c37a8e835d7246ff0ad251d9298 \ - --hash=sha256:69b22ab6506a3fe483d67d1ed878e1602bdd5912a134e6202c1ec672233241c1 \ - --hash=sha256:6bfadd884e7280df24d26f2186e4e07556a05d37393b0f220a840b083dc6a824 \ - --hash=sha256:6d0fbe73728c44ca3a241eff9aefe6496ab2656d6e7a4ea2459865f2e8613257 \ - --hash=sha256:6ffb03d419edcab93b4b19c22ee80c007fb2d708429cecebf1dd3258956a563a \ - --hash=sha256:810bcf151caefc03e51a3d61e53335cd5c7316c0a105cc695f0959f2c638b129 \ - --hash=sha256:831a4b37accef30cccd34fcb916a5d7b5be3cbbe27268a02832c3e450aea39cb \ - --hash=sha256:887623fe0d70f48ab3f5e4dbf234986b1329a64c066d719432d0698522749929 \ - --hash=sha256:a0298bdc6e98ca21382afe914c642620370ce0470a01e1bef6dd9b5354c36854 \ - --hash=sha256:a1327f280c824ff7885bdeef8578f74690e9079267c1c8bd7dc5cc5aa065ae52 \ - --hash=sha256:c1f25b252d2c87088abc8bbc4f1ecbf7c919e05508a7e8628e6875c40bc70923 \ - --hash=sha256:c3a5cbc620e1e17009f30dd34cb0d85c987afd21c41a74352d1719be33380885 \ - --hash=sha256:ce8613beaffc7c14f091497346ef117c1798c202b01153a8cc7b8e2ebaaf41c0 \ - --hash=sha256:d2a27aca5597c8a71abbe10209184e1a8e91c1fd470b5070a2ea60cafec35bcd \ - --hash=sha256:dad9c385ba8ee025bb0d856714f71d7840020fe176ae0229de618f14dae7a6e2 \ - --hash=sha256:db4b65b02f59035037fde0998974d84244a64c3265bdef32a827ab9b63d61b18 \ - --hash=sha256:e09469a2cec88fb7b078e16d4adec594414397e8879a4341c6ace96013463d5b \ - --hash=sha256:e53dc41cda40b248ebc40b83b31516487f7db95ab8ceac1f042626bc43a2f992 \ - --hash=sha256:f1e85a178384bf19e36779d91ff35c7617c885da487d689b05c1366f9933ad74 \ - --hash=sha256:f47be41843200f7faec0683ad751e5ef11b9a56a220d57f300376cd8aba81660 \ - --hash=sha256:fb0cef872d8193e487fc6bdb08559c3aa41b659a7d9be48b2e10747f47863925 \ - --hash=sha256:ffc73996c4fca3d2b6c1c8c12bfd3ad00def8621da24f547626bf06441400449 +cryptography==42.0.7 \ + --hash=sha256:02c0eee2d7133bdbbc5e24441258d5d2244beb31da5ed19fbb80315f4bbbff55 \ + --hash=sha256:0d563795db98b4cd57742a78a288cdbdc9daedac29f2239793071fe114f13785 \ + --hash=sha256:16268d46086bb8ad5bf0a2b5544d8a9ed87a0e33f5e77dd3c3301e63d941a83b \ + --hash=sha256:1a58839984d9cb34c855197043eaae2c187d930ca6d644612843b4fe8513c886 \ + --hash=sha256:2954fccea107026512b15afb4aa664a5640cd0af630e2ee3962f2602693f0c82 \ + --hash=sha256:2e47577f9b18723fa294b0ea9a17d5e53a227867a0a4904a1a076d1646d45ca1 \ + --hash=sha256:31adb7d06fe4383226c3e963471f6837742889b3c4caa55aac20ad951bc8ffda \ + --hash=sha256:3577d029bc3f4827dd5bf8bf7710cac13527b470bbf1820a3f394adb38ed7d5f \ + --hash=sha256:36017400817987670037fbb0324d71489b6ead6231c9604f8fc1f7d008087c68 \ + --hash=sha256:362e7197754c231797ec45ee081f3088a27a47c6c01eff2ac83f60f85a50fe60 \ + --hash=sha256:3de9a45d3b2b7d8088c3fbf1ed4395dfeff79d07842217b38df14ef09ce1d8d7 \ + --hash=sha256:4f698edacf9c9e0371112792558d2f705b5645076cc0aaae02f816a0171770fd \ + --hash=sha256:5482e789294854c28237bba77c4c83be698be740e31a3ae5e879ee5444166582 \ + --hash=sha256:5e44507bf8d14b36b8389b226665d597bc0f18ea035d75b4e53c7b1ea84583cc \ + --hash=sha256:779245e13b9a6638df14641d029add5dc17edbef6ec915688f3acb9e720a5858 \ + --hash=sha256:789caea816c6704f63f6241a519bfa347f72fbd67ba28d04636b7c6b7da94b0b \ + --hash=sha256:7f8b25fa616d8b846aef64b15c606bb0828dbc35faf90566eb139aa9cff67af2 \ + --hash=sha256:8cb8ce7c3347fcf9446f201dc30e2d5a3c898d009126010cbd1f443f28b52678 \ + --hash=sha256:93a3209f6bb2b33e725ed08ee0991b92976dfdcf4e8b38646540674fc7508e13 \ + --hash=sha256:a3a5ac8b56fe37f3125e5b72b61dcde43283e5370827f5233893d461b7360cd4 \ + --hash=sha256:a47787a5e3649008a1102d3df55424e86606c9bae6fb77ac59afe06d234605f8 \ + --hash=sha256:a79165431551042cc9d1d90e6145d5d0d3ab0f2d66326c201d9b0e7f5bf43604 \ + --hash=sha256:a987f840718078212fdf4504d0fd4c6effe34a7e4740378e59d47696e8dfb477 \ + --hash=sha256:a9bc127cdc4ecf87a5ea22a2556cab6c7eda2923f84e4f3cc588e8470ce4e42e \ + --hash=sha256:bd13b5e9b543532453de08bcdc3cc7cebec6f9883e886fd20a92f26940fd3e7a \ + --hash=sha256:c65f96dad14f8528a447414125e1fc8feb2ad5a272b8f68477abbcc1ea7d94b9 \ + --hash=sha256:d8e3098721b84392ee45af2dd554c947c32cc52f862b6a3ae982dbb90f577f14 \ + --hash=sha256:e6b79d0adb01aae87e8a44c2b64bc3f3fe59515280e00fb6d57a7267a2583cda \ + --hash=sha256:e6b8f1881dac458c34778d0a424ae5769de30544fc678eac51c1c8bb2183e9da \ + --hash=sha256:e9b2a6309f14c0497f348d08a065d52f3020656f675819fc405fb63bbcd26562 \ + --hash=sha256:ecbfbc00bf55888edda9868a4cf927205de8499e7fabe6c050322298382953f2 \ + --hash=sha256:efd0bf5205240182e0f13bcaea41be4fdf5c22c5129fc7ced4a0282ac86998c9 # via # -r py/requirements.txt # pyopenssl -dataclasses==0.6 \ - --hash=sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f \ - --hash=sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84 - # via -r py/requirements.txt -debugpy==1.8.0 \ - --hash=sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332 \ - --hash=sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0 \ - --hash=sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f \ - --hash=sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa \ - --hash=sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6 \ - --hash=sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637 \ - --hash=sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6 \ - --hash=sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8 \ - --hash=sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb \ - --hash=sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b \ - --hash=sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4 \ - --hash=sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153 \ - --hash=sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f \ - --hash=sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd \ - --hash=sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595 \ - --hash=sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926 \ - --hash=sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e \ - --hash=sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada +debugpy==1.8.1 \ + --hash=sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb \ + --hash=sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146 \ + --hash=sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8 \ + --hash=sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242 \ + --hash=sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0 \ + --hash=sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741 \ + --hash=sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539 \ + --hash=sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23 \ + --hash=sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3 \ + --hash=sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39 \ + --hash=sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd \ + --hash=sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9 \ + --hash=sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace \ + --hash=sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42 \ + --hash=sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0 \ + --hash=sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7 \ + --hash=sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e \ + --hash=sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234 \ + --hash=sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98 \ + --hash=sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703 \ + --hash=sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42 \ + --hash=sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099 # via -r py/requirements.txt docutils==0.20.1 \ --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ @@ -298,66 +298,97 @@ more-itertools==10.1.0 \ # via # -r py/requirements.txt # jaraco-classes -multidict==6.0.2 \ - --hash=sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60 \ - --hash=sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c \ - --hash=sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672 \ - --hash=sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51 \ - --hash=sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032 \ - --hash=sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2 \ - --hash=sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b \ - --hash=sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80 \ - --hash=sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88 \ - --hash=sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a \ - --hash=sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d \ - --hash=sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389 \ - --hash=sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c \ - --hash=sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9 \ - --hash=sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c \ - --hash=sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516 \ - --hash=sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b \ - --hash=sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43 \ - --hash=sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee \ - --hash=sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227 \ - --hash=sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d \ - --hash=sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae \ - --hash=sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7 \ - --hash=sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4 \ - --hash=sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9 \ - --hash=sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f \ - --hash=sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013 \ - --hash=sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9 \ - --hash=sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e \ - --hash=sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693 \ - --hash=sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a \ - --hash=sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15 \ - --hash=sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb \ - --hash=sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96 \ - --hash=sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87 \ - --hash=sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376 \ - --hash=sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658 \ - --hash=sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0 \ - --hash=sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071 \ - --hash=sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360 \ - --hash=sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc \ - --hash=sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3 \ - --hash=sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba \ - --hash=sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8 \ - --hash=sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9 \ - --hash=sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2 \ - --hash=sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3 \ - --hash=sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68 \ - --hash=sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8 \ - --hash=sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d \ - --hash=sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49 \ - --hash=sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608 \ - --hash=sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57 \ - --hash=sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86 \ - --hash=sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20 \ - --hash=sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293 \ - --hash=sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849 \ - --hash=sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937 \ - --hash=sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d +multidict==6.0.5 \ + --hash=sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556 \ + --hash=sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c \ + --hash=sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29 \ + --hash=sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b \ + --hash=sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8 \ + --hash=sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7 \ + --hash=sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd \ + --hash=sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40 \ + --hash=sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6 \ + --hash=sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3 \ + --hash=sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c \ + --hash=sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9 \ + --hash=sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5 \ + --hash=sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae \ + --hash=sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442 \ + --hash=sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9 \ + --hash=sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc \ + --hash=sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c \ + --hash=sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea \ + --hash=sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5 \ + --hash=sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50 \ + --hash=sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182 \ + --hash=sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453 \ + --hash=sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e \ + --hash=sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600 \ + --hash=sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733 \ + --hash=sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda \ + --hash=sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241 \ + --hash=sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461 \ + --hash=sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e \ + --hash=sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e \ + --hash=sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b \ + --hash=sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e \ + --hash=sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7 \ + --hash=sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386 \ + --hash=sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd \ + --hash=sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9 \ + --hash=sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf \ + --hash=sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee \ + --hash=sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5 \ + --hash=sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a \ + --hash=sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271 \ + --hash=sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54 \ + --hash=sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4 \ + --hash=sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496 \ + --hash=sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb \ + --hash=sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319 \ + --hash=sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3 \ + --hash=sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f \ + --hash=sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527 \ + --hash=sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed \ + --hash=sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604 \ + --hash=sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef \ + --hash=sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8 \ + --hash=sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5 \ + --hash=sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5 \ + --hash=sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626 \ + --hash=sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c \ + --hash=sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d \ + --hash=sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c \ + --hash=sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc \ + --hash=sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc \ + --hash=sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b \ + --hash=sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38 \ + --hash=sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450 \ + --hash=sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1 \ + --hash=sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f \ + --hash=sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3 \ + --hash=sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755 \ + --hash=sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226 \ + --hash=sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a \ + --hash=sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046 \ + --hash=sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf \ + --hash=sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479 \ + --hash=sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e \ + --hash=sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1 \ + --hash=sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a \ + --hash=sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83 \ + --hash=sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929 \ + --hash=sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93 \ + --hash=sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a \ + --hash=sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c \ + --hash=sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44 \ + --hash=sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89 \ + --hash=sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba \ + --hash=sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e \ + --hash=sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da \ + --hash=sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24 \ + --hash=sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423 \ + --hash=sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef # via -r py/requirements.txt nh3==0.2.15 \ --hash=sha256:0d02d0ff79dfd8208ed25a39c12cbda092388fff7f1662466e27d97ad011b770 \ @@ -420,9 +451,9 @@ pyopenssl==22.0.0 \ --hash=sha256:660b1b1425aac4a1bea1d94168a85d99f0b3144c869dd4390d27629d0087f1bf \ --hash=sha256:ea252b38c87425b64116f808355e8da644ef9b07e429398bfece610f893ee2e0 # via -r py/requirements.txt -pyparsing==3.1.1 \ - --hash=sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb \ - --hash=sha256:ede28a1a32462f5a9705e07aea48001a08f7cf81a021585011deba701581a0db +pyparsing==3.1.2 \ + --hash=sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad \ + --hash=sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742 # via -r py/requirements.txt pysocks==1.7.1 \ --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ @@ -431,9 +462,9 @@ pysocks==1.7.1 \ # via # -r py/requirements.txt # urllib3 -pytest==7.4.2 \ - --hash=sha256:1d881c6124e08ff0a1bb75ba3ec0bfd8b5354a01c194ddd5a0a870a48d99b002 \ - --hash=sha256:a766259cfab564a2ad52cb1aae1b881a75c3eb7e34ca3779697c23ed47c47069 +pytest==7.4.4 \ + --hash=sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280 \ + --hash=sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8 # via # -r py/requirements.txt # pytest-instafail @@ -473,9 +504,9 @@ rich==13.7.0 \ --hash=sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa \ --hash=sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235 # via twine -sniffio==1.3.0 \ - --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ - --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +sniffio==1.3.1 \ + --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ + --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc # via # -r py/requirements.txt # trio From 0f70ec11210ec03bb0f447e9cf3d0b5efe707073 Mon Sep 17 00:00:00 2001 From: Simon Mavi Stewart Date: Mon, 17 Jun 2024 21:40:10 +0100 Subject: [PATCH 122/176] [py] Repin python deps from a linux box --- py/requirements_lock.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/py/requirements_lock.txt b/py/requirements_lock.txt index fe47016c6d822..fc5cb15044fdb 100644 --- a/py/requirements_lock.txt +++ b/py/requirements_lock.txt @@ -208,6 +208,7 @@ cryptography==42.0.7 \ # via # -r py/requirements.txt # pyopenssl + # secretstorage debugpy==1.8.1 \ --hash=sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb \ --hash=sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146 \ @@ -280,6 +281,12 @@ jaraco-classes==3.3.0 \ --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \ --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621 # via keyring +jeepney==0.8.0 \ + --hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \ + --hash=sha256:c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755 + # via + # keyring + # secretstorage keyring==24.3.0 \ --hash=sha256:4446d35d636e6a10b8bce7caa66913dd9eca5fd222ca03a3d42c38608ac30836 \ --hash=sha256:e730ecffd309658a08ee82535a3b5ec4b4c8669a9be11efb66249d8e0aeb9a25 @@ -504,6 +511,10 @@ rich==13.7.0 \ --hash=sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa \ --hash=sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235 # via twine +secretstorage==3.3.3 \ + --hash=sha256:2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77 \ + --hash=sha256:f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99 + # via keyring sniffio==1.3.1 \ --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc From 3758c199378243916990e4d63a60d640bb547065 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 22:58:16 -0500 Subject: [PATCH 123/176] [py] fix linter failure --- py/BUILD.bazel | 1 - 1 file changed, 1 deletion(-) diff --git a/py/BUILD.bazel b/py/BUILD.bazel index c939a3ac93ac4..2b676096c7a02 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -30,7 +30,6 @@ py_binary( ], ) - py_binary( name = "selenium-release-nightly", srcs = [ From 70bbec8ab501418b694563672299bf4e66e1f27b Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 23:00:23 -0500 Subject: [PATCH 124/176] [build] update rake release tasks to always use bazel stamp --- .github/workflows/nightly.yml | 4 ++-- Rakefile | 28 +++++++++++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2cc9e93d8917d..eeea269c87f62 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -37,7 +37,7 @@ jobs: cache-key: rb-nightly-${{ matrix.gem }} run: | export GEM_HOST_API_KEY="Bearer $GITHUB_TOKEN" - ./go rb:release[--stamp,nightly] + ./go rb:release[nightly] on-ruby-failure: name: On Ruby Failure runs-on: ubuntu-latest @@ -90,7 +90,7 @@ jobs: with: name: Nightly Java Release cache-key: java-nightly - run: ./go java:release[--stamp,nightly] + run: ./go java:release[nightly] secrets: inherit on-java-failure: name: On Java Failure diff --git a/Rakefile b/Rakefile index 7dacc9d91cf8c..8c9ec63c8b036 100644 --- a/Rakefile +++ b/Rakefile @@ -485,11 +485,11 @@ namespace :node do desc 'Release Node npm package' task :release do |_task, arguments| - args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + args = arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['node:version'].invoke('nightly') if nightly - Bazel.execute('run', args, '//javascript/node/selenium-webdriver:selenium-webdriver.publish') + Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish') end desc 'Release Node npm package' @@ -550,12 +550,12 @@ namespace :py do desc 'Release Python wheel and sdist to pypi' task :release do |_task, arguments| - args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + args = arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['py:version'].invoke('nightly') if nightly command = nightly ? '//py:selenium-release-nightly' : '//py:selenium-release' - Bazel.execute('run', args, command) + Bazel.execute('run', ['--stamp'], command) end desc 'generate and copy files required for local development' @@ -725,10 +725,10 @@ namespace :rb do if nightly Bazel.execute('run', [], '//rb:selenium-webdriver-bump-nightly-version') - Bazel.execute('run', args, '//rb:selenium-webdriver-release-nightly') + Bazel.execute('run', ['--stamp'], '//rb:selenium-webdriver-release-nightly') else - Bazel.execute('run', args, '//rb:selenium-webdriver-release') - Bazel.execute('run', args, '//rb:selenium-devtools-release') + Bazel.execute('run', ['--stamp'], '//rb:selenium-webdriver-release') + Bazel.execute('run', ['--stamp'], '//rb:selenium-devtools-release') end end @@ -798,11 +798,10 @@ namespace :dotnet do desc 'Upload nupkg files to Nuget' task :release do |_task, arguments| - args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + args = arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['dotnet:version'].invoke('nightly') if nightly - - Rake::Task['dotnet:package'].invoke(*args) + Rake::Task['dotnet:package'].invoke('--stamp') release_version = dotnet_version api_key = ENV.fetch('NUGET_API_KEY', nil) @@ -881,7 +880,7 @@ namespace :java do desc 'Build Java Client Jars' task :build do |_task, arguments| args = arguments.to_a.compact - Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-combined') + JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('build', args, target) } end desc 'Build Grid Jar' @@ -913,16 +912,15 @@ namespace :java do desc 'Deploy all jars to Maven' task :release do |_task, arguments| - args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + args = arguments.to_a.compact nightly = args.delete('nightly') user, password = read_m2_user_pass repo = nightly ? 'content/repositories/snapshots' : 'service/local/staging/deploy/maven2' gpg = nightly ? 'false' : 'true' Rake::Task['java:version'].invoke if nightly - Rake::Task['java:package'].invoke(*args) - - JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('build', [], target) } + Rake::Task['java:package'].invoke('--stamp') + Rake::Task['java:build'].invoke('--stamp') release_args = ['--stamp', '--define', "maven_repo=https://oss.sonatype.org/#{repo}", From d6a68360a10e6bda339968bdd6f8f418a2faff61 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 23:05:50 -0500 Subject: [PATCH 125/176] [build] minimize rebuilding during maven deployment process using --define to pass in arguments should cause rebuilding where using env variables should not calling build on all the release targets without specifying stamp should cause rebuilding --- Rakefile | 82 ++++++++++++++------------------------------------------ 1 file changed, 20 insertions(+), 62 deletions(-) diff --git a/Rakefile b/Rakefile index 8c9ec63c8b036..fd7073fb798a3 100644 --- a/Rakefile +++ b/Rakefile @@ -336,69 +336,35 @@ end task 'release-java': %i[java-release-zip publish-maven] -# TODO: just set the environment variables that maven is asking for def read_m2_user_pass - user = ENV.fetch('SEL_M2_USER', nil) - pass = ENV.fetch('SEL_M2_PASS', nil) - if user && pass - puts 'Fetching m2 user and pass from environment variables.' - return [user, pass] - end + ENV['MAVEN_USER'] ||= ENV.fetch('SEL_M2_USER', nil) + ENV['MAVEN_PASSWORD'] ||= ENV.fetch('SEL_M2_PASS', nil) + + return if ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER'] - puts 'Fetching m2 user and pass from /.m2/settings.xml.' + puts 'Maven environment variables not set, inspecting /.m2/settings.xml.' settings = File.read("#{Dir.home}/.m2/settings.xml") found_section = false settings.each_line do |line| if !found_section found_section = line.include? 'sonatype-nexus-staging' elsif line.include?('') - user = line[%r{(.*?)}, 1] + ENV['MAVEN_USER'] = line[%r{(.*?)}, 1] elsif line.include?('') - pass = line[%r{(.*?)}, 1] + ENV['MAVEN_PASSWORD'] = line[%r{(.*?)}, 1] end - break if user && pass + break if ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER'] end - [user, pass] end desc 'Publish all Java jars to Maven as stable release' -task 'publish-maven': JAVA_RELEASE_TARGETS do - creds = read_m2_user_pass - JAVA_RELEASE_TARGETS.each do |p| - Bazel.execute('run', - ['--stamp', - '--define', - 'maven_repo=https://oss.sonatype.org/service/local/staging/deploy/maven2', - '--define', - "maven_user=#{creds[0]}", - '--define', - "maven_password=#{creds[1]}", - '--define', - 'gpg_sign=true'], - p) - end +task 'publish-maven' do + Rake::Task['java:release'].invoke end desc 'Publish all Java jars to Maven as nightly release' -task 'publish-maven-snapshot': JAVA_RELEASE_TARGETS do - creds = read_m2_user_pass - if java_version.end_with?('-SNAPSHOT') - JAVA_RELEASE_TARGETS.each do |p| - Bazel.execute('run', - ['--stamp', - '--define', - 'maven_repo=https://oss.sonatype.org/content/repositories/snapshots', - '--define', - "maven_user=#{creds[0]}", - '--define', - "maven_password=#{creds[1]}", - '--define', - 'gpg_sign=false'], - p) - end - else - puts 'No SNAPSHOT version configured. Targets will not be pushed to the snapshot repo in SonaType.' - end +task 'publish-maven-snapshot' do + Rake::Task['java:release'].invoke('nightly') end desc 'Install jars to local m2 directory' @@ -803,10 +769,9 @@ namespace :dotnet do Rake::Task['dotnet:version'].invoke('nightly') if nightly Rake::Task['dotnet:package'].invoke('--stamp') - release_version = dotnet_version api_key = ENV.fetch('NUGET_API_KEY', nil) push_destination = 'https://api.nuget.org/v3/index.json' - if release_version.include?('-nightly') + if nightly # Nightly builds are pushed to GitHub NuGet repository # This commands will run in GitHub Actions api_key = ENV.fetch('GITHUB_TOKEN', nil) @@ -883,10 +848,10 @@ namespace :java do JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('build', args, target) } end - desc 'Build Grid Jar' + desc 'Build Grid Server' task :grid do |_task, arguments| args = arguments.to_a.compact - Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:grid') + Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid') end desc 'Package Java bindings and grid into releasable packages and stage for release' @@ -914,23 +879,16 @@ namespace :java do task :release do |_task, arguments| args = arguments.to_a.compact nightly = args.delete('nightly') - user, password = read_m2_user_pass + + read_m2_user_pass repo = nightly ? 'content/repositories/snapshots' : 'service/local/staging/deploy/maven2' - gpg = nightly ? 'false' : 'true' + ENV['MAVEN_REPO'] = "https://oss.sonatype.org/#{repo}" + ENV['GPG_SIGN'] = (!nightly).to_s Rake::Task['java:version'].invoke if nightly Rake::Task['java:package'].invoke('--stamp') Rake::Task['java:build'].invoke('--stamp') - release_args = ['--stamp', - '--define', - "maven_repo=https://oss.sonatype.org/#{repo}", - '--define', - "maven_user=#{user}", - '--define', - "maven_password=#{password}", - '--define', - "gpg_sign=#{gpg}"] - JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', release_args, target) } + JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', ['--stamp'], target) } end desc 'Install jars to local m2 directory' From 2e90da53932c2306fe7d4096bf0faaaaf30aab0e Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 23:15:39 -0500 Subject: [PATCH 126/176] [build] do not pin setup-ruby to a specific commit --- .github/workflows/pre-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index fd68efa05af03..727472e993cd4 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -68,7 +68,7 @@ jobs: fetch-tags: true ref: release-${{ github.event.inputs.version }} - name: Install Ruby - uses: ruby/setup-ruby@d5fb7a202fc07872cb44f00ba8e6197b70cb0c55 + uses: ruby/setup-ruby@v1 with: ruby-version: '3.1' working-directory: 'rb' From dec42aa8c463d7225c1396ba51b1c4cde64033c2 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Mon, 17 Jun 2024 23:26:43 -0500 Subject: [PATCH 127/176] [build] fix linting --- Rakefile | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Rakefile b/Rakefile index fd7073fb798a3..219cbc8f3d3d6 100644 --- a/Rakefile +++ b/Rakefile @@ -337,11 +337,6 @@ end task 'release-java': %i[java-release-zip publish-maven] def read_m2_user_pass - ENV['MAVEN_USER'] ||= ENV.fetch('SEL_M2_USER', nil) - ENV['MAVEN_PASSWORD'] ||= ENV.fetch('SEL_M2_PASS', nil) - - return if ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER'] - puts 'Maven environment variables not set, inspecting /.m2/settings.xml.' settings = File.read("#{Dir.home}/.m2/settings.xml") found_section = false @@ -880,7 +875,10 @@ namespace :java do args = arguments.to_a.compact nightly = args.delete('nightly') - read_m2_user_pass + ENV['MAVEN_USER'] ||= ENV.fetch('SEL_M2_USER', nil) + ENV['MAVEN_PASSWORD'] ||= ENV.fetch('SEL_M2_PASS', nil) + read_m2_user_pass unless ENV['MAVEN_PASSWORD'] && ENV['MAVEN_USER'] + repo = nightly ? 'content/repositories/snapshots' : 'service/local/staging/deploy/maven2' ENV['MAVEN_REPO'] = "https://oss.sonatype.org/#{repo}" ENV['GPG_SIGN'] = (!nightly).to_s From 1b49a643d896acafd38ab2c16eb52f4efc4b9978 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 18 Jun 2024 13:42:58 -0500 Subject: [PATCH 128/176] [rb] update test guard for fix in linux edgedriver v126 --- rb/spec/integration/selenium/webdriver/driver_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index 73e8e33635424..0c64ac8430e63 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -149,7 +149,7 @@ module WebDriver it 'raises if invalid locator', except: {browser: :edge, - platform: %i[windows linux], + platform: :windows, reason: 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4743'}, exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do driver.navigate.to url_for('xhtmlTest.html') From 4e7346f956ee2bc692eb9ebd997e962d148066ba Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 18 Jun 2024 13:48:42 -0500 Subject: [PATCH 129/176] [java] need to guard both keyboard actions tests for click bug on edge as well --- .../openqa/selenium/bidi/input/DefaultKeyboardTest.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java index fe43cb5391260..1e4de1e3e830b 100644 --- a/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java +++ b/java/test/org/openqa/selenium/bidi/input/DefaultKeyboardTest.java @@ -21,6 +21,7 @@ import static org.junit.jupiter.api.Assumptions.assumeFalse; import static org.openqa.selenium.testing.TestUtilities.getEffectivePlatform; import static org.openqa.selenium.testing.drivers.Browser.CHROME; +import static org.openqa.selenium.testing.drivers.Browser.EDGE; import static org.openqa.selenium.testing.drivers.Browser.IE; import static org.openqa.selenium.testing.drivers.Browser.SAFARI; @@ -200,6 +201,9 @@ void canGenerateKeyboardShortcuts() { @NotYetImplemented( value = CHROME, reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") + @NotYetImplemented( + value = EDGE, + reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") public void testSelectionSelectBySymbol() { driver.get(appServer.whereIs("single_text_input.html")); @@ -229,6 +233,9 @@ public void testSelectionSelectBySymbol() { @NotYetImplemented( value = CHROME, reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") + @NotYetImplemented( + value = EDGE, + reason = "https://github.com/GoogleChromeLabs/chromium-bidi/issues/2321") public void testSelectionSelectByWord() { assumeFalse(getEffectivePlatform(driver).is(Platform.MAC), "MacOS has alternative keyboard"); From 5c5487f626ed123054f8be21805bd215a766a94a Mon Sep 17 00:00:00 2001 From: Selenium CI Bot Date: Tue, 18 Jun 2024 20:56:39 +0200 Subject: [PATCH 130/176] [dotnet][rb][java][js][py] Automated Browser Version Update (#14144) Update pinned browser versions Co-authored-by: Selenium CI Bot Co-authored-by: Titus Fortner --- common/repositories.bzl | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/common/repositories.bzl b/common/repositories.bzl index 4211c2a67cd5a..989f1dc2808e0 100644 --- a/common/repositories.bzl +++ b/common/repositories.bzl @@ -50,8 +50,8 @@ js_library( http_archive( name = "linux_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b3/linux-x86_64/en-US/firefox-128.0b3.tar.bz2", - sha256 = "a44bd8e6c0cbdf28e270190f5dcaab0b803103509f556619047990551b7bea2d", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b4/linux-x86_64/en-US/firefox-128.0b4.tar.bz2", + sha256 = "1cbcc0b831db1b28cc27122de8925ccc776c11a351e211b8c9361c7392de222b", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -72,8 +72,8 @@ js_library( dmg_archive( name = "mac_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b3/mac/en-US/Firefox%20128.0b3.dmg", - sha256 = "8941d09bfc01cf0bae0ebd82c93b0a03eeceea374152c4c1d448fd45911311bb", + url = "https://ftp.mozilla.org/pub/firefox/releases/128.0b4/mac/en-US/Firefox%20128.0b4.dmg", + sha256 = "716aa0ee6dff66fd4f0a0183ef91ba5a2ebfcdc16595c5e6c236fd5e4c6f455d", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -123,10 +123,10 @@ js_library( pkg_archive( name = "mac_edge", - url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/afca7d24-09f1-4c8b-825b-0e043b6ad3eb/MicrosoftEdge-126.0.2592.56.pkg", - sha256 = "ab7c962acd1effed05fb71c91e098360299163197a7e2111dfeac1f420430046", + url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/7f06ea4d-1753-4d40-aab4-edf087546165/MicrosoftEdge-126.0.2592.61.pkg", + sha256 = "ebadb7f4095b98cb627663bff918f3a7f2601462058fdac65a78818dabd1f68e", move = { - "MicrosoftEdge-126.0.2592.56.pkg/Payload/Microsoft Edge.app": "Edge.app", + "MicrosoftEdge-126.0.2592.61.pkg/Payload/Microsoft Edge.app": "Edge.app", }, build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -143,8 +143,8 @@ js_library( deb_archive( name = "linux_edge", - url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_126.0.2592.56-1_amd64.deb", - sha256 = "3592e53c6819a3ca3319648b0f8cf31446bcbe22aad5cf16d71c963ae6918d76", + url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_126.0.2592.61-1_amd64.deb", + sha256 = "ee0a6adf6dd341ea7570497198ab2a58fb6331c881f999c4f2cecb8d89ca9cdb", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -165,8 +165,8 @@ js_library( http_archive( name = "linux_edgedriver", - url = "https://msedgedriver.azureedge.net/125.0.2535.92/edgedriver_linux64.zip", - sha256 = "0110e7a091787f3d723ad8dfedcedda3e2b1b9bee6f34e9020da0af10308eaa1", + url = "https://msedgedriver.azureedge.net/126.0.2592.61/edgedriver_linux64.zip", + sha256 = "9b99973dd92d8e1115c6d317f7e3a9586125abb57c4c19a7f14c755ecc1b8cb4", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -182,8 +182,8 @@ js_library( http_archive( name = "mac_edgedriver", - url = "https://msedgedriver.azureedge.net/125.0.2535.92/edgedriver_mac64.zip", - sha256 = "fcc1057325be98312f6ad66638fde0195c5a88eee87be31c5a63ccd9154c361b", + url = "https://msedgedriver.azureedge.net/126.0.2592.61/edgedriver_mac64.zip", + sha256 = "df6c180720a152b3f7096426cfb722a4ebc4c35715f3e15641323fb45c3c57e6", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) From 09df111e173f2377dd0926025286df96ff8d0f46 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 18 Jun 2024 15:01:18 -0500 Subject: [PATCH 131/176] update copyright dates --- dotnet/src/support/WebDriver.Support.StrongNamed.nuspec | 2 +- dotnet/src/support/WebDriver.Support.nuspec | 2 +- dotnet/src/webdriver/WebDriver.StrongNamed.nuspec | 2 +- dotnet/src/webdriver/WebDriver.nuspec | 2 +- py/docs/source/conf.py | 2 +- rb/README.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec b/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec index e45bf5133cc55..7f4a495aa7c7a 100644 --- a/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec +++ b/dotnet/src/support/WebDriver.Support.StrongNamed.nuspec @@ -4,7 +4,7 @@ $packageid$ $version$ Selenium Committers - Copyright © 2023 Software Freedom Conservancy + Copyright © 2024 Software Freedom Conservancy selenium WebDriver Support false diff --git a/dotnet/src/support/WebDriver.Support.nuspec b/dotnet/src/support/WebDriver.Support.nuspec index 32246ed6655ae..9ce07996c71a7 100644 --- a/dotnet/src/support/WebDriver.Support.nuspec +++ b/dotnet/src/support/WebDriver.Support.nuspec @@ -4,7 +4,7 @@ $packageid$ $version$ Selenium Committers - Copyright © 2023 Software Freedom Conservancy + Copyright © 2024 Software Freedom Conservancy selenium WebDriver Support false diff --git a/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec b/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec index 67f3e3a34820a..026e066e24718 100644 --- a/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec +++ b/dotnet/src/webdriver/WebDriver.StrongNamed.nuspec @@ -4,7 +4,7 @@ $packageid$ $version$ Selenium Committers - Copyright © 2023 Software Freedom Conservancy + Copyright © 2024 Software Freedom Conservancy selenium Selenium WebDriver false diff --git a/dotnet/src/webdriver/WebDriver.nuspec b/dotnet/src/webdriver/WebDriver.nuspec index 2fd030d4ea354..70119ade10d35 100644 --- a/dotnet/src/webdriver/WebDriver.nuspec +++ b/dotnet/src/webdriver/WebDriver.nuspec @@ -4,7 +4,7 @@ $packageid$ $version$ Selenium Committers - Copyright © 2023 Software Freedom Conservancy + Copyright © 2024 Software Freedom Conservancy selenium Selenium WebDriver false diff --git a/py/docs/source/conf.py b/py/docs/source/conf.py index 81091acc4f468..aa4d95165f7e3 100644 --- a/py/docs/source/conf.py +++ b/py/docs/source/conf.py @@ -230,7 +230,7 @@ epub_title = 'Selenium' epub_author = 'The Selenium Project' epub_publisher = 'The Selenium Project' -epub_copyright = '2009-2023 Software Freedom Conservancy' +epub_copyright = '2009-2024 Software Freedom Conservancy' # The language of the text. It defaults to the language option # or en if the language is not set. diff --git a/rb/README.md b/rb/README.md index 9d66c5db00d69..651b47dc6828a 100644 --- a/rb/README.md +++ b/rb/README.md @@ -15,7 +15,7 @@ This gem provides Ruby bindings for Selenium and supports MRI >= 3.0. ## License -Copyright 2009-2023 Software Freedom Conservancy +Copyright 2009-2024 Software Freedom Conservancy Licensed to the Software Freedom Conservancy (SFC) under one or more contributor license agreements. See the NOTICE file From c52751cfee8facfe60ad851d4f0cb6f69131ed5b Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 18 Jun 2024 16:38:47 -0500 Subject: [PATCH 132/176] [py] remove documentation reference to html5 application cache --- py/docs/source/api.rst | 1 - ...bdriver.common.html5.application_cache.rst | 29 ------------------- 2 files changed, 30 deletions(-) delete mode 100644 py/docs/source/webdriver/selenium.webdriver.common.html5.application_cache.rst diff --git a/py/docs/source/api.rst b/py/docs/source/api.rst index c196895e91626..fbf9d9a5734e7 100644 --- a/py/docs/source/api.rst +++ b/py/docs/source/api.rst @@ -43,7 +43,6 @@ Webdriver.common selenium.webdriver.common.actions.pointer_actions selenium.webdriver.common.actions.wheel_input selenium.webdriver.common.actions.wheel_actions - selenium.webdriver.common.html5.application_cache selenium.webdriver.common.virtual_authenticator Webdriver.support diff --git a/py/docs/source/webdriver/selenium.webdriver.common.html5.application_cache.rst b/py/docs/source/webdriver/selenium.webdriver.common.html5.application_cache.rst deleted file mode 100644 index c56fa03b5b37d..0000000000000 --- a/py/docs/source/webdriver/selenium.webdriver.common.html5.application_cache.rst +++ /dev/null @@ -1,29 +0,0 @@ -selenium.webdriver.common.html5.application\_cache -================================================== - -.. automodule:: selenium.webdriver.common.html5.application_cache - - - - - - - - - - - - .. rubric:: Classes - - .. autosummary:: - - ApplicationCache - - - - - - - - - From 8ae6bead7aa5b235afd238e2b07d2ff9526f92e5 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Tue, 18 Jun 2024 10:16:25 -0500 Subject: [PATCH 133/176] [build] explicitly pass version from github workflow to rake task --- .github/workflows/pre-release.yml | 4 ++-- Rakefile | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index 727472e993cd4..42d6a0e0c0f31 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -80,10 +80,10 @@ jobs: run: git reset HEAD~1 - name: Update everything including early release CDP if: ${{ github.event.inputs.chrome_channel == 'early-stable' }} - run: ./go all:prepare['Beta'] + run: ./go all:prepare[${{ github.event.inputs.version }},Beta] - name: Update everything including released CDP if: ${{ github.event.inputs.chrome_channel == 'stable' }} - run: ./go "all:prepare[Stable]" + run: ./go "all:prepare[${{ github.event.inputs.version }},Stable]" - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: diff --git a/Rakefile b/Rakefile index 219cbc8f3d3d6..528d125758ec3 100644 --- a/Rakefile +++ b/Rakefile @@ -1071,8 +1071,9 @@ namespace :all do end desc 'Update everything in preparation for a release' - task :prepare, [:channel] do |_task, arguments| + task :prepare, [:version, :channel] do |_task, arguments| chrome_channel = arguments[:channel] || 'Stable' + version = arguments[:version] args = Array(chrome_channel) ? ['--', "--chrome_channel=#{chrome_channel.capitalize}"] : [] Bazel.execute('run', args, '//scripts:pinned_browsers') commit!('Update pinned browser versions', ['common/repositories.bzl']) @@ -1102,7 +1103,7 @@ namespace :all do commit!('Update authors file', ['AUTHORS']) # Note that this does not include Rust version changes that are handled in separate rake:version task - Rake::Task['all:version'].invoke + Rake::Task['all:version'].invoke(version) commit!("FIX CHANGELOGS BEFORE MERGING!\n\nUpdate versions and change logs to release Selenium #{java_version}", ['dotnet/CHANGELOG', 'dotnet/selenium-dotnet-version.bzl', From d9739391458e315d2dbff99dcf068444bde5db61 Mon Sep 17 00:00:00 2001 From: Alex Rodionov Date: Fri, 7 Jun 2024 16:58:16 -0700 Subject: [PATCH 134/176] [py] Implement script module for BiDi The commit also generates Bazel test targets for BiDi-backed implementation --- .gitignore | 1 + py/BUILD.bazel | 46 ++++++-- py/conftest.py | 29 +++++ py/selenium/webdriver/common/bidi/script.py | 111 ++++++++++++++++++ py/selenium/webdriver/common/bidi/session.py | 42 +++++++ py/selenium/webdriver/common/options.py | 22 ++++ py/selenium/webdriver/remote/webdriver.py | 21 ++++ .../webdriver/remote/websocket_connection.py | 45 +++++-- .../webdriver/common/bidi_script_tests.py | 99 ++++++++++++++++ .../selenium/webdriver/bidi/script_spec.rb | 2 +- 10 files changed, 398 insertions(+), 20 deletions(-) create mode 100644 py/selenium/webdriver/common/bidi/script.py create mode 100644 py/selenium/webdriver/common/bidi/session.py create mode 100644 py/test/selenium/webdriver/common/bidi_script_tests.py diff --git a/.gitignore b/.gitignore index e4adb09ff4f98..d0e0fbe7d099c 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,7 @@ py/selenium/webdriver/remote/isDisplayed.js py/docs/build/ py/build/ py/LICENSE +py/pytestdebug.log selenium.egg-info/ third_party/java/jetty/jetty-repacked.jar *.user diff --git a/py/BUILD.bazel b/py/BUILD.bazel index 2b676096c7a02..f05b9f2de8800 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -214,6 +214,7 @@ py_package( "py.selenium.webdriver.chrome", "py.selenium.webdriver.chromium", "py.selenium.webdriver.common", + "py.selenium.webdriver.common.bidi", "py.selenium.webdriver.common.devtools", "py.selenium.webdriver.edge", "py.selenium.webdriver.firefox", @@ -380,10 +381,39 @@ py_library( deps = [], ) +BIDI_TESTS = glob(["test/selenium/webdriver/common/**/*bidi*_tests.py"]) + [ py_test_suite( name = "common-%s" % browser, size = "large", + srcs = glob( + [ + "test/selenium/webdriver/common/**/*.py", + "test/selenium/webdriver/support/**/*.py", + ], + exclude = BIDI_TESTS + ["test/selenium/webdriver/common/print_pdf_tests.py"], + ), + args = [ + "--instafail", + "--bidi=false", + ] + BROWSERS[browser]["args"], + data = BROWSERS[browser]["data"], + env_inherit = ["DISPLAY"], + tags = ["no-sandbox"] + BROWSERS[browser]["tags"], + deps = [ + ":init-tree", + ":selenium", + ":webserver", + ] + TEST_DEPS, + ) + for browser in BROWSERS.keys() +] + +[ + py_test_suite( + name = "common-%s-bidi" % browser, + size = "large", srcs = glob( [ "test/selenium/webdriver/common/**/*.py", @@ -393,12 +423,11 @@ py_library( ), args = [ "--instafail", + "--bidi=true", ] + BROWSERS[browser]["args"], data = BROWSERS[browser]["data"], env_inherit = ["DISPLAY"], - tags = [ - "no-sandbox", - ] + BROWSERS[browser]["tags"], + tags = ["no-sandbox"] + BROWSERS[browser]["tags"], deps = [ ":init-tree", ":selenium", @@ -504,10 +533,13 @@ py_test_suite( py_test_suite( name = "test-remote", size = "large", - srcs = glob([ - "test/selenium/webdriver/common/**/*.py", - "test/selenium/webdriver/support/**/*.py", - ]), + srcs = glob( + [ + "test/selenium/webdriver/common/**/*.py", + "test/selenium/webdriver/support/**/*.py", + ], + exclude = BIDI_TESTS, + ), args = [ "--instafail", "--driver=remote", diff --git a/py/conftest.py b/py/conftest.py index 3c433f9baae11..b7edd49884bd2 100644 --- a/py/conftest.py +++ b/py/conftest.py @@ -79,6 +79,13 @@ def pytest_addoption(parser): dest="use_lan_ip", help="Whether to start test server with lan ip instead of localhost", ) + parser.addoption( + "--bidi", + action="store", + dest="bidi", + metavar="BIDI", + help="Whether to enable BiDi support", + ) def pytest_ignore_collect(path, config): @@ -158,6 +165,20 @@ def fin(): driver_instance = getattr(webdriver, driver_class)(**kwargs) yield driver_instance + # Close the browser after BiDi tests. Those make event subscriptions + # and doesn't seems to be stable enough, causing the flakiness of the + # subsequent tests. + # Remove this when BiDi implementation and API is stable. + if bool(request.config.option.bidi): + + def fin(): + global driver_instance + if driver_instance is not None: + driver_instance.quit() + driver_instance = None + + request.addfinalizer(fin) + if request.node.get_closest_marker("no_driver_after_test"): driver_instance = None @@ -166,6 +187,7 @@ def get_options(driver_class, config): browser_path = config.option.binary browser_args = config.option.args headless = bool(config.option.headless) + bidi = bool(config.option.bidi) options = None if browser_path or browser_args: @@ -187,6 +209,13 @@ def get_options(driver_class, config): options.add_argument("--headless=new") if driver_class == "Firefox": options.add_argument("-headless") + + if bidi: + if not options: + options = getattr(webdriver, f"{driver_class}Options")() + + options.web_socket_url = True + return options diff --git a/py/selenium/webdriver/common/bidi/script.py b/py/selenium/webdriver/common/bidi/script.py new file mode 100644 index 0000000000000..88a26b6437ca2 --- /dev/null +++ b/py/selenium/webdriver/common/bidi/script.py @@ -0,0 +1,111 @@ +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import typing +from dataclasses import dataclass + +from .session import session_subscribe +from .session import session_unsubscribe + + +class Script: + def __init__(self, conn): + self.conn = conn + self.log_entry_subscribed = False + + def add_console_message_handler(self, handler): + self._subscribe_to_log_entries() + return self.conn.add_callback(LogEntryAdded, self._handle_log_entry("console", handler)) + + def add_javascript_error_handler(self, handler): + self._subscribe_to_log_entries() + return self.conn.add_callback(LogEntryAdded, self._handle_log_entry("javascript", handler)) + + def remove_console_message_handler(self, id): + self.conn.remove_callback(LogEntryAdded, id) + self._unsubscribe_from_log_entries() + + remove_javascript_error_handler = remove_console_message_handler + + def _subscribe_to_log_entries(self): + if not self.log_entry_subscribed: + self.conn.execute(session_subscribe(LogEntryAdded.event_class)) + self.log_entry_subscribed = True + + def _unsubscribe_from_log_entries(self): + if self.log_entry_subscribed and LogEntryAdded.event_class not in self.conn.callbacks: + self.conn.execute(session_unsubscribe(LogEntryAdded.event_class)) + self.log_entry_subscribed = False + + def _handle_log_entry(self, type, handler): + def _handle_log_entry(log_entry): + if log_entry.type_ == type: + handler(log_entry) + + return _handle_log_entry + + +class LogEntryAdded: + event_class = "log.entryAdded" + + @classmethod + def from_json(cls, json): + print(json) + if json["type"] == "console": + return ConsoleLogEntry.from_json(json) + elif json["type"] == "javascript": + return JavaScriptLogEntry.from_json(json) + + +@dataclass +class ConsoleLogEntry: + level: str + text: str + timestamp: str + method: str + args: typing.List[dict] + type_: str + + @classmethod + def from_json(cls, json): + return cls( + level=json["level"], + text=json["text"], + timestamp=json["timestamp"], + method=json["method"], + args=json["args"], + type_=json["type"], + ) + + +@dataclass +class JavaScriptLogEntry: + level: str + text: str + timestamp: str + stacktrace: dict + type_: str + + @classmethod + def from_json(cls, json): + return cls( + level=json["level"], + text=json["text"], + timestamp=json["timestamp"], + stacktrace=json["stackTrace"], + type_=json["type"], + ) diff --git a/py/selenium/webdriver/common/bidi/session.py b/py/selenium/webdriver/common/bidi/session.py new file mode 100644 index 0000000000000..9c334498e5952 --- /dev/null +++ b/py/selenium/webdriver/common/bidi/session.py @@ -0,0 +1,42 @@ +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + + +def session_subscribe(*events, browsing_contexts=[]): + cmd_dict = { + "method": "session.subscribe", + "params": { + "events": events, + }, + } + if browsing_contexts: + cmd_dict["params"]["browsingContexts"] = browsing_contexts + _ = yield cmd_dict + return None + + +def session_unsubscribe(*events, browsing_contexts=[]): + cmd_dict = { + "method": "session.unsubscribe", + "params": { + "events": events, + }, + } + if browsing_contexts: + cmd_dict["params"]["browsingContexts"] = browsing_contexts + _ = yield cmd_dict + return None diff --git a/py/selenium/webdriver/common/options.py b/py/selenium/webdriver/common/options.py index 3856a58a366c2..e938191c79adb 100644 --- a/py/selenium/webdriver/common/options.py +++ b/py/selenium/webdriver/common/options.py @@ -416,6 +416,28 @@ class BaseOptions(metaclass=ABCMeta): - `None` """ + web_socket_url = _BaseOptionsDescriptor("webSocketUrl") + """Gets and Sets WebSocket URL. + + Usage + ----- + - Get + - `self.web_socket_url` + - Set + - `self.web_socket_url` = `value` + + Parameters + ---------- + `value`: `bool` + + Returns + ------- + - Get + - `bool` + - Set + - `None` + """ + def __init__(self) -> None: super().__init__() self._caps = self.default_capabilities diff --git a/py/selenium/webdriver/remote/webdriver.py b/py/selenium/webdriver/remote/webdriver.py index 9e05d5165e8e8..41c4645bdc686 100644 --- a/py/selenium/webdriver/remote/webdriver.py +++ b/py/selenium/webdriver/remote/webdriver.py @@ -41,6 +41,7 @@ from selenium.common.exceptions import NoSuchCookieException from selenium.common.exceptions import NoSuchElementException from selenium.common.exceptions import WebDriverException +from selenium.webdriver.common.bidi.script import Script from selenium.webdriver.common.by import By from selenium.webdriver.common.options import BaseOptions from selenium.webdriver.common.print_page_options import PrintOptions @@ -209,7 +210,9 @@ def __init__( self._authenticator_id = None self.start_client() self.start_session(capabilities) + self._websocket_connection = None + self._script = None def __repr__(self): return f'<{type(self).__module__}.{type(self).__name__} (session="{self.session_id}")>' @@ -1067,6 +1070,24 @@ async def bidi_connection(self): async with conn.open_session(target_id) as session: yield BidiConnection(session, cdp, devtools) + @property + def script(self): + if not self._websocket_connection: + self._start_bidi() + + if not self._script: + self._script = Script(self._websocket_connection) + + return self._script + + def _start_bidi(self): + if self.caps.get("webSocketUrl"): + ws_url = self.caps.get("webSocketUrl") + else: + raise WebDriverException("Unable to find url to connect to from capabilities") + + self._websocket_connection = WebSocketConnection(ws_url) + def _get_cdp_details(self): import json diff --git a/py/selenium/webdriver/remote/websocket_connection.py b/py/selenium/webdriver/remote/websocket_connection.py index 0eb842bb8d8f8..ee0e6ba6d26e6 100644 --- a/py/selenium/webdriver/remote/websocket_connection.py +++ b/py/selenium/webdriver/remote/websocket_connection.py @@ -22,7 +22,7 @@ from websocket import WebSocketApp -logger = logging.getLogger("websocket") +logger = logging.getLogger(__name__) class WebSocketConnection: @@ -32,11 +32,11 @@ class WebSocketConnection: _max_log_message_size = 9999 def __init__(self, url): + self.callbacks = {} self.session_id = None self.url = url self._id = 0 - self._callbacks = {} self._messages = {} self._started = False @@ -57,17 +57,38 @@ def execute(self, command): payload["sessionId"] = self.session_id data = json.dumps(payload) - logger.debug(f"WebSocket -> {data}"[: self._max_log_message_size]) + logger.debug(f"-> {data}"[: self._max_log_message_size]) self._ws.send(data) self._wait_until(lambda: self._id in self._messages) - result = self._messages.pop(self._id)["result"] - return self._deserialize_result(result, command) + response = self._messages.pop(self._id) - def on(self, event, callback): - if event not in self._callbacks: - self._callbacks[event.event_class] = [] - self._callbacks[event.event_class].append(lambda params: callback(event.from_json(params))) + if "error" in response: + raise Exception(response["error"]) + else: + result = response["result"] + return self._deserialize_result(result, command) + + def add_callback(self, event, callback): + event_name = event.event_class + if event_name not in self.callbacks: + self.callbacks[event_name] = [] + + def _callback(params): + callback(event.from_json(params)) + + self.callbacks[event_name].append(_callback) + return id(_callback) + + on = add_callback + + def remove_callback(self, event, callback_id): + event_name = event.event_class + if event_name in self.callbacks: + for callback in self.callbacks[event_name]: + if id(callback) == callback_id: + self.callbacks[event_name].remove(callback) + return def _serialize_command(self, command): return next(command) @@ -87,7 +108,7 @@ def on_message(ws, message): self._process_message(message) def on_error(ws, error): - logger.debug(f"WebSocket error: {error}") + logger.debug(f"error: {error}") ws.close() def run_socket(): @@ -102,14 +123,14 @@ def run_socket(): def _process_message(self, message): message = json.loads(message) - logger.debug(f"WebSocket <- {message}"[: self._max_log_message_size]) + logger.debug(f"<- {message}"[: self._max_log_message_size]) if "id" in message: self._messages[message["id"]] = message if "method" in message: params = message["params"] - for callback in self._callbacks.get(message["method"], []): + for callback in self.callbacks.get(message["method"], []): callback(params) def _wait_until(self, condition): diff --git a/py/test/selenium/webdriver/common/bidi_script_tests.py b/py/test/selenium/webdriver/common/bidi_script_tests.py new file mode 100644 index 0000000000000..7f0b1027e5059 --- /dev/null +++ b/py/test/selenium/webdriver/common/bidi_script_tests.py @@ -0,0 +1,99 @@ +# Licensed to the Software Freedom Conservancy (SFC) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The SFC licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +import pytest + +from selenium.webdriver.common.by import By +from selenium.webdriver.support.ui import WebDriverWait + + +@pytest.mark.xfail_safari +def test_logs_console_messages(driver, pages): + pages.load("bidi/logEntryAdded.html") + + log_entries = [] + driver.script.add_console_message_handler(log_entries.append) + + driver.find_element(By.ID, "jsException").click() + driver.find_element(By.ID, "consoleLog").click() + + WebDriverWait(driver, 5).until(lambda _: log_entries) + + log_entry = log_entries[0] + assert log_entry.level == "info" + assert log_entry.method == "log" + assert log_entry.text == "Hello, world!" + assert log_entry.type_ == "console" + + +@pytest.mark.xfail_safari +def test_logs_console_errors(driver, pages): + pages.load("bidi/logEntryAdded.html") + log_entries = [] + + def log_error(entry): + if entry.level == "error": + log_entries.append(entry) + + driver.script.add_console_message_handler(log_error) + + driver.find_element(By.ID, "consoleLog").click() + driver.find_element(By.ID, "consoleError").click() + + WebDriverWait(driver, 5).until(lambda _: log_entries) + + assert len(log_entries) == 1 + + log_entry = log_entries[0] + assert log_entry.level == "error" + assert log_entry.method == "error" + assert log_entry.text == "I am console error" + assert log_entry.type_ == "console" + + +@pytest.mark.xfail_safari +def test_logs_multiple_console_messages(driver, pages): + pages.load("bidi/logEntryAdded.html") + + log_entries = [] + driver.script.add_console_message_handler(log_entries.append) + driver.script.add_console_message_handler(log_entries.append) + + driver.find_element(By.ID, "jsException").click() + driver.find_element(By.ID, "consoleLog").click() + + WebDriverWait(driver, 5).until(lambda _: len(log_entries) > 1) + assert len(log_entries) == 2 + + +@pytest.mark.xfail_safari +def test_removes_console_message_handler(driver, pages): + pages.load("bidi/logEntryAdded.html") + + log_entries1 = [] + log_entries2 = [] + + id = driver.script.add_console_message_handler(log_entries1.append) + driver.script.add_console_message_handler(log_entries2.append) + + driver.find_element(By.ID, "consoleLog").click() + WebDriverWait(driver, 5).until(lambda _: len(log_entries1) and len(log_entries2)) + + driver.script.remove_console_message_handler(id) + driver.find_element(By.ID, "consoleLog").click() + + WebDriverWait(driver, 5).until(lambda _: len(log_entries2) == 2) + assert len(log_entries1) == 1 diff --git a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb index 34fef2e314393..eb660f9b4d763 100644 --- a/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb +++ b/rb/spec/integration/selenium/webdriver/bidi/script_spec.rb @@ -65,7 +65,7 @@ module WebDriver expect(log_entries.size).to eq(2) end - it 'logs removes console message handler' do + it 'removes console message handler' do driver.navigate.to url_for('bidi/logEntryAdded.html') log_entries = [] From 0f7386e3c496a2b1ef565029379fe91913f08776 Mon Sep 17 00:00:00 2001 From: Augustin Gottlieb Pequeno <33221555+aguspe@users.noreply.github.com> Date: Wed, 19 Jun 2024 01:18:32 +0200 Subject: [PATCH 135/176] [rb] Adds support for the w3c silent option for the ruby library (#14152) Adds support for the w3c silent option for the ruby library Co-authored-by: aguspe --- rb/lib/selenium/webdriver/ie/options.rb | 3 ++- rb/spec/unit/selenium/webdriver/ie/options_spec.rb | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/rb/lib/selenium/webdriver/ie/options.rb b/rb/lib/selenium/webdriver/ie/options.rb index 330cf19a79ff9..ee3f7e8a1b6e7 100644 --- a/rb/lib/selenium/webdriver/ie/options.rb +++ b/rb/lib/selenium/webdriver/ie/options.rb @@ -42,7 +42,8 @@ class Options < WebDriver::Options use_legacy_file_upload_dialog_handling: 'ie.useLegacyFileUploadDialogHandling', attach_to_edge_chrome: 'ie.edgechromium', edge_executable_path: 'ie.edgepath', - ignore_process_match: 'ie.ignoreprocessmatch' + ignore_process_match: 'ie.ignoreprocessmatch', + silent: 'silent' }.freeze BROWSER = 'internet explorer' diff --git a/rb/spec/unit/selenium/webdriver/ie/options_spec.rb b/rb/spec/unit/selenium/webdriver/ie/options_spec.rb index b5e17a17eb0bd..30df493003f3b 100644 --- a/rb/spec/unit/selenium/webdriver/ie/options_spec.rb +++ b/rb/spec/unit/selenium/webdriver/ie/options_spec.rb @@ -57,6 +57,7 @@ module IE use_legacy_file_upload_dialog_handling: true, attach_to_edge_chrome: true, edge_executable_path: '/path/to/edge', + silent: true, 'custom:options': {foo: 'bar'}) expect(opts.args.to_a).to eq(%w[foo bar]) @@ -87,6 +88,7 @@ module IE expect(opts.timeouts).to eq(script: 40000, page_load: 400000, implicit: 1) expect(opts.set_window_rect).to be(false) expect(opts.options[:'custom:options']).to eq(foo: 'bar') + expect(opts.silent).to be_truthy end it 'has native events on by default' do @@ -131,6 +133,7 @@ module IE platform_name: 'win10', accept_insecure_certs: false, page_load_strategy: 'eager', + silent: true, unhandled_prompt_behavior: 'accept', strict_file_interactability: true, timeouts: {script: 40000, @@ -187,7 +190,8 @@ module IE 'ie.usePerProcessProxy' => true, 'ie.useLegacyFileUploadDialogHandling' => true, 'ie.edgechromium' => true, - 'ie.edgepath' => '/path/to/edge'}) + 'ie.edgepath' => '/path/to/edge', + 'silent' => true}) end end end # Options From a3fd83907c2e88dd27ea2a83da664394c3b1b557 Mon Sep 17 00:00:00 2001 From: Viet Nguyen Duc Date: Wed, 19 Jun 2024 14:33:25 +0700 Subject: [PATCH 136/176] [java][grid]: video file name set independently in dynamic grid via se:videoName (#14148) --- .../grid/node/docker/DockerSessionFactory.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/java/src/org/openqa/selenium/grid/node/docker/DockerSessionFactory.java b/java/src/org/openqa/selenium/grid/node/docker/DockerSessionFactory.java index d7aa7eec721fe..9a681c1fdd434 100644 --- a/java/src/org/openqa/selenium/grid/node/docker/DockerSessionFactory.java +++ b/java/src/org/openqa/selenium/grid/node/docker/DockerSessionFactory.java @@ -373,13 +373,16 @@ private Map getVideoContainerEnvVars( // Capabilities set to env vars with higher precedence setCapsToEnvVars(sessionRequestCapabilities, envVars); envVars.put("DISPLAY_CONTAINER_NAME", containerIp); - Optional testName = ofNullable(getTestName(sessionRequestCapabilities)); - testName.ifPresent(name -> envVars.put("SE_VIDEO_FILE_NAME", String.format("%s.mp4", name))); + Optional videoName = + ofNullable(getVideoFileName(sessionRequestCapabilities, "se:videoName")) + .or(() -> ofNullable(getVideoFileName(sessionRequestCapabilities, "se:name"))); + videoName.ifPresent(name -> envVars.put("SE_VIDEO_FILE_NAME", String.format("%s.mp4", name))); return envVars; } - private String getTestName(Capabilities sessionRequestCapabilities) { - Optional testName = ofNullable(sessionRequestCapabilities.getCapability("se:name")); + private String getVideoFileName(Capabilities sessionRequestCapabilities, String capabilityName) { + Optional testName = + ofNullable(sessionRequestCapabilities.getCapability(capabilityName)); if (testName.isPresent()) { String name = testName.get().toString(); if (!name.isEmpty()) { From 523919f42118ff034d8135ac355778cd93c12858 Mon Sep 17 00:00:00 2001 From: Selenium CI Bot Date: Wed, 19 Jun 2024 14:08:30 +0200 Subject: [PATCH 137/176] [dotnet][rb][java][js][py] Automated Browser Version Update (#14155) Update pinned browser versions Co-authored-by: Selenium CI Bot --- common/repositories.bzl | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/common/repositories.bzl b/common/repositories.bzl index 989f1dc2808e0..fbcad60e7b105 100644 --- a/common/repositories.bzl +++ b/common/repositories.bzl @@ -199,8 +199,8 @@ js_library( http_archive( name = "linux_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/linux64/chrome-linux64.zip", - sha256 = "14492d3cfe33cb11d4cc310321182ebf839d33687494c0bb528b05225b9b5f0c", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.62/linux64/chrome-linux64.zip", + sha256 = "6f42045c9134bdd3cfcea03fb54876ad061da998cabd624c92a25ac6811cd737", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -221,8 +221,8 @@ js_library( http_archive( name = "mac_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/mac-x64/chrome-mac-x64.zip", - sha256 = "5b7753cc0102151c8e162c4ed66df8303e390d90ae193a290db1c406cf0fa644", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.62/mac-x64/chrome-mac-x64.zip", + sha256 = "be21f6b9387c6e52c318b60379291959693889e27c3e64111e95135ecffa82ad", strip_prefix = "chrome-mac-x64", patch_cmds = [ "mv 'Google Chrome for Testing.app' Chrome.app", @@ -243,8 +243,8 @@ js_library( http_archive( name = "linux_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/linux64/chromedriver-linux64.zip", - sha256 = "eef5a27798bd6cecae18bdaff64773bf6c96d99a9634d6434127120eb89ac713", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.62/linux64/chromedriver-linux64.zip", + sha256 = "a304e692480c726bae846bf6dee36316305d0b8f4826dfafeab8d6bbbc6e7214", strip_prefix = "chromedriver-linux64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -261,8 +261,8 @@ js_library( http_archive( name = "mac_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.61/mac-x64/chromedriver-mac-x64.zip", - sha256 = "3af4643bf9815ce93722a66dbe32b33ac04f05a673abe60e6fffd2b17b6007d9", + url = "https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.62/mac-x64/chromedriver-mac-x64.zip", + sha256 = "05665a6b5fb71141b5d519998e36f01b650f661942a56dd7f6b929896ae38333", strip_prefix = "chromedriver-mac-x64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") From 0e2a6838e7db4b00499f6ac73b11ac0243fe5563 Mon Sep 17 00:00:00 2001 From: titusfortner Date: Wed, 19 Jun 2024 09:42:12 -0500 Subject: [PATCH 138/176] [build] do not run JS tests in parallel on github actions runner --- .github/workflows/ci-javascript.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-javascript.yml b/.github/workflows/ci-javascript.yml index 732696666d2fd..38f61cd0911cf 100644 --- a/.github/workflows/ci-javascript.yml +++ b/.github/workflows/ci-javascript.yml @@ -31,4 +31,5 @@ jobs: bazel test --flaky_test_attempts 3 --test_tag_filters ${{ matrix.browser }} + --local_test_jobs 1 //javascript/node/... From 8960ff01ce184cfd753043ebabe831c0103dc388 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 20 Jun 2024 01:14:01 +0530 Subject: [PATCH 139/176] [bidi][js] Add high-level logging API (#14135) Related to #13992 Co-authored-by: Titus Fortner --- .../selenium-webdriver/bidi/logInspector.js | 6 ++ .../node/selenium-webdriver/lib/script.js | 63 +++++++++++++ .../node/selenium-webdriver/lib/webdriver.js | 12 +++ .../test/lib/webdriver_script_test.js | 91 +++++++++++++++++++ 4 files changed, 172 insertions(+) create mode 100644 javascript/node/selenium-webdriver/lib/script.js create mode 100644 javascript/node/selenium-webdriver/test/lib/webdriver_script_test.js diff --git a/javascript/node/selenium-webdriver/bidi/logInspector.js b/javascript/node/selenium-webdriver/bidi/logInspector.js index 13f7a8c78dbbf..8146a0c53d1e6 100644 --- a/javascript/node/selenium-webdriver/bidi/logInspector.js +++ b/javascript/node/selenium-webdriver/bidi/logInspector.js @@ -66,11 +66,17 @@ class LogInspector { } removeCallback(id) { + let hasId = false for (const [, callbacks] of this.listener) { if (callbacks.has(id)) { callbacks.delete(id) + hasId = true } } + + if (!hasId) { + throw Error(`Callback with id ${id} not found`) + } } invokeCallbacks(eventType, data) { diff --git a/javascript/node/selenium-webdriver/lib/script.js b/javascript/node/selenium-webdriver/lib/script.js new file mode 100644 index 0000000000000..cf23c525bd68b --- /dev/null +++ b/javascript/node/selenium-webdriver/lib/script.js @@ -0,0 +1,63 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +const logInspector = require('../bidi/logInspector') + +class Script { + #driver + #logInspector + + constructor(driver) { + this.#driver = driver + } + + // This should be done in the constructor. + // But since it needs to call async methods we cannot do that in the constructor. + // We can have a separate async method that initialises the Script instance. + // However, that pattern does not allow chaining the methods as we would like the user to use it. + // Since it involves awaiting to get the instance and then another await to call the method. + // Using this allows the user to do this "await driver.script().addJavaScriptErrorHandler(callback)" + async #init() { + if (this.#logInspector !== undefined) { + return + } + this.#logInspector = await logInspector(this.#driver) + } + + async addJavaScriptErrorHandler(callback) { + await this.#init() + return await this.#logInspector.onJavascriptException(callback) + } + + async removeJavaScriptErrorHandler(id) { + await this.#init() + await this.#logInspector.removeCallback(id) + } + + async addConsoleMessageHandler(callback) { + await this.#init() + return this.#logInspector.onConsoleEntry(callback) + } + + async removeConsoleMessageHandler(id) { + await this.#init() + + await this.#logInspector.removeCallback(id) + } +} + +module.exports = Script diff --git a/javascript/node/selenium-webdriver/lib/webdriver.js b/javascript/node/selenium-webdriver/lib/webdriver.js index 012e02a0db7f4..add28497d0211 100644 --- a/javascript/node/selenium-webdriver/lib/webdriver.js +++ b/javascript/node/selenium-webdriver/lib/webdriver.js @@ -43,6 +43,7 @@ const { isObject } = require('./util') const BIDI = require('../bidi') const { PinnedScript } = require('./pinnedScript') const JSZip = require('jszip') +const Script = require('./script') // Capability names that are defined in the W3C spec. const W3C_CAPABILITY_NAMES = new Set([ @@ -654,6 +655,7 @@ function filterNonW3CCaps(capabilities) { * @implements {IWebDriver} */ class WebDriver { + #script = undefined /** * @param {!(./session.Session|IThenable)} session Either * a known session or a promise that will be resolved to a session. @@ -1104,6 +1106,16 @@ class WebDriver { return new TargetLocator(this) } + script() { + // The Script calls the LogInspector which maintains state of the callbacks. + // Returning a new instance of the same driver will not work while removing callbacks. + if (this.#script === undefined) { + this.#script = new Script(this) + } + + return this.#script + } + validatePrintPageParams(keys, object) { let page = {} let margin = {} diff --git a/javascript/node/selenium-webdriver/test/lib/webdriver_script_test.js b/javascript/node/selenium-webdriver/test/lib/webdriver_script_test.js new file mode 100644 index 0000000000000..dcf27600e5759 --- /dev/null +++ b/javascript/node/selenium-webdriver/test/lib/webdriver_script_test.js @@ -0,0 +1,91 @@ +// Licensed to the Software Freedom Conservancy (SFC) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The SFC licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +'use strict' + +const assert = require('node:assert') +const { Browser } = require('../../') +const { Pages, suite } = require('../../lib/test') +const { until } = require('../../index') + +suite( + function (env) { + let driver + + beforeEach(async function () { + driver = await env.builder().build() + }) + + afterEach(async function () { + await driver.quit() + }) + + function delay(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)) + } + + describe('script()', function () { + it('can listen to console log', async function () { + let log = null + const handler = await driver.script().addConsoleMessageHandler((logEntry) => { + log = logEntry + }) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'consoleLog' }).click() + + await delay(3000) + + assert.equal(log.text, 'Hello, world!') + assert.equal(log.realm, null) + assert.equal(log.type, 'console') + assert.equal(log.level, 'info') + assert.equal(log.method, 'log') + assert.equal(log.args.length, 1) + await driver.script().removeConsoleMessageHandler(handler) + }) + + it('can listen to javascript error', async function () { + let log = null + const handler = await driver.script().addJavaScriptErrorHandler((logEntry) => { + log = logEntry + }) + + await driver.get(Pages.logEntryAdded) + await driver.findElement({ id: 'jsException' }).click() + + await delay(3000) + + assert.equal(log.text, 'Error: Not working') + assert.equal(log.type, 'javascript') + assert.equal(log.level, 'error') + + await driver.script().removeJavaScriptErrorHandler(handler) + }) + + it('throws an error while removing a handler that does not exist', async function () { + try { + await driver.script().removeJavaScriptErrorHandler(10) + assert.fail('Expected error not thrown. Non-existent handler cannot be removed') + } catch (e) { + assert.strictEqual(e.message, 'Callback with id 10 not found') + } + }) + }) + }, + { browsers: [Browser.FIREFOX, Browser.CHROME, Browser.EDGE] }, +) From f8db820e734a1c0f37bc11a5aea193527ed850af Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 20 Jun 2024 07:08:24 -0500 Subject: [PATCH 140/176] [rb] remove guards from test for fixed edge bug --- rb/spec/integration/selenium/webdriver/driver_spec.rb | 3 --- 1 file changed, 3 deletions(-) diff --git a/rb/spec/integration/selenium/webdriver/driver_spec.rb b/rb/spec/integration/selenium/webdriver/driver_spec.rb index 0c64ac8430e63..748fcc1ff6cb1 100644 --- a/rb/spec/integration/selenium/webdriver/driver_spec.rb +++ b/rb/spec/integration/selenium/webdriver/driver_spec.rb @@ -148,9 +148,6 @@ module WebDriver end it 'raises if invalid locator', - except: {browser: :edge, - platform: :windows, - reason: 'https://bugs.chromium.org/p/chromedriver/issues/detail?id=4743'}, exclude: {browser: %i[safari safari_preview], reason: 'Safari TimeoutError'} do driver.navigate.to url_for('xhtmlTest.html') expect { From 078ff3b4baf4a3c68d38a55fdb5c1cb0b34b4b96 Mon Sep 17 00:00:00 2001 From: Puja Jagani Date: Thu, 20 Jun 2024 18:19:39 +0530 Subject: [PATCH 141/176] [js] Fix locate nodes BiDi test (#14140) --- .../node/selenium-webdriver/test/bidi/locate_nodes_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/node/selenium-webdriver/test/bidi/locate_nodes_test.js b/javascript/node/selenium-webdriver/test/bidi/locate_nodes_test.js index c9d4c67c8795d..5e69913b42b7f 100644 --- a/javascript/node/selenium-webdriver/test/bidi/locate_nodes_test.js +++ b/javascript/node/selenium-webdriver/test/bidi/locate_nodes_test.js @@ -33,7 +33,7 @@ suite( let driver beforeEach(async function () { - driver = await env.builder().setFirefoxOptions(new firefox.Options().enableBidi()).build() + driver = await env.builder().build() }) afterEach(async function () { @@ -178,7 +178,7 @@ suite( await browsingContext.navigate(Pages.xhtmlTestPage, 'complete') - const elements = await browsingContext.locateNodes(Locator.css('div'), 1, undefined, sandbox) + const elements = await browsingContext.locateNodes(Locator.css('div'), 1, sandbox) assert.strictEqual(elements.length, 1) From 8b567118737a5d0466a23077249e6f4c74f3b695 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Jun 2024 20:01:55 +0700 Subject: [PATCH 142/176] [py] remove desired capabilities argument for Webkitgtk (#14128) * initial changes for capabilities removing remove capabilities and add default Options same in safari.webdriver * make webkitgtk.webdriver same as wpewebkit.webdriver * fix formatting with isort * applying formatting with tox --- py/selenium/webdriver/webkitgtk/webdriver.py | 29 ++++---------------- py/selenium/webdriver/wpewebkit/webdriver.py | 3 +- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/py/selenium/webdriver/webkitgtk/webdriver.py b/py/selenium/webdriver/webkitgtk/webdriver.py index 4918d3b0d2904..02fb6291ce818 100644 --- a/py/selenium/webdriver/webkitgtk/webdriver.py +++ b/py/selenium/webdriver/webkitgtk/webdriver.py @@ -21,7 +21,6 @@ from selenium.webdriver.remote.webdriver import WebDriver as RemoteWebDriver from .options import Options -from .service import DEFAULT_EXECUTABLE_PATH from .service import Service @@ -30,42 +29,24 @@ class WebDriver(RemoteWebDriver): def __init__( self, - executable_path=DEFAULT_EXECUTABLE_PATH, - port=0, options=None, - desired_capabilities=None, - service_log_path=None, - keep_alive=False, + service: Service = None, ): """Creates a new instance of the WebKitGTK driver. Starts the service and then creates new instance of WebKitGTK Driver. :Args: - - executable_path : path to the executable. If the default is used it assumes the executable is in the $PATH. - - port : port you would like the service to run, if left as 0, a free port will be found. - options : an instance of WebKitGTKOptions - - desired_capabilities : Dictionary object with desired capabilities - - service_log_path : Path to write service stdout and stderr output. - - keep_alive : Whether to configure RemoteConnection to use HTTP keep-alive. + - service : Service object for handling the browser driver if you need to pass extra details """ - if not options: - options = Options() - if not desired_capabilities: - desired_capabilities = options.to_capabilities() - else: - capabilities = options.to_capabilities() - if desired_capabilities: - capabilities.update(desired_capabilities) - desired_capabilities = capabilities - self.service = Service(executable_path, port=port, log_path=service_log_path) + options = options if options else Options() + self.service = service if service else Service() self.service.path = DriverFinder(self.service, options).get_driver_path() self.service.start() - super().__init__( - command_executor=self.service.service_url, desired_capabilities=desired_capabilities, keep_alive=keep_alive - ) + super().__init__(command_executor=self.service.service_url, options=options) self._is_remote = False def quit(self): diff --git a/py/selenium/webdriver/wpewebkit/webdriver.py b/py/selenium/webdriver/wpewebkit/webdriver.py index 90af641ab48ca..ff2f5531fe312 100644 --- a/py/selenium/webdriver/wpewebkit/webdriver.py +++ b/py/selenium/webdriver/wpewebkit/webdriver.py @@ -40,9 +40,8 @@ def __init__( - options : an instance of ``WPEWebKitOptions`` - service : Service object for handling the browser driver if you need to pass extra details """ - if not options: - options = Options() + options = options if options else Options() self.service = service if service else Service() self.service.path = DriverFinder(self.service, options).get_driver_path() self.service.start() From 0814580fbba02480f893e17a9f9414b34c1e34fd Mon Sep 17 00:00:00 2001 From: Titus Fortner Date: Thu, 20 Jun 2024 08:17:29 -0500 Subject: [PATCH 143/176] [build] create a stage release workflow for after the pre-release PR (#14122) This builds assets on RBE and creates draft GitHub Release --- .github/workflows/stage-release.yml | 59 +++++++++++++++++++++++++++++ Rakefile | 43 ++++----------------- 2 files changed, 66 insertions(+), 36 deletions(-) create mode 100644 .github/workflows/stage-release.yml diff --git a/.github/workflows/stage-release.yml b/.github/workflows/stage-release.yml new file mode 100644 index 0000000000000..ee722d1773eb5 --- /dev/null +++ b/.github/workflows/stage-release.yml @@ -0,0 +1,59 @@ +name: Release Staging + +on: + pull_request: + types: [closed] + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + github-release: + if: > + github.event.pull_request.merged == true && + github.repository_owner == 'seleniumhq' && + startsWith(github.event.pull_request.head.ref, 'release-preparation-') + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Extract version from branch name + id: extract_version + run: | + BRANCH_NAME="${{ github.event.pull_request.head.ref }}" + VERSION=$(echo $BRANCH_NAME | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') + echo "VERSION=$VERSION" >> $GITHUB_ENV + - name: Prep git + run: | + git config --local user.email "selenium-ci@users.noreply.github.com" + git config --local user.name "Selenium CI Bot" + - name: Tag Release + run: | + git tag selenium-${{ env.VERSION }} + git push origin selenium-${{ env.VERSION }} + - name: Update Nightly Tag to Remove pre-release + run: | + git fetch --tags + git tag -d nightly || echo "Nightly tag not found" + git tag nightly + git push origin refs/tags/nightly --force + - name: Setup Java + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + - name: Build and Stage Packages + run: ./go all:package[--config=release] + - name: Generate Draft Release + uses: softprops/action-gh-release@v2 + with: + name: Selenium ${{ env.VERSION }} + body: | + ## Detailed Changelogs by Component + **[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)**     |     **[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)**     |     **[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)**     |     **[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)**     |     **[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)**     |     **[IEDriver](https://github.com/SeleniumHQ/selenium/blob/trunk/cpp/iedriverserver/CHANGELOG)** +
+ tag_name: selenium-${{ env.VERSION }} + draft: true + generate_release_notes: true + prerelease: false + files: build/dist/*.* diff --git a/Rakefile b/Rakefile index 528d125758ec3..c8e8b025b38c5 100644 --- a/Rakefile +++ b/Rakefile @@ -1035,11 +1035,16 @@ namespace :all do Rake::Task['node:build'].invoke(*args) end + desc 'Package or build stamped artifacts for distribution in GitHub Release assets' + task :package do |_task, arguments| + args = arguments.to_a.compact + Rake::Task['java:package'].invoke(*args) + Rake::Task['dotnet:package'].invoke(*args) + end + desc 'Release all artifacts for all language bindings' task :release do |_task, arguments| Rake::Task['clean'].invoke - tag = @git.add_tag("selenium-#{java_version}") - @git.push('origin', tag.name) args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact Rake::Task['java:release'].invoke(*args) @@ -1047,7 +1052,6 @@ namespace :all do Rake::Task['rb:release'].invoke(*args) Rake::Task['dotnet:release'].invoke(*args) Rake::Task['node:release'].invoke(*args) - Rake::Task['create_release_notes'].invoke Rake::Task['all:docs'].invoke Rake::Task['all:version'].invoke('nightly') @@ -1140,39 +1144,6 @@ at_exit do system 'sh', '.git-fixfiles' if File.exist?('.git') && !SeleniumRake::Checks.windows? end -desc 'Create Release Notes for Minor Release' -task :create_release_notes do - range = "#{previous_tag(java_version)}...HEAD" - format = '* [\\`%h\\`](http://github.com/seleniumhq/selenium/commit/%H) - %s :: %aN' - git_log_command = %(git --no-pager log "#{range}" --pretty=format:"#{format}" --reverse) - git_log_output = `#{git_log_command}` - - release_notes = <<~RELEASE_NOTES - ### Changelog - - For each component's detailed changelog, please check: - * [Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES) - * [Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES) - * [JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md) - * [Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG) - * [DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG) - * [IEDriverServer](https://github.com/SeleniumHQ/selenium/blob/trunk/cpp/iedriverserver/CHANGELOG) - - ### Commits in this release -
- Click to see all the commits included in this release - - #{git_log_output} - -
- RELEASE_NOTES - - FileUtils.mkdir_p('build/dist') - release_notes_file = "build/dist/release_notes_#{java_version}.md" - File.write(release_notes_file, release_notes) - puts "Release notes have been generated at: #{release_notes_file}" -end - def updated_version(current, desired = nil, nightly = nil) if !desired.nil? && desired != 'nightly' # If desired is present, return full 3 digit version From aca918be3c33a869959eeff3c25c352f77ca4f8c Mon Sep 17 00:00:00 2001 From: Vladislav Velichko <111522705+vlad8x8@users.noreply.github.com> Date: Thu, 20 Jun 2024 09:33:39 -0400 Subject: [PATCH 144/176] EdgeOptions.useWebView to return "this" (#14157) * EdgeOptions.useWebView to return this All ChromiumOptions methods return `this` This commit makes EdgeOptions.useWebView behave the same as other Options methods * update javadoc --- java/src/org/openqa/selenium/edge/EdgeOptions.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/src/org/openqa/selenium/edge/EdgeOptions.java b/java/src/org/openqa/selenium/edge/EdgeOptions.java index c3c8d9b9168b8..1dbf62a33d441 100644 --- a/java/src/org/openqa/selenium/edge/EdgeOptions.java +++ b/java/src/org/openqa/selenium/edge/EdgeOptions.java @@ -61,10 +61,12 @@ public EdgeOptions() { * automation of WebView2 apps with Microsoft Edge WebDriver * * @param enable boolean flag to enable or disable the 'webview2' usage + * @return this {@link EdgeOptions} object with added WebView2 capability */ - public void useWebView(boolean enable) { + public EdgeOptions useWebView(boolean enable) { String browserName = enable ? WEBVIEW2_BROWSER_NAME : EDGE.browserName(); setCapability(CapabilityType.BROWSER_NAME, browserName); + return this; } @Override From 6704db0535b1f11ba15b242cb2a6a96f704b4b8f Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 20 Jun 2024 20:37:15 +0700 Subject: [PATCH 145/176] [java] minor performance improvements and code cleanup (#14054) * replaced empty string comparison with isEmpty() invoking * replaced manual array copy with System.arraycopy() * replaced redundant String.format invoking with printf() * replaced deprecated setScriptTimeout with scriptTimeout according to instruction "Use scriptTimeout(Duration)" * replaced iterators with bulk methods invoking * replaced list creations with List.of() * there is no need to create mutable lists in tests to only get elements --------- Co-authored-by: Puja Jagani --- java/src/org/openqa/selenium/Cookie.java | 4 +-- .../selenium/chromium/ChromiumOptions.java | 3 +-- .../selenium/firefox/FileExtension.java | 2 +- .../grid/commands/CompletionCommand.java | 21 +++++++--------- .../grid/config/ConcatenatingConfig.java | 2 +- .../selenium/logging/LogLevelMapping.java | 2 +- .../openqa/selenium/print/PrintOptions.java | 4 +-- .../openqa/selenium/remote/RemoteLogs.java | 4 +-- .../support/events/EventFiringDecorator.java | 22 ++++++---------- .../ExecutingAsyncJavascriptTest.java | 25 +++++++++---------- .../selenium/ExecutingJavascriptTest.java | 2 +- .../org/openqa/selenium/build/BazelBuild.java | 2 +- .../SessionQueueGridWithTimeoutTest.java | 3 +-- .../ie/InternetExplorerDriverTest.java | 2 +- .../remote/RemoteWebDriverUnitTest.java | 2 +- 15 files changed, 41 insertions(+), 59 deletions(-) diff --git a/java/src/org/openqa/selenium/Cookie.java b/java/src/org/openqa/selenium/Cookie.java index ae9890ce25f23..275e7a468cf2c 100644 --- a/java/src/org/openqa/selenium/Cookie.java +++ b/java/src/org/openqa/selenium/Cookie.java @@ -129,7 +129,7 @@ public Cookie( String sameSite) { this.name = name; this.value = value; - this.path = path == null || "".equals(path) ? "/" : path; + this.path = path == null || path.isEmpty() ? "/" : path; this.domain = stripPort(domain); this.isSecure = isSecure; @@ -203,7 +203,7 @@ private static String stripPort(String domain) { } public void validate() { - if (name == null || "".equals(name) || value == null || path == null) { + if (name == null || name.isEmpty() || value == null || path == null) { throw new IllegalArgumentException( "Required attributes are not set or " + "any non-null attribute set to null"); } diff --git a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java index 2954d67f549f0..019e8c301cc33 100644 --- a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java +++ b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java @@ -252,8 +252,7 @@ protected Object getExtraCapability(String capabilityName) { return null; } - Map options = new TreeMap<>(); - experimentalOptions.forEach(options::put); + Map options = new TreeMap<>(experimentalOptions); if (binary != null) { options.put("binary", binary); diff --git a/java/src/org/openqa/selenium/firefox/FileExtension.java b/java/src/org/openqa/selenium/firefox/FileExtension.java index 1b08ac5815111..7f7253c22df85 100644 --- a/java/src/org/openqa/selenium/firefox/FileExtension.java +++ b/java/src/org/openqa/selenium/firefox/FileExtension.java @@ -209,7 +209,7 @@ public Iterator getPrefixes(String uri) { id = idNode.getTextContent(); } - if (id == null || "".equals(id.trim())) { + if (id == null || id.trim().isEmpty()) { throw new FileNotFoundException("Cannot install extension with ID: " + id); } return id; diff --git a/java/src/org/openqa/selenium/grid/commands/CompletionCommand.java b/java/src/org/openqa/selenium/grid/commands/CompletionCommand.java index 81aa6f2cf29a4..5522de077ca83 100644 --- a/java/src/org/openqa/selenium/grid/commands/CompletionCommand.java +++ b/java/src/org/openqa/selenium/grid/commands/CompletionCommand.java @@ -126,10 +126,8 @@ private void outputZshCompletions(PrintStream out) { .sorted(Comparator.comparing(CliCommand::getName)) .forEach( cmd -> { - out.println( - String.format( - " '%s:%s'", - cmd.getName(), cmd.getDescription().replace("'", "'\\''"))); + out.printf( + " '%s:%s'%n", cmd.getName(), cmd.getDescription().replace("'", "'\\''")); }); out.println(" )"); @@ -143,8 +141,8 @@ private void outputZshCompletions(PrintStream out) { .forEach( cmd -> { String shellName = cmd.getName().replace('-', '_'); - out.println(String.format(" (%s)", cmd.getName())); - out.println(String.format(" _selenium_%s", shellName)); + out.printf(" (%s)%n", cmd.getName()); + out.printf(" _selenium_%s%n", shellName); out.println(" ;;"); }); @@ -155,7 +153,7 @@ private void outputZshCompletions(PrintStream out) { allCommands.forEach( (cmd, options) -> { - out.println(String.format("_selenium_%s() {", cmd.getName().replace('-', '_'))); + out.printf("_selenium_%s() {%n", cmd.getName().replace('-', '_')); out.println(" args=("); options.stream() @@ -170,17 +168,16 @@ private void outputZshCompletions(PrintStream out) { } if (opt.flags().size() == 1) { - out.println( - String.format( - " '%s[%s]%s'", - opt.flags().iterator().next(), quotedDesc, getZshType(opt))); + out.printf( + " '%s[%s]%s'%n", + opt.flags().iterator().next(), quotedDesc, getZshType(opt)); } else { out.print(" '"); out.print(opt.flags.stream().collect(joining(" ", "(", ")"))); out.print("'"); out.print(opt.flags.stream().collect(joining(",", "{", "}"))); out.print("'"); - out.print(String.format("[%s]", quotedDesc)); + out.printf("[%s]", quotedDesc); out.print(getZshType(opt)); out.print("'\n"); } diff --git a/java/src/org/openqa/selenium/grid/config/ConcatenatingConfig.java b/java/src/org/openqa/selenium/grid/config/ConcatenatingConfig.java index ac96748154738..8b11e2f901d5b 100644 --- a/java/src/org/openqa/selenium/grid/config/ConcatenatingConfig.java +++ b/java/src/org/openqa/selenium/grid/config/ConcatenatingConfig.java @@ -37,7 +37,7 @@ public class ConcatenatingConfig implements Config { private final Map values; public ConcatenatingConfig(String prefix, char separator, Map values) { - this.prefix = prefix == null || "".equals(prefix) ? "" : (prefix + separator); + this.prefix = prefix == null || prefix.isEmpty() ? "" : (prefix + separator); this.separator = separator; this.values = diff --git a/java/src/org/openqa/selenium/logging/LogLevelMapping.java b/java/src/org/openqa/selenium/logging/LogLevelMapping.java index 2362174c58a46..7d2291d9e9e6e 100644 --- a/java/src/org/openqa/selenium/logging/LogLevelMapping.java +++ b/java/src/org/openqa/selenium/logging/LogLevelMapping.java @@ -71,7 +71,7 @@ public static String getName(Level level) { } public static Level toLevel(String logLevelName) { - if (logLevelName == null || "".equals(logLevelName)) { + if (logLevelName == null || logLevelName.isEmpty()) { // Default the log level to info. return Level.INFO; } diff --git a/java/src/org/openqa/selenium/print/PrintOptions.java b/java/src/org/openqa/selenium/print/PrintOptions.java index 1cc5a8165fe77..16592a8bec1d3 100644 --- a/java/src/org/openqa/selenium/print/PrintOptions.java +++ b/java/src/org/openqa/selenium/print/PrintOptions.java @@ -67,9 +67,7 @@ public void setPageRanges(String firstRange, String... ranges) { this.pageRanges[0] = firstRange; - for (int i = 1; i < ranges.length; i++) { - this.pageRanges[i] = ranges[i - 1]; - } + if (ranges.length > 0) System.arraycopy(ranges, 0, this.pageRanges, 1, ranges.length - 1); } public void setPageRanges(List ranges) { diff --git a/java/src/org/openqa/selenium/remote/RemoteLogs.java b/java/src/org/openqa/selenium/remote/RemoteLogs.java index 368867becc795..f175aad5041e9 100644 --- a/java/src/org/openqa/selenium/remote/RemoteLogs.java +++ b/java/src/org/openqa/selenium/remote/RemoteLogs.java @@ -106,9 +106,7 @@ public Set getAvailableLogTypes() { @SuppressWarnings("unchecked") List rawList = (List) raw; Set builder = new LinkedHashSet<>(); - for (String logType : rawList) { - builder.add(logType); - } + builder.addAll(rawList); builder.addAll(getAvailableLocalLogs()); return Set.copyOf(builder); } diff --git a/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java b/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java index 0eeb60f17e7f0..bb02186d91057 100644 --- a/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java +++ b/java/src/org/openqa/selenium/support/events/EventFiringDecorator.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; +import java.util.Objects; import java.util.logging.Level; import java.util.logging.Logger; import org.openqa.selenium.Alert; @@ -245,14 +246,10 @@ private void fireBeforeEvents( int argsLength = args != null ? args.length : 0; Object[] args2 = new Object[argsLength + 1]; args2[0] = target.getOriginal(); - for (int i = 0; i < argsLength; i++) { - args2[i + 1] = args[i]; - } + if (args != null) System.arraycopy(args, 0, args2, 1, argsLength); Method m = findMatchingMethod(listener, methodName, args2); - if (m != null) { - callListenerMethod(m, listener, args2); - } + if (m != null) callListenerMethod(m, listener, args2); } private void fireAfterEvents( @@ -261,20 +258,15 @@ private void fireAfterEvents( boolean isVoid = method.getReturnType() == Void.TYPE || method.getReturnType() == WebDriver.Timeouts.class; + int argsLength = args != null ? args.length : 0; Object[] args2 = new Object[argsLength + 1 + (isVoid ? 0 : 1)]; args2[0] = target.getOriginal(); - for (int i = 0; i < argsLength; i++) { - args2[i + 1] = args[i]; - } - if (!isVoid) { - args2[args2.length - 1] = res; - } + if (args != null) System.arraycopy(Objects.requireNonNull(args), 0, args2, 1, argsLength); + if (!isVoid) args2[args2.length - 1] = res; Method m = findMatchingMethod(listener, methodName, args2); - if (m != null) { - callListenerMethod(m, listener, args2); - } + if (m != null) callListenerMethod(m, listener, args2); try { if (target.getOriginal() instanceof WebDriver) { diff --git a/java/test/org/openqa/selenium/ExecutingAsyncJavascriptTest.java b/java/test/org/openqa/selenium/ExecutingAsyncJavascriptTest.java index f62cd35842cb6..d81496aec1865 100644 --- a/java/test/org/openqa/selenium/ExecutingAsyncJavascriptTest.java +++ b/java/test/org/openqa/selenium/ExecutingAsyncJavascriptTest.java @@ -28,7 +28,6 @@ import static org.openqa.selenium.testing.drivers.Browser.SAFARI; import java.time.Duration; -import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.junit.jupiter.api.BeforeEach; @@ -45,7 +44,7 @@ class ExecutingAsyncJavascriptTest extends JupiterTestBase { public void setUp() { assumeTrue(driver instanceof JavascriptExecutor); executor = (JavascriptExecutor) driver; - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); } @Test @@ -56,7 +55,7 @@ public void setUp() { public void shouldSetAndGetScriptTimeout() { Duration timeout = driver.manage().timeouts().getScriptTimeout(); assertThat(timeout).hasMillis(30000); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(3000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(3000)); Duration timeout2 = driver.manage().timeouts().getScriptTimeout(); assertThat(timeout2).hasMillis(3000); } @@ -185,7 +184,7 @@ public void shouldNotTimeoutIfScriptCallsbackInsideAZeroTimeout() { @Test @NotYetImplemented(SAFARI) public void shouldTimeoutIfScriptDoesNotInvokeCallbackWithLongTimeout() { - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(500)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(500)); driver.get(pages.ajaxyPage); assertThatExceptionOfType(ScriptTimeoutException.class) .isThrownBy( @@ -199,7 +198,7 @@ public void shouldTimeoutIfScriptDoesNotInvokeCallbackWithLongTimeout() { @Ignore(IE) public void shouldDetectPageLoadsWhileWaitingOnAnAsyncScriptAndReturnAnError() { driver.get(pages.ajaxyPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(100)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(100)); assertThatExceptionOfType(WebDriverException.class) .isThrownBy( () -> executor.executeAsyncScript("window.location = '" + pages.dynamicPage + "';")); @@ -244,7 +243,7 @@ public void shouldCatchErrorsWithMessageAndStacktraceWhenExecutingInitialScript( t -> { Throwable rootCause = getRootCause(t); assertThat(rootCause).hasMessageContaining("errormessage"); - assertThat(Arrays.asList(rootCause.getStackTrace())) + assertThat(List.of(rootCause.getStackTrace())) .extracting(StackTraceElement::getMethodName) .contains("functionB"); }); @@ -266,7 +265,7 @@ void shouldBeAbleToExecuteAsynchronousScripts() { "There should only be 1 DIV at this point, which is used for the butter message") .isEqualTo(1); - driver.manage().timeouts().setScriptTimeout(Duration.ofSeconds(15)); + driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(15)); String text = (String) executor.executeAsyncScript( @@ -317,7 +316,7 @@ void shouldBeAbleToMakeXMLHttpRequestsAndWaitForTheResponse() { + "xhr.send('');"; // empty string to stop firefox 3 from choking driver.get(pages.ajaxyPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofSeconds(3)); + driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(3)); String response = (String) executor.executeAsyncScript(script, pages.sleepingPage + "?time=2"); assertThat(response.trim()) .isEqualTo("DoneSlept for 2s"); @@ -331,7 +330,7 @@ void shouldBeAbleToMakeXMLHttpRequestsAndWaitForTheResponse() { @Ignore(value = SAFARI, reason = "Does not support alerts yet") public void throwsIfScriptTriggersAlert() { driver.get(pages.simpleTestPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); assertThatExceptionOfType(UnhandledAlertException.class) .isThrownBy( () -> @@ -350,7 +349,7 @@ public void throwsIfScriptTriggersAlert() { @Ignore(value = SAFARI, reason = "Does not support alerts yet") public void throwsIfAlertHappensDuringScript() { driver.get(pages.slowLoadingAlertPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); assertThatExceptionOfType(UnhandledAlertException.class) .isThrownBy(() -> executor.executeAsyncScript("setTimeout(arguments[0], 1000);")); // Shouldn't throw @@ -365,7 +364,7 @@ public void throwsIfAlertHappensDuringScript() { @Ignore(value = SAFARI, reason = "Does not support alerts yet") public void throwsIfScriptTriggersAlertWhichTimesOut() { driver.get(pages.simpleTestPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); assertThatExceptionOfType(UnhandledAlertException.class) .isThrownBy( () -> @@ -383,7 +382,7 @@ public void throwsIfScriptTriggersAlertWhichTimesOut() { @Ignore(value = SAFARI, reason = "Does not support alerts yet") public void throwsIfAlertHappensDuringScriptWhichTimesOut() { driver.get(pages.slowLoadingAlertPage); - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); assertThatExceptionOfType(UnhandledAlertException.class) .isThrownBy(() -> executor.executeAsyncScript("")); // Shouldn't throw @@ -397,7 +396,7 @@ public void throwsIfAlertHappensDuringScriptWhichTimesOut() { @Ignore(FIREFOX) @Ignore(value = SAFARI, reason = "Does not support alerts yet") public void includesAlertTextInUnhandledAlertException() { - driver.manage().timeouts().setScriptTimeout(Duration.ofMillis(5000)); + driver.manage().timeouts().scriptTimeout(Duration.ofMillis(5000)); String alertText = "Look! An alert!"; assertThatExceptionOfType(UnhandledAlertException.class) .isThrownBy( diff --git a/java/test/org/openqa/selenium/ExecutingJavascriptTest.java b/java/test/org/openqa/selenium/ExecutingJavascriptTest.java index 0a80cdd803157..c6322980ea2b0 100644 --- a/java/test/org/openqa/selenium/ExecutingJavascriptTest.java +++ b/java/test/org/openqa/selenium/ExecutingJavascriptTest.java @@ -264,7 +264,7 @@ public void testShouldThrowAnExceptionWithMessageAndStacktraceWhenTheJavascriptI t -> { Throwable rootCause = getRootCause(t); assertThat(rootCause).hasMessageContaining("errormessage"); - assertThat(Arrays.asList(rootCause.getStackTrace())) + assertThat(List.of(rootCause.getStackTrace())) .extracting(StackTraceElement::getMethodName) .contains("functionB"); }); diff --git a/java/test/org/openqa/selenium/build/BazelBuild.java b/java/test/org/openqa/selenium/build/BazelBuild.java index 850f480e41edf..02c4d085fe1d8 100644 --- a/java/test/org/openqa/selenium/build/BazelBuild.java +++ b/java/test/org/openqa/selenium/build/BazelBuild.java @@ -54,7 +54,7 @@ public void build(String target) { return; } - if (target == null || "".equals(target)) { + if (target == null || target.isEmpty()) { throw new IllegalStateException("No targets specified"); } LOG.info("\nBuilding " + target + " ..."); diff --git a/java/test/org/openqa/selenium/grid/router/SessionQueueGridWithTimeoutTest.java b/java/test/org/openqa/selenium/grid/router/SessionQueueGridWithTimeoutTest.java index 455749debff96..9e67ccf4d1b6c 100644 --- a/java/test/org/openqa/selenium/grid/router/SessionQueueGridWithTimeoutTest.java +++ b/java/test/org/openqa/selenium/grid/router/SessionQueueGridWithTimeoutTest.java @@ -30,7 +30,6 @@ import java.net.URISyntaxException; import java.time.Duration; import java.time.Instant; -import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; @@ -163,7 +162,7 @@ void shouldBeAbleToDeleteTimedoutSessions() { try { Callable sessionCreationTask = () -> createSession(caps); List> futureList = - fixedThreadPoolService.invokeAll(Arrays.asList(sessionCreationTask)); + fixedThreadPoolService.invokeAll(List.of(sessionCreationTask)); for (Future future : futureList) { HttpResponse httpResponse = future.get(10, SECONDS); diff --git a/java/test/org/openqa/selenium/ie/InternetExplorerDriverTest.java b/java/test/org/openqa/selenium/ie/InternetExplorerDriverTest.java index 632ad24c6cd38..26c9637121ba0 100644 --- a/java/test/org/openqa/selenium/ie/InternetExplorerDriverTest.java +++ b/java/test/org/openqa/selenium/ie/InternetExplorerDriverTest.java @@ -138,7 +138,7 @@ void testPersistentHoverCanBeTurnedOff() throws Exception { // Intentionally wait to make sure hover DOES NOT persist. Thread.sleep(1000); - wait.until(d -> item.getText().equals("")); + wait.until(d -> item.getText().isEmpty()); assertThat(item.getText()).isEmpty(); } diff --git a/java/test/org/openqa/selenium/remote/RemoteWebDriverUnitTest.java b/java/test/org/openqa/selenium/remote/RemoteWebDriverUnitTest.java index 4d34101e50e63..7d7302740307b 100644 --- a/java/test/org/openqa/selenium/remote/RemoteWebDriverUnitTest.java +++ b/java/test/org/openqa/selenium/remote/RemoteWebDriverUnitTest.java @@ -623,7 +623,7 @@ void canHandleGetTimeoutsCommand() { void canHandleSetScriptTimeoutCommand() { WebDriverFixture fixture = new WebDriverFixture(echoCapabilities, nullValueResponder); - fixture.driver.manage().timeouts().setScriptTimeout(Duration.ofSeconds(10)); + fixture.driver.manage().timeouts().scriptTimeout(Duration.ofSeconds(10)); fixture.verifyCommands( new CommandPayload(DriverCommand.SET_TIMEOUT, ImmutableMap.of("script", 10000L))); From 00c4f60eb1602c7bbc1340c9ad56ca4f9d4ef51f Mon Sep 17 00:00:00 2001 From: titusfortner Date: Thu, 20 Jun 2024 09:52:25 -0500 Subject: [PATCH 146/176] [build] create github workflow for updating documentation this initial workflow does not do anything with updates, yet --- .github/workflows/update-documentation.yml | 85 ++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 .github/workflows/update-documentation.yml diff --git a/.github/workflows/update-documentation.yml b/.github/workflows/update-documentation.yml new file mode 100644 index 0000000000000..02166dc7a6d34 --- /dev/null +++ b/.github/workflows/update-documentation.yml @@ -0,0 +1,85 @@ +name: Update Documentation + +on: + workflow_dispatch: + inputs: + tag: + description: Release tag (e.g. selenium-4.21.0) + required: true + type: string + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + +jobs: + java-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout the tag + uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + - name: Setup Java + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + - name: Update Documentation + run: ./go java:docs[true] + + ruby-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout the tag + uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + - name: Setup Java + uses: actions/setup-java@v3 + with: + java-version: 17 + distribution: 'temurin' + - name: Update Documentation + run: ./go ruby:docs[true] + + python-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout the tag + uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + - name: Set up Python 3.8 + uses: actions/setup-python@v4 + with: + python-version: 3.8 + - name: Update Documentation + run: ./go py:docs[true] + + dotnet-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout the tag + uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + - name: Install specific version of DocFX tool + # Pinning to 2.75.3 to avoid breaking changes in newer versions + # See https://github.com/dotnet/docfx/issues/9855 + run: dotnet tool install --global --version 2.75.3 docfx + - name: Update Documentation + run: ./go dotnet:docs[true] + + node-docs: + runs-on: ubuntu-latest + steps: + - name: Checkout the tag + uses: actions/checkout@v4 + with: + ref: ${{ inputs.tag }} + - name: Install npm dependencies + run: | + npm install + npm install --prefix javascript/node/selenium-webdriver + - name: Update Documentation + run: ./go node:docs[true] From 2a7ddf1fdeb724bb5f4bd6cd64867894aa485add Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Sautter?= Date: Thu, 20 Jun 2024 19:41:56 +0200 Subject: [PATCH 147/176] [java] use java.nio to check files #14088 --- .../selenium/chromium/ChromiumOptions.java | 2 +- .../org/openqa/selenium/internal/Require.java | 71 ++++++++++++++++++- .../selenium/remote/service/DriverFinder.java | 6 +- .../selenium/javascript/TestFileLocator.java | 2 +- 4 files changed, 75 insertions(+), 6 deletions(-) diff --git a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java index 019e8c301cc33..2af0a72c93bf8 100644 --- a/java/src/org/openqa/selenium/chromium/ChromiumOptions.java +++ b/java/src/org/openqa/selenium/chromium/ChromiumOptions.java @@ -158,7 +158,7 @@ public T addExtensions(File... paths) { * @param paths Paths to the extensions to install. */ public T addExtensions(List paths) { - paths.forEach(path -> Require.argument("Extension", path).isFile()); + paths.forEach(path -> Require.argument("Extension", path.toPath()).isFile()); extensionFiles.addAll(paths); return (T) this; } diff --git a/java/src/org/openqa/selenium/internal/Require.java b/java/src/org/openqa/selenium/internal/Require.java index 24fcd9311334b..14ed1600004f7 100644 --- a/java/src/org/openqa/selenium/internal/Require.java +++ b/java/src/org/openqa/selenium/internal/Require.java @@ -164,10 +164,15 @@ public static IntChecker argument(String argName, Integer number) { return new IntChecker(argName, number); } + @Deprecated(forRemoval = true) public static FileChecker argument(String argName, File file) { return new FileChecker(argName, file); } + public static PathChecker argument(String argName, Path path) { + return new PathChecker(argName, path); + } + public static void stateCondition(boolean state, String message, Object... args) { if (!state) { throw new IllegalStateException(String.format(message, args)); @@ -178,6 +183,7 @@ public static StateChecker state(String name, T state) { return new StateChecker<>(name, state); } + @Deprecated(forRemoval = true) public static FileStateChecker state(String name, File file) { return new FileStateChecker(name, file); } @@ -252,6 +258,7 @@ public int greaterThan(int max, String message) { } } + @Deprecated(forRemoval = true) public static class FileChecker { private final String argName; @@ -293,6 +300,47 @@ public File isDirectory() { } } + public static class PathChecker { + + private final String argName; + private final Path path; + + PathChecker(String argName, Path path) { + this.argName = argName; + this.path = path; + } + + public Path isFile() { + if (path == null) { + throw new IllegalArgumentException(String.format(MUST_BE_SET, argName)); + } + if (!Files.exists(path)) { + throw new IllegalArgumentException( + String.format(MUST_EXIST, argName, path.toAbsolutePath())); + } + if (!Files.isRegularFile(path)) { + throw new IllegalArgumentException( + String.format(MUST_BE_FILE, argName, path.toAbsolutePath())); + } + return path; + } + + public Path isDirectory() { + if (path == null) { + throw new IllegalArgumentException(String.format(MUST_BE_SET, argName)); + } + if (!Files.exists(path)) { + throw new IllegalArgumentException( + String.format(MUST_EXIST, argName, path.toAbsolutePath())); + } + if (!Files.isDirectory(path)) { + throw new IllegalArgumentException( + String.format(MUST_BE_DIR, argName, path.toAbsolutePath())); + } + return path; + } + } + public static class StateChecker { private final String name; @@ -328,6 +376,7 @@ public T instanceOf(Class cls) { } } + @Deprecated(forRemoval = true) public static class FileStateChecker { private final String name; @@ -365,7 +414,12 @@ public File isDirectory() { } public File isExecutable() { - isFile(); + if (file == null) { + throw new IllegalStateException(String.format(MUST_BE_SET, name)); + } + if (!file.exists()) { + throw new IllegalStateException(String.format(MUST_EXIST, name, file.getAbsolutePath())); + } if (!file.canExecute()) { throw new IllegalStateException( String.format(MUST_BE_EXECUTABLE, name, file.getAbsolutePath())); @@ -409,5 +463,20 @@ public Path isDirectory() { } return path; } + + public Path isExecutable() { + if (path == null) { + throw new IllegalStateException(String.format(MUST_BE_SET, name)); + } + if (!Files.exists(path)) { + throw new IllegalStateException(String.format(MUST_EXIST, name, path)); + } + // do not check for isRegularFile here, there are executable none regular files e.g. Windows + // app execution aliases + if (!Files.isExecutable(path)) { + throw new IllegalStateException(String.format(MUST_BE_EXECUTABLE, name, path)); + } + return path; + } } } diff --git a/java/src/org/openqa/selenium/remote/service/DriverFinder.java b/java/src/org/openqa/selenium/remote/service/DriverFinder.java index 35d20505a07a9..de9a911b983c7 100644 --- a/java/src/org/openqa/selenium/remote/service/DriverFinder.java +++ b/java/src/org/openqa/selenium/remote/service/DriverFinder.java @@ -17,7 +17,7 @@ package org.openqa.selenium.remote.service; -import java.io.File; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -100,7 +100,7 @@ private Result getBinaryPaths() { if (result.getDriverPath() == null) { List arguments = toArguments(); result = seleniumManager.getBinaryPaths(arguments); - Require.state(options.getBrowserName(), new File(result.getBrowserPath())) + Require.state(options.getBrowserName(), Path.of(result.getBrowserPath())) .isExecutable(); } else { LOG.fine( @@ -115,7 +115,7 @@ private Result getBinaryPaths() { driverName, result.getDriverPath())); } - Require.state(driverName, new File(result.getDriverPath())).isExecutable(); + Require.state(driverName, Path.of(result.getDriverPath())).isExecutable(); } catch (RuntimeException e) { throw new NoSuchDriverException( String.format( diff --git a/java/test/org/openqa/selenium/javascript/TestFileLocator.java b/java/test/org/openqa/selenium/javascript/TestFileLocator.java index 3d66472c52927..0c4e0fd035871 100644 --- a/java/test/org/openqa/selenium/javascript/TestFileLocator.java +++ b/java/test/org/openqa/selenium/javascript/TestFileLocator.java @@ -78,7 +78,7 @@ private static Path getTestDirectory() { testDir = InProject.locate(testDirName); } - Require.state("Test directory", testDir.toFile()).isDirectory(); + Require.state("Test directory", testDir).isDirectory(); return testDir; } From c5f314670396b04e92b32500bd6e0dfac31e841f Mon Sep 17 00:00:00 2001 From: Selenium CI Bot Date: Thu, 20 Jun 2024 22:03:48 +0200 Subject: [PATCH 148/176] [build] Prepare for release of Selenium 4.22.0 (#14163) * Update pinned browser versions * Update supported versions for Chrome DevTools * Update selenium manager version * Update authors file * Update versions and change logs to release Selenium 4.22.0 --------- Co-authored-by: Selenium CI Bot Co-authored-by: titusfortner --- AUTHORS | 6 + MODULE.bazel | 50 +- Rakefile | 2 +- .../chromium/{v123 => v126}/BUILD.bazel | 0 .../{v123 => v126}/browser_protocol.pdl | 446 ++++++++++++++++-- .../chromium/{v123 => v126}/js_protocol.pdl | 0 common/repositories.bzl | 16 +- common/selenium_manager.bzl | 12 +- dotnet/CHANGELOG | 8 + dotnet/selenium-dotnet-version.bzl | 4 +- .../src/webdriver/DevTools/DevToolsDomains.cs | 2 +- .../V123Domains.cs => v126/V126Domains.cs} | 22 +- .../V126JavaScript.cs} | 16 +- .../{v123/V123Log.cs => v126/V126Log.cs} | 14 +- .../V123Network.cs => v126/V126Network.cs} | 24 +- .../V123Target.cs => v126/V126Target.cs} | 14 +- dotnet/src/webdriver/WebDriver.csproj | 2 +- .../StableChannelChromeDriver.cs | 2 +- .../common/DevTools/DevToolsConsoleTest.cs | 4 +- .../test/common/DevTools/DevToolsLogTest.cs | 2 +- .../common/DevTools/DevToolsNetworkTest.cs | 4 +- .../DevTools/DevToolsPerformanceTest.cs | 4 +- .../common/DevTools/DevToolsProfilerTest.cs | 4 +- .../common/DevTools/DevToolsSecurityTest.cs | 4 +- .../test/common/DevTools/DevToolsTabsTest.cs | 4 +- .../common/DevTools/DevToolsTargetTest.cs | 6 +- java/CHANGELOG | 16 + java/maven_install.json | 221 ++++----- .../devtools/{v123 => v126}/BUILD.bazel | 2 +- .../v126CdpInfo.java} | 8 +- .../v126Domains.java} | 26 +- .../v123Events.java => v126/v126Events.java} | 18 +- .../v126Javascript.java} | 14 +- .../{v123/v123Log.java => v126/v126Log.java} | 10 +- .../v126Network.java} | 20 +- .../v123Target.java => v126/v126Target.java} | 24 +- .../org/openqa/selenium/devtools/versions.bzl | 2 +- java/version.bzl | 2 +- .../node/selenium-webdriver/BUILD.bazel | 4 +- javascript/node/selenium-webdriver/CHANGES.md | 8 + .../node/selenium-webdriver/package.json | 2 +- package-lock.json | 2 +- py/BUILD.bazel | 4 +- py/CHANGES | 11 + py/docs/source/conf.py | 2 +- py/selenium/__init__.py | 2 +- py/selenium/webdriver/__init__.py | 2 +- py/setup.py | 2 +- rb/CHANGES | 14 + rb/Gemfile.lock | 18 +- rb/lib/selenium/devtools/BUILD.bazel | 2 +- rb/lib/selenium/devtools/version.rb | 2 +- rb/lib/selenium/webdriver/version.rb | 2 +- 53 files changed, 764 insertions(+), 348 deletions(-) rename common/devtools/chromium/{v123 => v126}/BUILD.bazel (100%) rename common/devtools/chromium/{v123 => v126}/browser_protocol.pdl (96%) rename common/devtools/chromium/{v123 => v126}/js_protocol.pdl (100%) rename dotnet/src/webdriver/DevTools/{v123/V123Domains.cs => v126/V126Domains.cs} (78%) rename dotnet/src/webdriver/DevTools/{v123/V123JavaScript.cs => v126/V126JavaScript.cs} (94%) rename dotnet/src/webdriver/DevTools/{v123/V123Log.cs => v126/V126Log.cs} (88%) rename dotnet/src/webdriver/DevTools/{v123/V123Network.cs => v126/V126Network.cs} (95%) rename dotnet/src/webdriver/DevTools/{v123/V123Target.cs => v126/V126Target.cs} (94%) rename java/src/org/openqa/selenium/devtools/{v123 => v126}/BUILD.bazel (98%) rename java/src/org/openqa/selenium/devtools/{v123/v123CdpInfo.java => v126/v126CdpInfo.java} (86%) rename java/src/org/openqa/selenium/devtools/{v123/v123Domains.java => v126/v126Domains.java} (77%) rename java/src/org/openqa/selenium/devtools/{v123/v123Events.java => v126/v126Events.java} (86%) rename java/src/org/openqa/selenium/devtools/{v123/v123Javascript.java => v126/v126Javascript.java} (85%) rename java/src/org/openqa/selenium/devtools/{v123/v123Log.java => v126/v126Log.java} (89%) rename java/src/org/openqa/selenium/devtools/{v123/v123Network.java => v126/v126Network.java} (92%) rename java/src/org/openqa/selenium/devtools/{v123/v123Target.java => v126/v126Target.java} (83%) diff --git a/AUTHORS b/AUTHORS index 13cd94023d7d2..39da6a60b9d47 100644 --- a/AUTHORS +++ b/AUTHORS @@ -41,6 +41,7 @@ Alex Savchuk Alexander Bayandin Alexander Dobrynin Alexander Kavanaugh +Alexander Millin Alexandr Savchuk Alexandre Abreu Alexei Barantsev @@ -63,6 +64,7 @@ Andras Hatvani Andre Wiggins <459878+andrewiggins@users.noreply.github.com> Andreas Tolf Tolfsen Andreas Tolfsen +Andrei Andrei Botalov Andrei Rusu Andrei Solntsev @@ -88,6 +90,7 @@ Ashley Trinh Aslak Hellesøy asmundak Atsushi Tatsuma +Augustin Gottlieb Pequeno <33221555+aguspe@users.noreply.github.com> Aurélien Pupier Austin Michael Wilkins <42476341+amwilkins@users.noreply.github.com> BaerMitUmlaut @@ -98,6 +101,7 @@ Ben Kucera <14625260+Bkucera@users.noreply.github.com> Ben Lamm Ben Sedat Benjamin Forehand Jr +bgermann bhecquet bhkwan Bill Agee @@ -364,6 +368,7 @@ James Garbutt <43081j@users.noreply.github.com> James Hilliard James Martin James Strachen +James Yuzawa jamespdo Jan Trejbal Jan Weitz @@ -696,6 +701,7 @@ reichsta Reinaldo Rossetti Reinhold Degenfellner Remco +renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> richard.hines RichCrook richseviora diff --git a/MODULE.bazel b/MODULE.bazel index b206f169464f7..ad934d7d09e27 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -162,11 +162,11 @@ maven.install( name = "maven", artifacts = [ "com.beust:jcommander:1.82", - "com.github.javaparser:javaparser-core:3.25.10", - "com.github.spotbugs:spotbugs:4.8.5", + "com.github.javaparser:javaparser-core:3.26.0", + "com.github.spotbugs:spotbugs:4.8.6", "com.github.stephenc.jcip:jcip-annotations:1.0-1", - "com.google.code.gson:gson:2.10.1", - "com.google.guava:guava:33.2.0-jre", + "com.google.code.gson:gson:2.11.0", + "com.google.guava:guava:33.2.1-jre", "com.google.auto:auto-common:1.2.2", "com.google.auto.service:auto-service:1.1.1", "com.google.auto.service:auto-service-annotations:1.1.1", @@ -176,33 +176,33 @@ maven.install( "dev.failsafe:failsafe:3.3.2", "io.grpc:grpc-context:1.64.0", "io.lettuce:lettuce-core:6.3.2.RELEASE", - "io.netty:netty-buffer:4.1.109.Final", - "io.netty:netty-codec-http:4.1.109.Final", - "io.netty:netty-codec-http2:4.1.109.Final", - "io.netty:netty-common:4.1.109.Final", - "io.netty:netty-handler:4.1.109.Final", - "io.netty:netty-handler-proxy:4.1.109.Final", - "io.netty:netty-transport:4.1.109.Final", - "io.opentelemetry:opentelemetry-api:1.38.0", - "io.opentelemetry:opentelemetry-context:1.38.0", - "io.opentelemetry:opentelemetry-exporter-logging:1.38.0", - "io.opentelemetry:opentelemetry-sdk:1.38.0", - "io.opentelemetry:opentelemetry-sdk-common:1.38.0", - "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.38.0", - "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.38.0", - "io.opentelemetry:opentelemetry-sdk-testing:1.38.0", - "io.opentelemetry:opentelemetry-sdk-trace:1.38.0", + "io.netty:netty-buffer:4.1.111.Final", + "io.netty:netty-codec-http:4.1.111.Final", + "io.netty:netty-codec-http2:4.1.111.Final", + "io.netty:netty-common:4.1.111.Final", + "io.netty:netty-handler:4.1.111.Final", + "io.netty:netty-handler-proxy:4.1.111.Final", + "io.netty:netty-transport:4.1.111.Final", + "io.opentelemetry:opentelemetry-api:1.39.0", + "io.opentelemetry:opentelemetry-context:1.39.0", + "io.opentelemetry:opentelemetry-exporter-logging:1.39.0", + "io.opentelemetry:opentelemetry-sdk:1.39.0", + "io.opentelemetry:opentelemetry-sdk-common:1.39.0", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.39.0", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.39.0", + "io.opentelemetry:opentelemetry-sdk-testing:1.39.0", + "io.opentelemetry:opentelemetry-sdk-trace:1.39.0", "io.opentelemetry.semconv:opentelemetry-semconv:1.25.0-alpha", "io.ous:jtoml:2.0.0", "it.ozimov:embedded-redis:0.7.3", - "net.bytebuddy:byte-buddy:1.14.15", - "org.htmlunit:htmlunit-core-js:4.1.0", + "net.bytebuddy:byte-buddy:1.14.17", + "org.htmlunit:htmlunit-core-js:4.2.0", "org.apache.commons:commons-exec:1.4.0", "org.apache.logging.log4j:log4j-core:2.23.1", - "org.assertj:assertj-core:3.25.3", + "org.assertj:assertj-core:3.26.0", "org.bouncycastle:bcpkix-jdk18on:1.78.1", "org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5", - "org.hsqldb:hsqldb:2.7.2", + "org.hsqldb:hsqldb:2.7.3", "org.junit.jupiter:junit-jupiter-api:5.10.2", "org.junit.jupiter:junit-jupiter-engine:5.10.2", "org.junit.jupiter:junit-jupiter-params:5.10.2", @@ -211,7 +211,7 @@ maven.install( "org.junit.platform:junit-platform-commons:1.10.2", "org.junit.platform:junit-platform-engine:1.10.2", "org.mockito:mockito-core:5.12.0", - "org.redisson:redisson:3.30.0", + "org.redisson:redisson:3.31.0", "org.slf4j:slf4j-api:2.0.13", "org.slf4j:slf4j-jdk14:2.0.13", "org.zeromq:jeromq:0.6.0", diff --git a/Rakefile b/Rakefile index c8e8b025b38c5..177e78f97279a 100644 --- a/Rakefile +++ b/Rakefile @@ -98,7 +98,7 @@ JAVA_RELEASE_TARGETS = %w[ //java/src/org/openqa/selenium/chrome:chrome.publish //java/src/org/openqa/selenium/chromium:chromium.publish //java/src/org/openqa/selenium/devtools/v125:v125.publish - //java/src/org/openqa/selenium/devtools/v123:v123.publish + //java/src/org/openqa/selenium/devtools/v126:v126.publish //java/src/org/openqa/selenium/devtools/v124:v124.publish //java/src/org/openqa/selenium/devtools/v85:v85.publish //java/src/org/openqa/selenium/edge:edge.publish diff --git a/common/devtools/chromium/v123/BUILD.bazel b/common/devtools/chromium/v126/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v123/BUILD.bazel rename to common/devtools/chromium/v126/BUILD.bazel diff --git a/common/devtools/chromium/v123/browser_protocol.pdl b/common/devtools/chromium/v126/browser_protocol.pdl similarity index 96% rename from common/devtools/chromium/v123/browser_protocol.pdl rename to common/devtools/chromium/v126/browser_protocol.pdl index 5b79452137dbf..31028c8b42049 100644 --- a/common/devtools/chromium/v123/browser_protocol.pdl +++ b/common/devtools/chromium/v126/browser_protocol.pdl @@ -475,6 +475,12 @@ experimental domain Animation # Animation that was started. Animation animation + # Event for animation that has been updated. + event animationUpdated + parameters + # Animation that was updated. + Animation animation + # Audits domain allows investigation of page violations and possible improvements. experimental domain Audits depends on Network @@ -729,6 +735,37 @@ experimental domain Audits WebAndOsHeaders NoWebOrOsSupport NavigationRegistrationWithoutTransientUserActivation + InvalidInfoHeader + NoRegisterSourceHeader + NoRegisterTriggerHeader + NoRegisterOsSourceHeader + NoRegisterOsTriggerHeader + + type SharedDictionaryError extends string + enum + UseErrorCrossOriginNoCorsRequest + UseErrorDictionaryLoadFailure + UseErrorMatchingDictionaryNotUsed + UseErrorUnexpectedContentDictionaryHeader + WriteErrorCossOriginNoCorsRequest + WriteErrorDisallowedBySettings + WriteErrorExpiredResponse + WriteErrorFeatureDisabled + WriteErrorInsufficientResources + WriteErrorInvalidMatchField + WriteErrorInvalidStructuredHeader + WriteErrorNavigationRequest + WriteErrorNoMatchField + WriteErrorNonListMatchDestField + WriteErrorNonSecureContext + WriteErrorNonStringIdField + WriteErrorNonStringInMatchDestList + WriteErrorNonStringMatchField + WriteErrorNonTokenTypeField + WriteErrorRequestAborted + WriteErrorShuttingDown + WriteErrorTooLongIdField + WriteErrorUnsupportedType # Details for issues around "Attribution Reporting API" usage. # Explainer: https://github.com/WICG/attribution-reporting-api @@ -756,6 +793,11 @@ experimental domain Audits string url optional SourceCodeLocation location + type SharedDictionaryIssueDetails extends object + properties + SharedDictionaryError sharedDictionaryError + AffectedRequest request + type GenericIssueErrorType extends string enum CrossOriginPortalPostMessageError @@ -807,6 +849,9 @@ experimental domain Audits type CookieDeprecationMetadataIssueDetails extends object properties array of string allowedSites + number optOutPercentage + boolean isOptOutTopLevel + CookieOperation operation type ClientHintIssueReason extends string enum @@ -865,6 +910,8 @@ experimental domain Audits SilentMediationFailure ThirdPartyCookiesBlocked NotSignedInWithIdp + MissingTransientUserActivation + ReplacedByButtonMode type FederatedAuthUserInfoRequestIssueDetails extends object properties @@ -959,6 +1006,7 @@ experimental domain Audits StylesheetLoadingIssue FederatedAuthUserInfoRequestIssue PropertyRuleIssue + SharedDictionaryIssue # This struct holds a list of optional fields with additional information # specific to the kind of issue. When adding a new issue code, please also @@ -985,6 +1033,7 @@ experimental domain Audits optional StylesheetLoadingIssueDetails stylesheetLoadingIssueDetails optional PropertyRuleIssueDetails propertyRuleIssueDetails optional FederatedAuthUserInfoRequestIssueDetails federatedAuthUserInfoRequestIssueDetails + optional SharedDictionaryIssueDetails sharedDictionaryIssueDetails # A unique id for a DevTools inspector issue. Allows other entities (e.g. # exceptions, CDP message, console messages, etc.) to reference an issue. @@ -1046,6 +1095,21 @@ experimental domain Audits parameters InspectorIssue issue +# Defines commands and events for browser extensions. Available if the client +# is connected using the --remote-debugging-pipe flag and +# the --enable-unsafe-extension-debugging flag is set. +experimental domain Extensions + # Installs an unpacked extension from the filesystem similar to + # --load-extension CLI flags. Returns extension ID once the extension + # has been installed. + command loadUnpacked + parameters + # Absolute file path. + string path + returns + # Extension id. + string id + # Defines commands and events for Autofill. experimental domain Autofill type CreditCard extends object @@ -1939,12 +2003,25 @@ experimental domain CSS CSSStyle style # CSS position-fallback rule representation. - type CSSPositionFallbackRule extends object + deprecated type CSSPositionFallbackRule extends object properties Value name # List of keyframes. array of CSSTryRule tryRules + # CSS @position-try rule representation. + type CSSPositionTryRule extends object + properties + # The prelude dashed-ident name + Value name + # The css style sheet identifier (absent for user agent stylesheet and user-specified + # stylesheet rules) this rule came from. + optional StyleSheetId styleSheetId + # Parent stylesheet's origin. + StyleSheetOrigin origin + # Associated style declaration. + CSSStyle style + # CSS keyframes rule representation. type CSSKeyframesRule extends object properties @@ -2118,7 +2195,9 @@ experimental domain CSS # A list of CSS keyframed animations matching this node. optional array of CSSKeyframesRule cssKeyframesRules # A list of CSS position fallbacks matching this node. - optional array of CSSPositionFallbackRule cssPositionFallbackRules + deprecated optional array of CSSPositionFallbackRule cssPositionFallbackRules + # A list of CSS @position-try rules matching this node, based on the position-try-options property. + optional array of CSSPositionTryRule cssPositionTryRules # A list of CSS at-property rules matching this node. optional array of CSSPropertyRule cssPropertyRules # A list of CSS property registrations matching this node. @@ -2160,6 +2239,15 @@ experimental domain CSS returns CSSLayerData rootLayer + # Given a CSS selector text and a style sheet ID, getLocationForSelector + # returns an array of locations of the CSS selector in the style sheet. + experimental command getLocationForSelector + parameters + StyleSheetId styleSheetId + string selectorText + returns + array of SourceRange ranges + # Starts tracking the given computed styles for updates. The specified array of properties # replaces the one previously specified. Pass empty array to disable tracking. # Use takeComputedStyleUpdates to retrieve the list of nodes that had properties modified. @@ -2541,11 +2629,14 @@ domain DOM marker backdrop selection + search-text target-text spelling-error grammar-error highlight first-line-inherited + scroll-marker + scroll-markers scrollbar scrollbar-thumb scrollbar-button @@ -3045,6 +3136,20 @@ domain DOM # NodeIds of top layer elements array of NodeId nodeIds + # Returns the NodeId of the matched element according to certain relations. + experimental command getElementByRelation + parameters + # Id of the node from which to query the relation. + NodeId nodeId + # Type of relation to get. + enum relation + # Get the popover target for a given element. In this case, this given + # element can only be an HTMLFormControlElement (,