From a2f410f0918d97902ca0ff0413fbc307d07598fd Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 25 Aug 2024 08:55:35 +0300 Subject: [PATCH 01/25] feat(java): :sparkles: added common config block for web --- .nvmrc | 2 +- .../actions/api/ApiActions.java | 47 +- .../boykaframework/builders/ApiResponse.java | 10 +- .../boykaframework/config/CommonSetting.java | 2 + .../boykaframework/config/api/ApiSetting.java | 29 + .../config/ui/CommonUiSetting.java | 25 + .../config/ui/mobile/CommonMobileSetting.java | 27 + .../config/ui/mobile/MobileSetting.java | 12 + .../ui/mobile/device/ApplicationSetting.java | 6 +- .../mobile/device/CommonAndroidSetting.java | 29 + .../ui/mobile/device/CommonDeviceSetting.java | 39 ++ .../ui/mobile/device/CommonIOSSetting.java | 26 + .../ui/mobile/device/DeviceSetting.java | 83 ++- .../config/ui/mobile/server/LogSetting.java | 10 +- .../config/ui/web/CommonWebSetting.java | 54 ++ .../config/ui/web/WebSetting.java | 90 ++- .../github/boykaframework/enums/Message.java | 12 + .../manager/AndroidManager.java | 28 +- .../boykaframework/manager/DriverManager.java | 5 +- .../boykaframework/manager/DriverSession.java | 40 +- .../manager/IDriverManager.java | 21 +- .../boykaframework/utils/Validator.java | 10 + .../src/test/resources/boyka-config.json | 24 +- package.json | 8 +- pnpm-lock.yaml | 540 +++++++++--------- 25 files changed, 802 insertions(+), 377 deletions(-) create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java diff --git a/.nvmrc b/.nvmrc index 5f09eed8d..d78bf0a56 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.20.3 +v18.20.4 diff --git a/core-java/src/main/java/io/github/boykaframework/actions/api/ApiActions.java b/core-java/src/main/java/io/github/boykaframework/actions/api/ApiActions.java index b727e0c77..633132c7a 100644 --- a/core-java/src/main/java/io/github/boykaframework/actions/api/ApiActions.java +++ b/core-java/src/main/java/io/github/boykaframework/actions/api/ApiActions.java @@ -21,21 +21,26 @@ import static io.github.boykaframework.enums.Message.AUTH_PASSWORD_REQUIRED; import static io.github.boykaframework.enums.Message.BASE_URL_EMPTY; import static io.github.boykaframework.enums.Message.CONTENT_TYPE_NOT_SET; +import static io.github.boykaframework.enums.Message.EMPTY_REQUEST_BODY; +import static io.github.boykaframework.enums.Message.EMPTY_URL; import static io.github.boykaframework.enums.Message.ERROR_EXECUTING_REQUEST; import static io.github.boykaframework.enums.Message.ERROR_PARSING_REQUEST_BODY; import static io.github.boykaframework.enums.Message.ERROR_PARSING_RESPONSE_BODY; +import static io.github.boykaframework.enums.Message.SSL_CONTEXT_EMPTY; import static io.github.boykaframework.enums.Message.SSL_ERROR; +import static io.github.boykaframework.enums.RequestMethod.GET; import static io.github.boykaframework.manager.ParallelSession.getSession; import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; import static io.github.boykaframework.utils.StringUtils.interpolate; import static io.github.boykaframework.utils.Validator.requireNonEmpty; +import static io.github.boykaframework.utils.Validator.requireNonNull; +import static io.github.boykaframework.utils.Validator.requireNonNullElse; import static java.lang.String.join; import static java.text.MessageFormat.format; import static java.time.Duration.ofSeconds; import static java.util.Objects.isNull; -import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNullElse; import static java.util.Optional.ofNullable; +import static javax.net.ssl.SSLContext.getInstance; import static okhttp3.Credentials.basic; import static okhttp3.MediaType.parse; import static okhttp3.RequestBody.create; @@ -51,6 +56,7 @@ import java.util.Map; import java.util.function.BiConsumer; import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; @@ -61,7 +67,6 @@ import io.github.boykaframework.builders.ApiRequest; import io.github.boykaframework.builders.ApiResponse; import io.github.boykaframework.config.api.ApiSetting; -import io.github.boykaframework.config.api.CommonApiSetting; import io.github.boykaframework.config.api.LogSetting; import io.github.boykaframework.enums.ContentType; import io.github.boykaframework.enums.RequestMethod; @@ -99,7 +104,6 @@ public static IApiActions withRequest (final ApiRequest request) { private final ApiRequest apiRequest; private final ApiSetting apiSetting; private final OkHttpClient client; - private final CommonApiSetting commonApiSetting; private final IApiActionsListener listener; private final LogSetting logSetting; private MediaType mediaType; @@ -114,12 +118,11 @@ private ApiActions (final ApiRequest apiRequest) { this.listener = getSession ().getListener (API_ACTION); this.apiRequest = apiRequest; this.pathParams = new HashMap<> (); - this.commonApiSetting = getSession ().getCommonApiSetting (); this.apiSetting = getSession ().getApiSetting (); final var builder = getApiBuilder (); this.client = builder.build (); - this.logSetting = requireNonNullElse (this.apiSetting.getLogging (), this.commonApiSetting.getLogging ()); + this.logSetting = this.apiSetting.getLogging (); this.request = new Request.Builder (); LOGGER.traceExit (); } @@ -152,8 +155,7 @@ private void addHeader (final String name, final String value) { private ApiActions basicAuth (final String userName, final String password) { if (!isNull (userName)) { LOGGER.traceEntry ("Parameters: userName={}", userName); - final var credentials = basic (userName, - requireNonNull (password, AUTH_PASSWORD_REQUIRED.getMessageText ())); + final var credentials = basic (userName, requireNonNull (password, AUTH_PASSWORD_REQUIRED)); addHeader ("Authorization", credentials); } return LOGGER.traceExit (this); @@ -169,7 +171,7 @@ private ApiActions body (final T body) { private ApiActions body (final String body) { LOGGER.traceEntry (); - this.requestBody = create (body, requireNonNull (this.mediaType, CONTENT_TYPE_NOT_SET.getMessageText ())); + this.requestBody = create (body, requireNonNull (this.mediaType, CONTENT_TYPE_NOT_SET)); return LOGGER.traceExit (this); } @@ -178,8 +180,7 @@ private ApiActions body (final Map bodyMap) { final var body = new ArrayList (); bodyMap.forEach ((k, v) -> body.add (format ("{0}={1}", k, v))); if (!body.isEmpty ()) { - this.requestBody = create (join ("&", body), - requireNonNull (this.mediaType, CONTENT_TYPE_NOT_SET.getMessageText ())); + this.requestBody = create (join ("&", body), requireNonNull (this.mediaType, CONTENT_TYPE_NOT_SET)); } return LOGGER.traceExit (this); } @@ -202,15 +203,14 @@ private void fillMap (final Map map, final BiConsumer true); } return builder; @@ -230,7 +230,7 @@ private String getRequestBody (final RequestBody body) { private ApiResponse getResponse (final Map queryParams, final String path) { LOGGER.traceEntry ("Parameters: {}", path); try { - final var urlBuilder = requireNonNull (HttpUrl.parse (getUrl (path))).newBuilder (); + final var urlBuilder = requireNonNull (HttpUrl.parse (getUrl (path)), EMPTY_URL).newBuilder (); queryParams.forEach (urlBuilder::addQueryParameter); this.response = parseResponse (this.client.newCall (this.request.url (urlBuilder.build ()) .build ()) @@ -243,15 +243,15 @@ private ApiResponse getResponse (final Map queryParams, final St return LOGGER.traceExit (this.response); } - private SSLContext getSslContext () { + private SSLSocketFactory getSslContext () { SSLContext sslContext = null; try { - sslContext = SSLContext.getInstance ("SSL"); + sslContext = getInstance ("SSL"); sslContext.init (null, getTrustedCertificates (), new java.security.SecureRandom ()); } catch (final NoSuchAlgorithmException | KeyManagementException e) { handleAndThrow (SSL_ERROR, e, e.getMessage ()); } - return sslContext; + return requireNonNull (sslContext, SSL_CONTEXT_EMPTY).getSocketFactory (); } private TrustManager[] getTrustedCertificates () { @@ -279,7 +279,7 @@ private String getUrl () { if (this.apiSetting.getPort () > 0) { hostName = format ("{0}:{1}", hostName, this.apiSetting.getPort ()); } - final var basePath = requireNonNullElse (this.apiSetting.getBasePath (), this.commonApiSetting.getBasePath ()); + final var basePath = this.apiSetting.getBasePath (); return LOGGER.traceExit (format ("{0}{1}", hostName, basePath)); } @@ -326,8 +326,8 @@ private void logResponse () { private ApiActions method (final RequestMethod method) { LOGGER.traceEntry ("Parameter: {}", method); - if (method != RequestMethod.GET) { - this.request.method (method.name (), requireNonNull (this.requestBody)); + if (method != GET) { + this.request.method (method.name (), requireNonNull (this.requestBody, EMPTY_REQUEST_BODY)); } return LOGGER.traceExit (this); } @@ -362,7 +362,6 @@ private ApiResponse parseResponse (final Response res) { .headers (headers) .networkResponse (parseResponse (res.networkResponse ())) .apiSetting (this.apiSetting) - .commonApiSetting (this.commonApiSetting) .networkResponse (parseResponse (res.networkResponse ())) .previousResponse (parseResponse (res.priorResponse ())) .receivedResponseAt (res.receivedResponseAtMillis ()) diff --git a/core-java/src/main/java/io/github/boykaframework/builders/ApiResponse.java b/core-java/src/main/java/io/github/boykaframework/builders/ApiResponse.java index c8911989d..0345fc877 100644 --- a/core-java/src/main/java/io/github/boykaframework/builders/ApiResponse.java +++ b/core-java/src/main/java/io/github/boykaframework/builders/ApiResponse.java @@ -29,7 +29,6 @@ import static io.github.boykaframework.utils.ErrorHandler.throwError; import static java.lang.System.getProperty; import static java.util.Objects.requireNonNull; -import static java.util.Objects.requireNonNullElse; import static org.apache.logging.log4j.LogManager.getLogger; import java.io.FileInputStream; @@ -43,7 +42,6 @@ import com.google.common.truth.StringSubject; import com.jayway.jsonpath.DocumentContext; import io.github.boykaframework.config.api.ApiSetting; -import io.github.boykaframework.config.api.CommonApiSetting; import lombok.Builder; import lombok.Getter; import lombok.ToString; @@ -63,7 +61,6 @@ public class ApiResponse { private ApiSetting apiSetting; private String body; - private CommonApiSetting commonApiSetting; private Map headers; private ApiResponse networkResponse; private ApiResponse previousResponse; @@ -155,10 +152,9 @@ public void verifySchema (final String schemaName) { LOGGER.traceEntry (); LOGGER.info ("Verifying Response Schema"); try ( - final var inputStream = new FileInputStream (Path.of (getProperty ("user.dir"), "/src/test/resources", - requireNonNullElse (this.apiSetting.getSchemaPath (), this.commonApiSetting.getSchemaPath ()), - schemaName) - .toFile ())) { + final var inputStream = new FileInputStream ( + Path.of (getProperty ("user.dir"), "/src/test/resources", this.apiSetting.getSchemaPath (), schemaName) + .toFile ())) { final var factory = getInstance (V7); final var jsonSchema = factory.getSchema (inputStream); final var errors = jsonSchema.validate (new ObjectMapper ().readTree (this.body)); diff --git a/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java b/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java index f594d45f2..eab833f0a 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java @@ -17,6 +17,7 @@ package io.github.boykaframework.config; import io.github.boykaframework.config.api.CommonApiSetting; +import io.github.boykaframework.config.ui.CommonUiSetting; import lombok.Data; /** @@ -28,4 +29,5 @@ @Data public class CommonSetting { private CommonApiSetting api = new CommonApiSetting (); + private CommonUiSetting ui = new CommonUiSetting (); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java index 7e28d3c00..624571a74 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java @@ -16,6 +16,9 @@ package io.github.boykaframework.config.api; +import static io.github.boykaframework.manager.ParallelSession.getSession; +import static io.github.boykaframework.utils.Validator.requireNonNullElse; + import lombok.Data; /** @@ -26,6 +29,8 @@ */ @Data public class ApiSetting { + private static final CommonApiSetting COMMON_SETTING = getSession ().getCommonApiSetting (); + private String basePath; private String baseUri; private LogSetting logging; @@ -34,4 +39,28 @@ public class ApiSetting { private TimeoutSetting timeout; private boolean validateSsl; private boolean verifyHostName; + + public String getBasePath () { + return requireNonNullElse (this.basePath, COMMON_SETTING.getBasePath ()); + } + + public LogSetting getLogging () { + return requireNonNullElse (this.logging, COMMON_SETTING.getLogging ()); + } + + public String getSchemaPath () { + return requireNonNullElse (this.schemaPath, COMMON_SETTING.getSchemaPath ()); + } + + public TimeoutSetting getTimeout () { + return requireNonNullElse (this.timeout, COMMON_SETTING.getTimeout ()); + } + + public boolean isValidateSsl () { + return requireNonNullElse (this.validateSsl, COMMON_SETTING.isValidateSsl ()); + } + + public boolean isVerifyHostName () { + return requireNonNullElse (this.verifyHostName, COMMON_SETTING.isVerifyHostName ()); + } } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java new file mode 100644 index 000000000..9857686dc --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java @@ -0,0 +1,25 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui; + +import io.github.boykaframework.config.ui.web.CommonWebSetting; +import lombok.Data; + +@Data +public class CommonUiSetting { + private CommonWebSetting web = new CommonWebSetting (); +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java new file mode 100644 index 000000000..d92fcf926 --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java @@ -0,0 +1,27 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui.mobile; + +import io.github.boykaframework.config.ui.mobile.device.DeviceSetting; +import io.github.boykaframework.config.ui.mobile.server.ServerSetting; +import lombok.Data; + +@Data +public class CommonMobileSetting { + private DeviceSetting device = new DeviceSetting (); + private ServerSetting server = new ServerSetting (); +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java index f2cd09c6f..00fdbfd6b 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java @@ -16,6 +16,8 @@ package io.github.boykaframework.config.ui.mobile; +import static io.github.boykaframework.utils.Validator.requireNonNullElse; + import io.github.boykaframework.config.ui.mobile.device.DeviceSetting; import io.github.boykaframework.config.ui.mobile.server.ServerSetting; import lombok.Data; @@ -28,6 +30,16 @@ */ @Data public class MobileSetting { + private static final CommonMobileSetting MOBILE_SETTING = new CommonMobileSetting (); + private DeviceSetting device = new DeviceSetting (); private ServerSetting server = new ServerSetting (); + + public DeviceSetting getDevice () { + return requireNonNullElse (this.device, MOBILE_SETTING.getDevice ()); + } + + public ServerSetting getServer () { + return requireNonNullElse (this.server, MOBILE_SETTING.getServer ()); + } } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java index 1b1b5fa78..c43f8fc6e 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java @@ -30,9 +30,9 @@ */ @Data public class ApplicationSetting { - private String baseUrl; - private Browser browser; - private String bundleId; + private String baseUrl; + private Browser browser; + private String bundleId; private int chromeDriverPort; private boolean external; private int installTimeout = 30; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java new file mode 100644 index 000000000..3dcae1e63 --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java @@ -0,0 +1,29 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui.mobile.device; + +import lombok.Data; + +@Data +public class CommonAndroidSetting { + private int adbTimeout = 30; + private boolean clearLogs = true; + private boolean ignoreUnimportantViews = true; + private int serverInstallTimeout = 30; + private int serverLaunchTimeout = 30; + private int systemPort = 8200; +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java new file mode 100644 index 000000000..1cf81b186 --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java @@ -0,0 +1,39 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui.mobile.device; + +import static io.github.boykaframework.enums.DeviceType.VIRTUAL; + +import java.util.Map; + +import io.github.boykaframework.enums.DeviceType; +import lombok.Data; + +@Data +public class CommonDeviceSetting { + private CommonAndroidSetting android = new CommonAndroidSetting (); + private ApplicationSetting application = new ApplicationSetting (); + private Map capabilities; + private boolean clearFiles = true; + private boolean fullReset = false; + private CommonIOSSetting ios = new CommonIOSSetting (); + private boolean noReset = true; + private SwipeSetting swipe = new SwipeSetting (); + private DeviceType type = VIRTUAL; + private VideoSetting video = new VideoSetting (); + private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java new file mode 100644 index 000000000..194dd4edb --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java @@ -0,0 +1,26 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui.mobile.device; + +import lombok.Data; + +@Data +public class CommonIOSSetting { + private boolean acceptAlerts = true; + private int typingSpeed = 60; + private WDASetting wda; +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java index cb00ec88a..da5c5ed78 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java @@ -18,6 +18,7 @@ import static io.github.boykaframework.enums.DeviceType.VIRTUAL; import static io.github.boykaframework.enums.OS.ANDROID; +import static io.github.boykaframework.utils.Validator.requireNonNullElse; import java.util.Map; @@ -33,6 +34,10 @@ */ @Data public class DeviceSetting { + private static final CommonAndroidSetting ANDROID_SETTING = new CommonAndroidSetting (); + private static final CommonDeviceSetting DEVICE_SETTING = new CommonDeviceSetting (); + private static final CommonIOSSetting IOS_SETTING = new CommonIOSSetting (); + private boolean acceptAlerts = true; private int adbTimeout = 30; private ApplicationSetting application; @@ -46,13 +51,85 @@ public class DeviceSetting { private OS os = ANDROID; private int serverInstallTimeout = 30; private int serverLaunchTimeout = 30; - private SwipeSetting swipe = new SwipeSetting (); + private SwipeSetting swipe; private int systemPort = 8200; private DeviceType type = VIRTUAL; private int typingSpeed = 60; private String uniqueId; private String version; - private VideoSetting video = new VideoSetting (); - private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); + private VideoSetting video; + private VirtualDeviceSetting virtualDevice; private WDASetting wda; + + public int getAdbTimeout () { + return requireNonNullElse (this.adbTimeout, ANDROID_SETTING.getAdbTimeout ()); + } + + public ApplicationSetting getApplication () { + return requireNonNullElse (this.application, DEVICE_SETTING.getApplication ()); + } + + public Map getCapabilities () { + return requireNonNullElse (this.capabilities, DEVICE_SETTING.getCapabilities ()); + } + + public int getServerInstallTimeout () { + return requireNonNullElse (this.serverInstallTimeout, ANDROID_SETTING.getServerInstallTimeout ()); + } + + public int getServerLaunchTimeout () { + return requireNonNullElse (this.serverLaunchTimeout, ANDROID_SETTING.getServerLaunchTimeout ()); + } + + public SwipeSetting getSwipe () { + return requireNonNullElse (this.swipe, DEVICE_SETTING.getSwipe ()); + } + + public int getSystemPort () { + return requireNonNullElse (this.systemPort, ANDROID_SETTING.getSystemPort ()); + } + + public DeviceType getType () { + return requireNonNullElse (this.type, DEVICE_SETTING.getType ()); + } + + public int getTypingSpeed () { + return requireNonNullElse (this.typingSpeed, IOS_SETTING.getTypingSpeed ()); + } + + public VideoSetting getVideo () { + return requireNonNullElse (this.video, DEVICE_SETTING.getVideo ()); + } + + public VirtualDeviceSetting getVirtualDevice () { + return requireNonNullElse (this.virtualDevice, DEVICE_SETTING.getVirtualDevice ()); + } + + public WDASetting getWda () { + return requireNonNullElse (this.wda, IOS_SETTING.getWda ()); + } + + public boolean isAcceptAlerts () { + return requireNonNullElse (this.acceptAlerts, IOS_SETTING.isAcceptAlerts ()); + } + + public boolean isClearFiles () { + return requireNonNullElse (this.clearFiles, DEVICE_SETTING.isClearFiles ()); + } + + public boolean isClearLogs () { + return requireNonNullElse (this.clearLogs, ANDROID_SETTING.isClearLogs ()); + } + + public boolean isFullReset () { + return requireNonNullElse (this.fullReset, DEVICE_SETTING.isFullReset ()); + } + + public boolean isIgnoreUnimportantViews () { + return requireNonNullElse (this.ignoreUnimportantViews, ANDROID_SETTING.isIgnoreUnimportantViews ()); + } + + public boolean isNoReset () { + return requireNonNullElse (this.noReset, DEVICE_SETTING.isNoReset ()); + } } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java index 489d34f37..252d9970c 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java @@ -16,6 +16,8 @@ package io.github.boykaframework.config.ui.mobile.server; +import static io.github.boykaframework.enums.LogLevel.ERROR; + import io.github.boykaframework.enums.LogLevel; import lombok.Data; @@ -27,8 +29,8 @@ */ @Data public class LogSetting { - private boolean debugSpacing; - private LogLevel level = LogLevel.INFO; - private boolean localTimezone; - private boolean timestamp; + private boolean debugSpacing = true; + private LogLevel level = ERROR; + private boolean localTimezone = true; + private boolean timestamp = true; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java new file mode 100644 index 000000000..cd40540c9 --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java @@ -0,0 +1,54 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.config.ui.web; + +import static io.github.boykaframework.enums.Browser.NONE; +import static io.github.boykaframework.enums.Protocol.HTTP; +import static io.github.boykaframework.enums.TargetProviders.LOCAL; +import static io.github.boykaframework.enums.WindowResizeType.NORMAL; + +import java.util.List; +import java.util.Map; + +import io.github.boykaframework.enums.Browser; +import io.github.boykaframework.enums.Protocol; +import io.github.boykaframework.enums.TargetProviders; +import io.github.boykaframework.enums.WindowResizeType; +import lombok.Data; +import org.openqa.selenium.Dimension; +import org.openqa.selenium.PageLoadStrategy; + +@Data +public class CommonWebSetting { + private String baseUrl; + private Browser browser = NONE; + private List browserOptions; + private Map capabilities; + private Dimension customSize = new Dimension (1920, 1080); + private boolean headless = true; + private boolean highlight = false; + private String host; + private PageLoadStrategy pageLoadStrategy = PageLoadStrategy.NORMAL; + private String password; + private String platform; + private int port; + private Protocol protocol = HTTP; + private WindowResizeType resize = NORMAL; + private TargetProviders target = LOCAL; + private String userName; + private String version = "stable"; +} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java index 6fd765b70..1d3f00433 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java @@ -16,11 +16,9 @@ package io.github.boykaframework.config.ui.web; -import static io.github.boykaframework.enums.Browser.NONE; -import static io.github.boykaframework.enums.Protocol.HTTP; -import static io.github.boykaframework.enums.TargetProviders.LOCAL; -import static io.github.boykaframework.enums.WindowResizeType.NORMAL; +import static io.github.boykaframework.manager.ParallelSession.getSession; import static io.github.boykaframework.utils.StringUtils.interpolate; +import static io.github.boykaframework.utils.Validator.requireNonNullElse; import java.util.List; import java.util.Map; @@ -41,23 +39,53 @@ */ @Data public class WebSetting { + private static final CommonWebSetting WEB_SETTING = getSession ().getCommonWebSetting (); + private String baseUrl; - private Browser browser = NONE; + private Browser browser; private List browserOptions; private Map capabilities; - private Dimension customSize = new Dimension (1920, 1080); - private boolean headless = true; - private boolean highlight = false; + private Dimension customSize; + private boolean headless; + private boolean highlight; private String host; - private PageLoadStrategy pageLoadStrategy = PageLoadStrategy.NORMAL; + private PageLoadStrategy pageLoadStrategy; private String password; private String platform; private int port; - private Protocol protocol = HTTP; - private WindowResizeType resize = NORMAL; - private TargetProviders target = LOCAL; + private Protocol protocol; + private WindowResizeType resize; + private TargetProviders target; private String userName; - private String version = "stable"; + private String version; + + public String getBaseUrl () { + return requireNonNullElse (this.baseUrl, WEB_SETTING.getBaseUrl ()); + } + + public Browser getBrowser () { + return requireNonNullElse (this.browser, WEB_SETTING.getBrowser ()); + } + + public List getBrowserOptions () { + return requireNonNullElse (this.browserOptions, WEB_SETTING.getBrowserOptions ()); + } + + public Map getCapabilities () { + return requireNonNullElse (this.capabilities, WEB_SETTING.getCapabilities ()); + } + + public Dimension getCustomSize () { + return requireNonNullElse (this.customSize, WEB_SETTING.getCustomSize ()); + } + + public String getHost () { + return requireNonNullElse (this.host, WEB_SETTING.getHost ()); + } + + public PageLoadStrategy getPageLoadStrategy () { + return requireNonNullElse (this.pageLoadStrategy, WEB_SETTING.getPageLoadStrategy ()); + } /** * Gets cloud password. @@ -65,7 +93,27 @@ public class WebSetting { * @return the cloud password */ public String getPassword () { - return interpolate (this.password); + return interpolate (requireNonNullElse (this.password, WEB_SETTING.getPassword ())); + } + + public String getPlatform () { + return requireNonNullElse (this.platform, WEB_SETTING.getPlatform ()); + } + + public int getPort () { + return requireNonNullElse (this.port, WEB_SETTING.getPort ()); + } + + public Protocol getProtocol () { + return requireNonNullElse (this.protocol, WEB_SETTING.getProtocol ()); + } + + public WindowResizeType getResize () { + return requireNonNullElse (this.resize, WEB_SETTING.getResize ()); + } + + public TargetProviders getTarget () { + return requireNonNullElse (this.target, WEB_SETTING.getTarget ()); } /** @@ -74,6 +122,18 @@ public String getPassword () { * @return the cloud username. */ public String getUserName () { - return interpolate (this.userName); + return interpolate (requireNonNullElse (this.userName, WEB_SETTING.getUserName ())); + } + + public String getVersion () { + return requireNonNullElse (this.version, WEB_SETTING.getVersion ()); + } + + public boolean isHeadless () { + return requireNonNullElse (this.headless, WEB_SETTING.isHeadless ()); + } + + public boolean isHighlight () { + return requireNonNullElse (this.highlight, WEB_SETTING.isHighlight ()); } } diff --git a/core-java/src/main/java/io/github/boykaframework/enums/Message.java b/core-java/src/main/java/io/github/boykaframework/enums/Message.java index 150db43ed..744ec73bc 100644 --- a/core-java/src/main/java/io/github/boykaframework/enums/Message.java +++ b/core-java/src/main/java/io/github/boykaframework/enums/Message.java @@ -90,6 +90,14 @@ public enum Message { * Empty browser is not allowed. */ EMPTY_BROWSER_NOT_ALLOWED ("Browser type cannot be empty in the config..."), + /** + * Empty request body. + */ + EMPTY_REQUEST_BODY ("Request Body is empty"), + /** + * URL cannot be empty. + */ + EMPTY_URL ("URL cannot be empty..."), /** * Error while calling setter method. */ @@ -270,6 +278,10 @@ public enum Message { * Session persona cannot be null. */ SESSION_PERSONA_CANNOT_BE_NULL ("Session Persona cannot be empty or null..."), + /** + * SSL Context cannot be empty. + */ + SSL_CONTEXT_EMPTY ("SSL Context is empty..."), /** * SSL Context Error. */ diff --git a/core-java/src/main/java/io/github/boykaframework/manager/AndroidManager.java b/core-java/src/main/java/io/github/boykaframework/manager/AndroidManager.java index 1393d79c8..80fb78358 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/AndroidManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/AndroidManager.java @@ -17,8 +17,15 @@ package io.github.boykaframework.manager; import static io.appium.java_client.Setting.IGNORE_UNIMPORTANT_VIEWS; +import static io.github.boykaframework.enums.ApplicationType.WEB; import static io.github.boykaframework.enums.AutomationType.UI_AUTOMATOR; +import static io.github.boykaframework.enums.DeviceType.CLOUD; import static io.github.boykaframework.enums.DeviceType.VIRTUAL; +import static io.github.boykaframework.enums.Message.SESSION_NOT_STARTED; +import static io.github.boykaframework.manager.ParallelSession.getSession; +import static io.github.boykaframework.manager.ParallelSession.setDriver; +import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; +import static io.github.boykaframework.utils.Validator.setOptionIfPresent; import static java.time.Duration.ofSeconds; import static java.util.Objects.isNull; @@ -28,12 +35,8 @@ import io.github.boykaframework.config.ui.mobile.device.ApplicationSetting; import io.github.boykaframework.config.ui.mobile.device.DeviceSetting; import io.github.boykaframework.config.ui.mobile.device.VirtualDeviceSetting; -import io.github.boykaframework.enums.ApplicationType; import io.github.boykaframework.enums.DeviceType; -import io.github.boykaframework.enums.Message; import io.github.boykaframework.enums.TargetProviders; -import io.github.boykaframework.utils.ErrorHandler; -import io.github.boykaframework.utils.Validator; import org.openqa.selenium.SessionNotCreatedException; class AndroidManager implements IDriverManager { @@ -41,8 +44,7 @@ class AndroidManager implements IDriverManager { private final DeviceSetting settings; public AndroidManager () { - this.mobileSetting = ParallelSession.getSession () - .getMobileSetting (); + this.mobileSetting = getSession ().getMobileSetting (); this.settings = this.mobileSetting.getDevice (); } @@ -59,10 +61,10 @@ public void setupDriver () { private void setAndroidApplicationOptions (final UiAutomator2Options options, final ApplicationSetting application) { - if (application.getType () == ApplicationType.WEB) { + if (application.getType () == WEB) { options.withBrowserName (application.getBrowser () .name ()); - Validator.setOptionIfPresent (application.getChromeDriverPort (), options::setChromedriverPort); + setOptionIfPresent (application.getChromeDriverPort (), options::setChromedriverPort); } else { setupApplicationOptions (application, options); options.setAppWaitActivity (application.getWaitActivity ()); @@ -106,25 +108,23 @@ private void setLocalUiAutomatorOptions (final UiAutomator2Options options) { } private void setupAndroidSettings () { - final var driver = (AndroidDriver) ParallelSession.getSession () - .getDriver (); + final var driver = (AndroidDriver) getSession ().getDriver (); driver.setSetting (IGNORE_UNIMPORTANT_VIEWS, this.settings.isIgnoreUnimportantViews ()); } private void setupUiAutomatorDriver (final TargetProviders targetProviders) { final var options = new UiAutomator2Options (); setCommonUiAutomatorOptions (options); - if (this.settings.getType () == DeviceType.CLOUD) { + if (this.settings.getType () == CLOUD) { setupCloudDriverOptions (options, this.settings.getCapabilities (), targetProviders); } else { setLocalUiAutomatorOptions (options); } try { - ParallelSession.setDriver (new AndroidDriver (ParallelSession.getSession () - .getServiceManager () + setDriver (new AndroidDriver (getSession ().getServiceManager () .getServiceUrl (), options)); } catch (final SessionNotCreatedException e) { - ErrorHandler.handleAndThrow (Message.SESSION_NOT_STARTED, e); + handleAndThrow (SESSION_NOT_STARTED, e); } navigateToBaseUrl (this.settings.getApplication ()); } diff --git a/core-java/src/main/java/io/github/boykaframework/manager/DriverManager.java b/core-java/src/main/java/io/github/boykaframework/manager/DriverManager.java index ca82bc06c..2657e1ff3 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/DriverManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/DriverManager.java @@ -16,6 +16,7 @@ package io.github.boykaframework.manager; +import static io.github.boykaframework.enums.PlatformType.WEB; import static io.github.boykaframework.manager.ParallelSession.getSession; import static java.time.Duration.ofSeconds; import static org.apache.logging.log4j.LogManager.getLogger; @@ -46,7 +47,7 @@ void setupDriver () { LOGGER.traceEntry (); final var settings = getSession ().getSetting () .getUi (); - if (this.platformType != PlatformType.WEB) { + if (this.platformType != WEB) { final var mobileSetting = getSession ().getMobileSetting (); setupAppiumServer (mobileSetting.getServer ()); } @@ -67,7 +68,7 @@ private void setDriverWaits (final TimeoutSetting timeoutSetting) { final var timeouts = driver.manage () .timeouts (); timeouts.implicitlyWait (ofSeconds (timeoutSetting.getImplicitWait ())); - if (this.platformType == PlatformType.WEB || session.getMobileSetting () + if (this.platformType == WEB || session.getMobileSetting () .getDevice () .getApplication () .getType () == ApplicationType.WEB) { diff --git a/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java b/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java index a0adf7864..0a1a0d20f 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java @@ -16,6 +16,10 @@ package io.github.boykaframework.manager; +import static io.github.boykaframework.enums.Message.INVALID_LISTENER_FOUND; +import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; +import static io.github.boykaframework.utils.SettingUtils.loadSetting; +import static java.lang.ClassLoader.getSystemClassLoader; import static java.util.Objects.isNull; import static org.apache.commons.lang3.StringUtils.isNotEmpty; import static org.apache.logging.log4j.LogManager.getLogger; @@ -30,18 +34,17 @@ import com.google.common.collect.ImmutableSet; import com.google.common.reflect.ClassPath; +import com.google.common.reflect.ClassPath.ClassInfo; import io.github.boykaframework.actions.interfaces.listeners.BoykaListener; import io.github.boykaframework.config.FrameworkSetting; import io.github.boykaframework.config.TestDataSetting; import io.github.boykaframework.config.api.ApiSetting; import io.github.boykaframework.config.api.CommonApiSetting; import io.github.boykaframework.config.ui.mobile.MobileSetting; +import io.github.boykaframework.config.ui.web.CommonWebSetting; import io.github.boykaframework.config.ui.web.WebSetting; import io.github.boykaframework.enums.ListenerType; -import io.github.boykaframework.enums.Message; import io.github.boykaframework.enums.PlatformType; -import io.github.boykaframework.utils.ErrorHandler; -import io.github.boykaframework.utils.SettingUtils; import lombok.Data; import org.apache.logging.log4j.Logger; import org.openqa.selenium.WebDriver; @@ -58,16 +61,16 @@ @SuppressWarnings ("unchecked") @Data public class DriverSession { - private static final ImmutableSet ALL_CLASSES = getAllClasses (); - private static final Logger LOGGER = getLogger (); + private static final ImmutableSet ALL_CLASSES = getAllClasses (); + private static final Logger LOGGER = getLogger (); - private static ImmutableSet getAllClasses () { - ImmutableSet result = null; + private static ImmutableSet getAllClasses () { + ImmutableSet result = null; try { - result = ClassPath.from (ClassLoader.getSystemClassLoader ()) + result = ClassPath.from (getSystemClassLoader ()) .getAllClasses (); } catch (final IOException e) { - ErrorHandler.handleAndThrow (Message.INVALID_LISTENER_FOUND, e); + handleAndThrow (INVALID_LISTENER_FOUND, e); } return result; } @@ -85,7 +88,7 @@ private static ImmutableSet getAllClasses () { * Driver session constructor. */ DriverSession () { - this.setting = SettingUtils.loadSetting (); + this.setting = loadSetting (); this.sharedData = new HashMap<> (); this.listeners = new EnumMap<> (ListenerType.class); LOGGER.traceExit (); @@ -124,6 +127,17 @@ public CommonApiSetting getCommonApiSetting () { .getApi (); } + /** + * Gets Common Web Settings. + * + * @return {@link WebSetting} instance + */ + public CommonWebSetting getCommonWebSetting () { + return this.setting.getCommonSetting () + .getUi () + .getWeb (); + } + /** * Gets the listener for provided listener type. * @@ -146,7 +160,7 @@ public T getListener (final ListenerType listenerType) result = (T) constructor.newInstance (); } catch (final NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { - ErrorHandler.handleAndThrow (Message.INVALID_LISTENER_FOUND, e, listener); + handleAndThrow (INVALID_LISTENER_FOUND, e, listener); } return result; } @@ -217,7 +231,7 @@ private void addListeners (final ArrayList listenerList, final String pa ALL_CLASSES.stream () .filter (clazz -> clazz.getPackageName () .startsWith (packageName)) - .map (ClassPath.ClassInfo::getName) + .map (ClassInfo::getName) .forEach (listenerList::add); } } @@ -240,7 +254,7 @@ private void loadAllListeners (final List list this.listeners.put (listenerType, cls); } } catch (final ClassNotFoundException e) { - ErrorHandler.handleAndThrow (Message.INVALID_LISTENER_FOUND, e, listener); + handleAndThrow (INVALID_LISTENER_FOUND, e, listener); } }); } diff --git a/core-java/src/main/java/io/github/boykaframework/manager/IDriverManager.java b/core-java/src/main/java/io/github/boykaframework/manager/IDriverManager.java index 56960346e..95dc6574f 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/IDriverManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/IDriverManager.java @@ -16,30 +16,29 @@ package io.github.boykaframework.manager; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.enums.ApplicationType.WEB; import static io.github.boykaframework.enums.TargetProviders.LOCAL; +import static io.github.boykaframework.utils.StringUtils.interpolate; import static java.lang.System.getProperty; +import static java.nio.file.Path.of; import static java.text.MessageFormat.format; import static java.util.Objects.isNull; import static org.apache.commons.lang3.StringUtils.isNotEmpty; -import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import io.appium.java_client.remote.options.BaseOptions; import io.appium.java_client.remote.options.SupportsAppOption; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.config.ui.mobile.device.ApplicationSetting; -import io.github.boykaframework.enums.ApplicationType; import io.github.boykaframework.enums.TargetProviders; -import io.github.boykaframework.utils.StringUtils; import org.openqa.selenium.MutableCapabilities; interface IDriverManager { default void navigateToBaseUrl (final ApplicationSetting application) { - if (application.getType () == ApplicationType.WEB && isNotEmpty (application.getBaseUrl ())) { - NavigateActions.navigate () - .to (application.getBaseUrl ()); + if (application.getType () == WEB && isNotEmpty (application.getBaseUrl ())) { + navigate ().to (application.getBaseUrl ()); } } @@ -47,10 +46,10 @@ default , T extends SupportsAppOption> void setupApp final ApplicationSetting application, final T options) { if (isNotEmpty (application.getPath ())) { if (!application.isExternal ()) { - options.setApp (Path.of (getProperty ("user.dir"), "/src/test/resources", application.getPath ()) - .toString ()); + options.setApp ( + of (getProperty ("user.dir"), "/src/test/resources", application.getPath ()).toString ()); } else { - options.setApp (StringUtils.interpolate (application.getPath ())); + options.setApp (interpolate (application.getPath ())); } } } @@ -61,7 +60,7 @@ default void setupCloudDriverOptions (final E op final var optionCapabilities = new HashMap (); capabilities.forEach ((k, v) -> { if (v instanceof String) { - optionCapabilities.put (k, StringUtils.interpolate (v.toString ())); + optionCapabilities.put (k, interpolate (v.toString ())); } else { optionCapabilities.put (k, v); } diff --git a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java index 05b8a6d50..36c97876e 100644 --- a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java +++ b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java @@ -79,6 +79,16 @@ public static T requireNonNull (final T obj, final Message message, final Ob return obj; } + public static T requireNonNullElse (final T value, final T defaultValue) { + if (isNull (value)) { + return defaultValue; + } + if (value instanceof Integer && !value.equals (0)) { + return defaultValue; + } + return value; + } + /** * Checks if the value is not null or zero and perform action on it. * diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 9dec7b8d5..495b44a67 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -16,6 +16,19 @@ "connection_timeout": 5 }, "schema_path": "schema/" + }, + "ui": { + "web": { + "browser": "CHROME", + "page_load_strategy": "NORMAL", + "highlight": true, + "headless": true, + "resize": "CUSTOM", + "custom_size": { + "width": 1580, + "height": 1080 + } + } } }, "ui": { @@ -40,15 +53,6 @@ "web": { "test_local_chrome": { "base_url": "https://the-internet.herokuapp.com/", - "browser": "CHROME", - "page_load_strategy": "NORMAL", - "highlight": false, - "headless": true, - "resize": "CUSTOM", - "custom_size": { - "width": 1580, - "height": 1080 - }, "browser_options": [ "use-fake-device-for-media-stream", "use-fake-ui-for-media-stream" @@ -93,7 +97,7 @@ "browser": "REMOTE", "base_url": "https://the-internet.herokuapp.com/", "target": "LOCAL", - "port": "4444", + "port": 4444, "capabilities": { "browserName": "chrome" } diff --git a/package.json b/package.json index 7c0bf3919..b64339905 100644 --- a/package.json +++ b/package.json @@ -36,11 +36,11 @@ "@lerna/child-process": "^7.4.2", "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-ts": "^2.6.4", - "@types/node": "^22.4.1", + "@types/node": "^22.5.0", "@typescript-eslint/eslint-plugin": "^8.2.0", "@typescript-eslint/parser": "^8.2.0", "commitlint": "^19.4.0", - "eslint": "^9.9.0", + "eslint": "^9.9.1", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.1", @@ -48,14 +48,14 @@ "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.35.0", "globals": "^15.9.0", - "husky": "^9.1.4", + "husky": "^9.1.5", "js-yaml": "^4.1.0", "lerna": "8.1.8", "lerna-changelog": "^2.2.0", "lerna-version": "^6.6.2", "lint-staged": "^15.2.9", "lodash": "^4.17.21", - "nx": "^19.6.1", + "nx": "^19.6.2", "prettier": "^3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1713cf6b1..7c7e38bb6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@commitlint/cli': specifier: ^19.4.0 - version: 19.4.0(@types/node@22.4.1)(typescript@5.5.4) + version: 19.4.0(@types/node@22.5.0)(typescript@5.5.4) '@commitlint/config-conventional': specifier: ^19.2.2 version: 19.2.2 @@ -25,46 +25,46 @@ importers: version: 7.0.0(release-it@17.6.0(typescript@5.5.4)) '@stylistic/eslint-plugin-ts': specifier: ^2.6.4 - version: 2.6.4(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + version: 2.6.4(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@types/node': - specifier: ^22.4.1 - version: 22.4.1 + specifier: ^22.5.0 + version: 22.5.0 '@typescript-eslint/eslint-plugin': specifier: ^8.2.0 - version: 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + version: 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^8.2.0 - version: 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + version: 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) commitlint: specifier: ^19.4.0 - version: 19.4.0(@types/node@22.4.1)(typescript@5.5.4) + version: 19.4.0(@types/node@22.5.0)(typescript@5.5.4) eslint: - specifier: ^9.9.0 - version: 9.9.0(jiti@1.21.6) + specifier: ^9.9.1 + version: 9.9.1(jiti@1.21.6) eslint-config-google: specifier: ^0.14.0 - version: 0.14.0(eslint@9.9.0(jiti@1.21.6)) + version: 0.14.0(eslint@9.9.1(jiti@1.21.6)) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)) + version: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.0(jiti@1.21.6)) + version: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3) + version: 5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3) eslint-plugin-react: specifier: ^7.35.0 - version: 7.35.0(eslint@9.9.0(jiti@1.21.6)) + version: 7.35.0(eslint@9.9.1(jiti@1.21.6)) globals: specifier: ^15.9.0 version: 15.9.0 husky: - specifier: ^9.1.4 - version: 9.1.4 + specifier: ^9.1.5 + version: 9.1.5 js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -84,8 +84,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 nx: - specifier: ^19.6.1 - version: 19.6.1 + specifier: ^19.6.2 + version: 19.6.2 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -100,31 +100,31 @@ importers: version: 17.6.0(typescript@5.5.4) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.4.1)(typescript@5.5.4) + version: 10.9.2(@types/node@22.5.0)(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 typescript-eslint: specifier: ^8.2.0 - version: 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + version: 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) website: dependencies: '@docusaurus/core': specifier: 3.5.2 - version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/plugin-google-tag-manager': specifier: ^3.5.2 - version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/preset-classic': specifier: 3.5.2 - version: 3.5.2(@algolia/client-search@5.0.2)(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3)(typescript@5.5.4) + version: 3.5.2(@algolia/client-search@5.1.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/theme-classic': specifier: ^3.5.2 - version: 3.5.2(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@mdx-js/react': specifier: ^3.0.1 - version: 3.0.1(@types/react@18.3.3)(react@18.3.1) + version: 3.0.1(@types/react@18.3.4)(react@18.3.1) clsx: specifier: ^2.1.1 version: 2.1.1 @@ -149,7 +149,7 @@ importers: version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/plugin-content-docs': specifier: ^3.5.2 - version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/tsconfig': specifier: ^3.5.2 version: 3.5.2 @@ -200,8 +200,8 @@ packages: '@algolia/client-common@4.23.3': resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - '@algolia/client-common@5.0.2': - resolution: {integrity: sha512-wXZn4Ne+oFr1vaJuT2El5cbobm4sUgYqWiiWyy4QDr8AIoUfROtCkV7YhwZLzmZRBfn6ptPB5MB8ely7iFZXnw==} + '@algolia/client-common@5.1.1': + resolution: {integrity: sha512-jkQNQbGY+XQB3Eln7wqqdUZKBzG8lETcsaUk5gcMc6iIwyN/qW0v0fhpKPH+Kli+BImLxo0CWk12CvVvx2exWA==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.23.3': @@ -210,8 +210,8 @@ packages: '@algolia/client-search@4.23.3': resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - '@algolia/client-search@5.0.2': - resolution: {integrity: sha512-dOAekvG7S85n1x3Nibc1UUADQCZpFXP7m/bYoxzIQe2+bGKAPa2zQ4s9E1H+qIDiWa7EzhVfwGlSxRi9S2SeVg==} + '@algolia/client-search@5.1.1': + resolution: {integrity: sha512-SFpb3FI/VouGou/vpuS7qeCA5Y/KpV42P6CEA/1MZQtl/xJkl6PVjikb+Q9YadeHi2jtDV/aQ6PyiVDnX4PQcw==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': @@ -229,8 +229,8 @@ packages: '@algolia/requester-browser-xhr@4.23.3': resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - '@algolia/requester-browser-xhr@5.0.2': - resolution: {integrity: sha512-GrLWa9jo+tqnieXtpdUMM6NHZV/bDbAJ8uBgyDF5PpaKtk44/3vQk8LVcKQsT3/nnVb/5T+AprNbJmIjsVaRqA==} + '@algolia/requester-browser-xhr@5.1.1': + resolution: {integrity: sha512-NXmN1ujJCj5GlJQaMK6DbdiXdcf6nhRef/X40lu9TYi71q9xTo/5RPMI0K2iOp6g07S26BrXFOz6RSV3Ny4LLw==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.23.3': @@ -239,8 +239,8 @@ packages: '@algolia/requester-node-http@4.23.3': resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - '@algolia/requester-node-http@5.0.2': - resolution: {integrity: sha512-6Kt1MQcdCyefs//ie3JtcDo/73QRwHoA1JX4J5t1yZp0W3J3o1QPb6mueFswJ+nHg+cVbSpbsL2xamtZ/rjj7w==} + '@algolia/requester-node-http@5.1.1': + resolution: {integrity: sha512-xwrgnNTIzgxDEx6zuCKSKTPzQLA8fL/WZiVB6fRpIu5agLMjoAi0cWA5YSDbo+2FFxqVgLqKY/Jz6mKmWtY15Q==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.23.3': @@ -1176,16 +1176,16 @@ packages: resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-array@0.17.1': - resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.9.0': - resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + '@eslint/js@9.9.1': + resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -1487,8 +1487,8 @@ packages: resolution: {integrity: sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==} hasBin: true - '@nrwl/tao@19.6.1': - resolution: {integrity: sha512-nl/NcBRkHr5r0drCq9ROPcKx/Q7SioPvNMl7edo/PdjdKcmJ3gXqvgTxPjwbYH2/ScNX2yjm353qrNyffSs6Rw==} + '@nrwl/tao@19.6.2': + resolution: {integrity: sha512-DcqpaKpkUbF+J2kVRoLtYZOFpr8mu4+fHiKIjrdliKVabSOzekwRAx0DN+VZdpUoaZ2+5W+F8RFhSak1216ZCg==} hasBin: true '@nx/devkit@19.6.1': @@ -1496,62 +1496,62 @@ packages: peerDependencies: nx: '>= 17 <= 20' - '@nx/nx-darwin-arm64@19.6.1': - resolution: {integrity: sha512-xxAdyIUckvsIID0BnYCHM86s35n0tDsBYuoqpOFG+22PEk0bzoSVOyxeJQ5UKDCvXe5wa2MbcgyhbHKhj7Osnw==} + '@nx/nx-darwin-arm64@19.6.2': + resolution: {integrity: sha512-WCt9bK5CiuXiiE/8ivoeOEy3J2xYx2Eduea+8PdyK+21FzWakSV4GK0DUfC/dmLPyc+osx2kpmVO+l4HVBIEJw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@19.6.1': - resolution: {integrity: sha512-ISwb09KKtAydrAbyxwOjce8pdVzOSuzC068Uo8TcHp2Xao2b+N9zmkQquLzC+G4dgwxDxxVYoZcuZ6urRFV7Cg==} + '@nx/nx-darwin-x64@19.6.2': + resolution: {integrity: sha512-jCB4yTE97/UkUd1V7ttFLJkVRx2vkQgHAqcmU0l8pAPRWKplYkO43J4g4M3M8SyLsX6arPIlfIT3uBh8TzqxXA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@19.6.1': - resolution: {integrity: sha512-IzR+K0tW8A6kl95V6k8Pp8tknjiDGOUB+E2p8YN7UlYPP7gaBK+rojERF4V7jD5pEvSxrKMwuJoD+WH/b52TNA==} + '@nx/nx-freebsd-x64@19.6.2': + resolution: {integrity: sha512-ZBFTHO9vhaSpzuopAww9xznseNjE2CUXGSq5be0CUBoIvGn4TWvjOfv+tinIbKSYiWdfL1PYMqnE2FIqyxscNA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@19.6.1': - resolution: {integrity: sha512-8mHceXwpBIp1gF+hSKGg7XRYpcB9QN8YROSn4dzvDoUMEusOE27jzXKKS9dRkjdULYENKDkv0NbuhcoxoWx+KA==} + '@nx/nx-linux-arm-gnueabihf@19.6.2': + resolution: {integrity: sha512-Aubnlvx/47zAOIlp+ZWxe6Xq3cX9sSMRsB7xZhLkGnpcKwsKEh+uDWi6yfdnmLBp02ZY16qwcpAeYlyBRHZRUA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@19.6.1': - resolution: {integrity: sha512-eqxWqhUrFEz3Rnoz9RKhMlrCY6AF0AVGgTGto5TdB16kIgTA53i18bf9jaq2MSBZQHE1kySVUgPfxQQxPzWKaA==} + '@nx/nx-linux-arm64-gnu@19.6.2': + resolution: {integrity: sha512-LorZsjhaz7vajwzGVAGUMtMpu5232UvJceB7XzUXF1TEWM2FZfSUCdLKdQgR2YZHeALYzVoEQgU/j6zKldMqpw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@19.6.1': - resolution: {integrity: sha512-3lfazErzsJgO8G2dEcuGmtJoi9fQ3CPvLA+RiE7CKBQ4a/5Zb1o2rqlZ1YTfnfiUcOh4knt7gWcXm16eSKbLoQ==} + '@nx/nx-linux-arm64-musl@19.6.2': + resolution: {integrity: sha512-+s4BD6NkmsrnxYHWpJ84Lm49rsTa5tY4Zpz09kpMCc7NNQdIYtWimexGmaHGiIY9FmwqaQCx54lCxSXUXQ3hoQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@19.6.1': - resolution: {integrity: sha512-Rt4NkuJZpRyVunRoCC5shaUqPk6wrMH3x55WEb0HBzlKjkItgrFpPInPS4hp9hFsJ8vX2AkBX2qrTWRaLMbOyQ==} + '@nx/nx-linux-x64-gnu@19.6.2': + resolution: {integrity: sha512-O7ao0x7j7mwgPS8DkWmMtewTRyharQSURq2kUgWwyCJgVbr5ggV8RySmt/uLT9Tv/2LUDerWdBnd30oDr70M5g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@19.6.1': - resolution: {integrity: sha512-P0RnxCfcgb6t4l+WWVNlTDzqpcM/Du77EfgvNc3Z1mRLQMP4E5TkLt8J/aTTjh2GwtnP95oxQSOYBzg+sJwNPQ==} + '@nx/nx-linux-x64-musl@19.6.2': + resolution: {integrity: sha512-7tVOQoorw8o1n5CAtLTlJx9oI/py+V3NX0PTdX/Pa7tA6gxyrZW51HlpODssRZ5PM9171G8VAZVROP9eDLfntQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@19.6.1': - resolution: {integrity: sha512-CFaRqK+Sv7Gi7d+WUJqFLV0t4D2ImnO7BoeZWnT6oEfIl94hikCtbu4693Fsu7eg37JMa+4xwdAUvOOq1rFhJg==} + '@nx/nx-win32-arm64-msvc@19.6.2': + resolution: {integrity: sha512-l12NsHLaCAYdZPOP8KrXnSWxrytcJuifBJTejy7Xu9rFQMEDWI7dKap8vKJrYIRUtJjOsF8Yjq38064noZkLdw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@19.6.1': - resolution: {integrity: sha512-l2vAK0/2c9oEAqI0KdeJkkkZlr72LeWV5zds/FIuFHBRyweJanplRelhD7t199BnGr2FfulOpFrc1TyYzvntkg==} + '@nx/nx-win32-x64-msvc@19.6.2': + resolution: {integrity: sha512-B+80FY1kDWHMCOZubt786BtQOZn+LJ6CzjDGHSocqVMVqJDvBzrlf4qwmHeOIACWAsbZtJmWu+do3FriZ53ovA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2038,8 +2038,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.4.1': - resolution: {integrity: sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==} + '@types/node@22.5.0': + resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -2071,6 +2071,9 @@ packages: '@types/react@18.3.3': resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + '@types/react@18.3.4': + resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} + '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -3721,8 +3724,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.9.0: - resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + eslint@9.9.1: + resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -4479,8 +4482,8 @@ packages: humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - husky@9.1.4: - resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==} + husky@9.1.5: + resolution: {integrity: sha512-rowAVRUBfI0b4+niA4SJMhfQwc107VLkBUgEYYAOQAbqDCnra1nYh83hF/MDmhYs9t9n1E3DuKOrs2LYNC+0Ag==} engines: {node: '>=18'} hasBin: true @@ -6026,8 +6029,8 @@ packages: '@swc/core': optional: true - nx@19.6.1: - resolution: {integrity: sha512-F7NH8/lMwd2ogPjvjMDGUJMaRuEc60DEmpd8U/3R7WgFRHWuF5ily1AKQiLfQg6V5ArQUrkBJesulTAnlHR7+g==} + nx@19.6.2: + resolution: {integrity: sha512-uUC9glC/QDsDhfOSzWl1id9rfUVepVwLhwBGRMeO5K6+Tju7qAsRGZ2NGPoUz6J1AZuWtlKZcr+MOSK2U4+2wQ==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -7212,8 +7215,8 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} - search-insights@2.16.3: - resolution: {integrity: sha512-hSHy/s4Zk2xibhj9XTCACB+1PqS+CaJxepGNBhKc/OsHRpqvHAUAm5+uZ6kJJbGXn0pb3XqekHjg6JAqPExzqg==} + search-insights@2.17.0: + resolution: {integrity: sha512-AskayU3QNsXQzSL6v4LTYST7NNfs2HWyHHB+sdORP9chsytAhro5XRfToAMI/LAVYgNbzowVZTMfBRodgbUHKg==} section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} @@ -8382,32 +8385,32 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)(search-insights@2.16.3)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)(search-insights@2.16.3) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)(search-insights@2.16.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3) - search-insights: 2.16.3 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) + search-insights: 2.17.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3) - '@algolia/client-search': 5.0.2 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) + '@algolia/client-search': 5.1.1 algoliasearch: 4.23.3 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)': dependencies: - '@algolia/client-search': 5.0.2 + '@algolia/client-search': 5.1.1 algoliasearch: 4.23.3 '@algolia/cache-browser-local-storage@4.23.3': @@ -8438,7 +8441,7 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-common@5.0.2': {} + '@algolia/client-common@5.1.1': {} '@algolia/client-personalization@4.23.3': dependencies: @@ -8452,11 +8455,11 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-search@5.0.2': + '@algolia/client-search@5.1.1': dependencies: - '@algolia/client-common': 5.0.2 - '@algolia/requester-browser-xhr': 5.0.2 - '@algolia/requester-node-http': 5.0.2 + '@algolia/client-common': 5.1.1 + '@algolia/requester-browser-xhr': 5.1.1 + '@algolia/requester-node-http': 5.1.1 '@algolia/events@4.0.1': {} @@ -8484,9 +8487,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-browser-xhr@5.0.2': + '@algolia/requester-browser-xhr@5.1.1': dependencies: - '@algolia/client-common': 5.0.2 + '@algolia/client-common': 5.1.1 '@algolia/requester-common@4.23.3': {} @@ -8494,9 +8497,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http@5.0.2': + '@algolia/requester-node-http@5.1.1': dependencies: - '@algolia/client-common': 5.0.2 + '@algolia/client-common': 5.1.1 '@algolia/transporter@4.23.3': dependencies: @@ -9374,11 +9377,11 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.4.0(@types/node@22.4.1)(typescript@5.5.4)': + '@commitlint/cli@19.4.0(@types/node@22.5.0)(typescript@5.5.4)': dependencies: '@commitlint/format': 19.3.0 '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.4.0(@types/node@22.4.1)(typescript@5.5.4) + '@commitlint/load': 19.4.0(@types/node@22.5.0)(typescript@5.5.4) '@commitlint/read': 19.4.0 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -9425,7 +9428,7 @@ snapshots: '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.4.0(@types/node@22.4.1)(typescript@5.5.4)': + '@commitlint/load@19.4.0(@types/node@22.5.0)(typescript@5.5.4)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 @@ -9433,7 +9436,7 @@ snapshots: '@commitlint/types': 19.0.3 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.4.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.5.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -9493,21 +9496,21 @@ snapshots: '@docsearch/css@3.6.0': {} - '@docsearch/react@3.6.0(@algolia/client-search@5.0.2)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3)': + '@docsearch/react@3.6.0(@algolia/client-search@5.1.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3)(search-insights@2.16.3) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.0.2)(algoliasearch@4.23.3) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) '@docsearch/css': 3.6.0 algoliasearch: 4.23.3 optionalDependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.4 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - search-insights: 2.16.3 + search-insights: 2.17.0 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.24.7 @@ -9525,7 +9528,7 @@ snapshots: '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) - '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.4)(react@18.3.1) autoprefixer: 10.4.19(postcss@8.4.38) babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.0) babel-plugin-dynamic-import-node: 2.3.3 @@ -9559,7 +9562,7 @@ snapshots: postcss-loader: 7.3.4(postcss@8.4.38)(typescript@5.5.4)(webpack@5.92.0) prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0) + react-dev-utils: 12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0) react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' @@ -9666,13 +9669,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -9708,13 +9711,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -9748,9 +9751,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -9779,9 +9782,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) fs-extra: 11.2.0 @@ -9808,9 +9811,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) react: 18.3.1 @@ -9835,9 +9838,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@types/gtag.js': 0.0.12 @@ -9863,9 +9866,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) react: 18.3.1 @@ -9890,9 +9893,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -9922,20 +9925,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.0.2)(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3)(typescript@5.5.4)': - dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.0.2)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3)(typescript@5.5.4) + '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.1.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': + dependencies: + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.1.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -9966,21 +9969,21 @@ snapshots: '@types/react': 18.3.3 react: 18.3.1 - '@docusaurus/theme-classic@3.5.2(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/theme-classic@3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-translations': 3.5.2 '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) - '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.4)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 infima: 0.2.0-alpha.44 @@ -10014,11 +10017,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@types/history': 4.7.11 @@ -10040,13 +10043,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.0.2)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(@types/react@18.3.3)(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3)(typescript@5.5.4)': + '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.1.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@5.0.2)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.16.3) - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docsearch/react': 3.6.0(@algolia/client-search@5.1.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1))(eslint@9.9.0(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-translations': 3.5.2 '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -10180,16 +10183,16 @@ snapshots: dependencies: tslib: 2.6.3 - '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0(jiti@1.21.6))': + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.6))': dependencies: - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} '@eslint/compat@1.1.1': {} - '@eslint/config-array@0.17.1': + '@eslint/config-array@0.18.0': dependencies: '@eslint/object-schema': 2.1.4 debug: 4.3.6 @@ -10211,7 +10214,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.9.0': {} + '@eslint/js@9.9.1': {} '@eslint/object-schema@2.1.4': {} @@ -10253,7 +10256,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -10322,7 +10325,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.1) + '@nx/devkit': 19.6.1(nx@19.6.2) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -10361,7 +10364,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.1 + nx: 19.6.2 p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -10498,10 +10501,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.3)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.3 + '@types/react': 18.3.4 react: 18.3.1 '@napi-rs/wasm-runtime@0.2.4': @@ -10794,9 +10797,9 @@ snapshots: tmp: 0.2.3 tslib: 2.6.3 - '@nrwl/devkit@19.6.1(nx@19.6.1)': + '@nrwl/devkit@19.6.1(nx@19.6.2)': dependencies: - '@nx/devkit': 19.6.1(nx@19.6.1) + '@nx/devkit': 19.6.1(nx@19.6.2) transitivePeerDependencies: - nx @@ -10835,56 +10838,56 @@ snapshots: - '@swc/core' - debug - '@nrwl/tao@19.6.1': + '@nrwl/tao@19.6.2': dependencies: - nx: 19.6.1 + nx: 19.6.2 tslib: 2.6.3 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug - '@nx/devkit@19.6.1(nx@19.6.1)': + '@nx/devkit@19.6.1(nx@19.6.2)': dependencies: - '@nrwl/devkit': 19.6.1(nx@19.6.1) + '@nrwl/devkit': 19.6.1(nx@19.6.2) ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 19.6.1 + nx: 19.6.2 semver: 7.6.3 tmp: 0.2.3 tslib: 2.6.3 yargs-parser: 21.1.1 - '@nx/nx-darwin-arm64@19.6.1': + '@nx/nx-darwin-arm64@19.6.2': optional: true - '@nx/nx-darwin-x64@19.6.1': + '@nx/nx-darwin-x64@19.6.2': optional: true - '@nx/nx-freebsd-x64@19.6.1': + '@nx/nx-freebsd-x64@19.6.2': optional: true - '@nx/nx-linux-arm-gnueabihf@19.6.1': + '@nx/nx-linux-arm-gnueabihf@19.6.2': optional: true - '@nx/nx-linux-arm64-gnu@19.6.1': + '@nx/nx-linux-arm64-gnu@19.6.2': optional: true - '@nx/nx-linux-arm64-musl@19.6.1': + '@nx/nx-linux-arm64-musl@19.6.2': optional: true - '@nx/nx-linux-x64-gnu@19.6.1': + '@nx/nx-linux-x64-gnu@19.6.2': optional: true - '@nx/nx-linux-x64-musl@19.6.1': + '@nx/nx-linux-x64-musl@19.6.2': optional: true - '@nx/nx-win32-arm64-msvc@19.6.1': + '@nx/nx-win32-arm64-msvc@19.6.2': optional: true - '@nx/nx-win32-x64-msvc@19.6.1': + '@nx/nx-win32-x64-msvc@19.6.2': optional: true '@octokit/auth-token@3.0.4': {} @@ -11178,20 +11181,20 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 - '@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.0(jiti@1.21.6))': + '@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.1(jiti@1.21.6))': dependencies: '@types/eslint': 9.6.0 acorn: 8.12.1 - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) eslint-visitor-keys: 4.0.0 espree: 10.1.0 - '@stylistic/eslint-plugin-ts@2.6.4(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + '@stylistic/eslint-plugin-ts@2.6.4(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.0(jiti@1.21.6)) + '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.1(jiti@1.21.6)) '@types/eslint': 9.6.0 - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) - eslint: 9.9.0(jiti@1.21.6) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript @@ -11334,24 +11337,24 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.3 - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/connect@3.4.38': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/debug@4.1.12': dependencies: @@ -11375,7 +11378,7 @@ snapshots: '@types/express-serve-static-core@4.19.3': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -11403,7 +11406,7 @@ snapshots: '@types/http-proxy@1.17.14': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -11439,11 +11442,11 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/node@17.0.45': {} - '@types/node@22.4.1': + '@types/node@22.5.0': dependencies: undici-types: 6.19.8 @@ -11481,6 +11484,11 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/react@18.3.4': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + '@types/retry@0.12.0': {} '@types/sax@1.2.7': @@ -11490,7 +11498,7 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/serve-index@1.9.4': dependencies: @@ -11499,12 +11507,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/unist@2.0.10': {} @@ -11516,7 +11524,7 @@ snapshots: '@types/ws@8.5.10': dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 '@types/yargs-parser@21.0.3': {} @@ -11524,15 +11532,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.2.0 - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -11542,14 +11550,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 8.2.0 '@typescript-eslint/types': 8.2.0 '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 8.2.0 debug: 4.3.6 - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -11560,10 +11568,10 @@ snapshots: '@typescript-eslint/types': 8.2.0 '@typescript-eslint/visitor-keys': 8.2.0 - '@typescript-eslint/type-utils@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/type-utils@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) debug: 4.3.6 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: @@ -11589,13 +11597,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/utils@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) '@typescript-eslint/scope-manager': 8.2.0 '@typescript-eslint/types': 8.2.0 '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript @@ -12471,9 +12479,9 @@ snapshots: commander@8.3.0: {} - commitlint@19.4.0(@types/node@22.4.1)(typescript@5.5.4): + commitlint@19.4.0(@types/node@22.5.0)(typescript@5.5.4): dependencies: - '@commitlint/cli': 19.4.0(@types/node@22.4.1)(typescript@5.5.4) + '@commitlint/cli': 19.4.0(@types/node@22.5.0)(typescript@5.5.4) '@commitlint/types': 19.0.3 transitivePeerDependencies: - '@types/node' @@ -12697,9 +12705,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.4.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.5.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 typescript: 5.5.4 @@ -13331,13 +13339,13 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-google@0.14.0(eslint@9.9.0(jiti@1.21.6)): + eslint-config-google@0.14.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) - eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)): + eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)): dependencies: - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node@0.3.9: dependencies: @@ -13347,13 +13355,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 4.3.5 enhanced-resolve: 5.17.0 - eslint: 9.9.0(jiti@1.21.6) - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.0(jiti@1.21.6)) + eslint: 9.9.1(jiti@1.21.6) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)) fast-glob: 3.3.2 get-tsconfig: 4.7.5 is-core-module: 2.13.1 @@ -13364,18 +13372,18 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6)): + eslint-module-utils@2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) - eslint: 9.9.0(jiti@1.21.6) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.0(jiti@1.21.6)): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.3 @@ -13383,9 +13391,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -13396,23 +13404,23 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3): dependencies: - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: '@types/eslint': 9.6.0 - eslint-config-prettier: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + eslint-config-prettier: 9.1.0(eslint@9.9.1(jiti@1.21.6)) - eslint-plugin-react@7.35.0(eslint@9.9.0(jiti@1.21.6)): + eslint-plugin-react@7.35.0(eslint@9.9.1(jiti@1.21.6)): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -13420,7 +13428,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.0.19 - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -13448,13 +13456,13 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.9.0(jiti@1.21.6): + eslint@9.9.1(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) '@eslint-community/regexpp': 4.11.0 - '@eslint/config-array': 0.17.1 + '@eslint/config-array': 0.18.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.9.0 + '@eslint/js': 9.9.1 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 @@ -13550,7 +13558,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 require-like: 0.1.2 eventemitter3@4.0.7: {} @@ -13794,7 +13802,7 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -13812,7 +13820,7 @@ snapshots: typescript: 5.5.4 webpack: 5.92.0 optionalDependencies: - eslint: 9.9.0(jiti@1.21.6) + eslint: 9.9.1(jiti@1.21.6) form-data-encoder@2.1.4: {} @@ -14485,7 +14493,7 @@ snapshots: dependencies: ms: 2.1.3 - husky@9.1.4: {} + husky@9.1.5: {} iconv-lite@0.4.24: dependencies: @@ -14936,7 +14944,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.4.1 + '@types/node': 22.5.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -14944,13 +14952,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.4.1 + '@types/node': 22.5.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -15177,7 +15185,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.1) + '@nx/devkit': 19.6.1(nx@19.6.2) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -15222,7 +15230,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.1 + nx: 19.6.2 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -16741,10 +16749,10 @@ snapshots: transitivePeerDependencies: - debug - nx@19.6.1: + nx@19.6.2: dependencies: '@napi-rs/wasm-runtime': 0.2.4 - '@nrwl/tao': 19.6.1 + '@nrwl/tao': 19.6.2 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 @@ -16779,16 +16787,16 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 19.6.1 - '@nx/nx-darwin-x64': 19.6.1 - '@nx/nx-freebsd-x64': 19.6.1 - '@nx/nx-linux-arm-gnueabihf': 19.6.1 - '@nx/nx-linux-arm64-gnu': 19.6.1 - '@nx/nx-linux-arm64-musl': 19.6.1 - '@nx/nx-linux-x64-gnu': 19.6.1 - '@nx/nx-linux-x64-musl': 19.6.1 - '@nx/nx-win32-arm64-msvc': 19.6.1 - '@nx/nx-win32-x64-msvc': 19.6.1 + '@nx/nx-darwin-arm64': 19.6.2 + '@nx/nx-darwin-x64': 19.6.2 + '@nx/nx-freebsd-x64': 19.6.2 + '@nx/nx-linux-arm-gnueabihf': 19.6.2 + '@nx/nx-linux-arm64-gnu': 19.6.2 + '@nx/nx-linux-arm64-musl': 19.6.2 + '@nx/nx-linux-x64-gnu': 19.6.2 + '@nx/nx-linux-x64-musl': 19.6.2 + '@nx/nx-win32-arm64-msvc': 19.6.2 + '@nx/nx-win32-x64-msvc': 19.6.2 transitivePeerDependencies: - debug @@ -17596,7 +17604,7 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0): + react-dev-utils@12.0.1(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0): dependencies: '@babel/code-frame': 7.24.7 address: 1.2.2 @@ -17607,7 +17615,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)(webpack@5.92.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -18124,7 +18132,7 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - search-insights@2.16.3: {} + search-insights@2.17.0: {} section-matter@1.0.0: dependencies: @@ -18748,14 +18756,14 @@ snapshots: dependencies: typescript: 5.5.4 - ts-node@10.9.2(@types/node@22.4.1)(typescript@5.5.4): + ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.4.1 + '@types/node': 22.5.0 acorn: 8.12.0 acorn-walk: 8.3.3 arg: 4.1.3 @@ -18860,11 +18868,11 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4): + typescript-eslint@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: From 3229ff4be2165c94ab0a4a46a16f65387f679ea4 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 25 Aug 2024 10:44:53 +0300 Subject: [PATCH 02/25] fix(java): :bug: fixed failing test cases --- .../actions/drivers/DriverActions.java | 25 ++++++ .../interfaces/drivers/IDriverActions.java | 19 ++++ .../drivers/IDriverActionsListener.java | 18 ++++ .../github/boykaframework/enums/Message.java | 8 +- .../manager/WebDriverManager.java | 14 +-- .../testng/api/others/ApiTests.java | 8 +- .../testng/api/postman/ApiPostmanTest.java | 10 +-- .../api/restful/DataDrivenBookingTest.java | 9 +- .../restful/RestfulBookerEndToEndTests.java | 47 +++++----- .../api/restful/data/BookingRequestData.java | 4 +- .../api/restful/requests/BookingRequest.java | 23 ++--- .../testng/api/ssl/ApiSecurityTest.java | 8 +- .../testng/listeners/TestResultListener.java | 53 +++++------ .../testng/others/DriverManagerTest.java | 11 ++- .../testng/others/ErrorHandlingTest.java | 4 +- .../testng/others/NavigationTest.java | 5 +- .../testng/others/SessionTest.java | 10 +-- .../testng/ui/jiomeet/JioMeetTest.java | 11 +-- .../testng/ui/saucedemo/SauceDemoTest.java | 5 +- .../testng/ui/theinternet/AlertsTest.java | 16 ++-- .../testng/ui/theinternet/CheckboxTest.java | 5 +- .../testng/ui/theinternet/CookiesTest.java | 33 +++---- .../ui/theinternet/DoubleClickTest.java | 10 +-- .../testng/ui/theinternet/DragDropTest.java | 5 +- .../testng/ui/theinternet/DropDownTest.java | 88 +++++++------------ .../testng/ui/theinternet/FramesTest.java | 5 +- .../testng/ui/theinternet/LoginTest.java | 26 +++--- .../testng/ui/theinternet/WindowTest.java | 58 +++++------- .../testng/ui/wdio/WdioDemoTest.java | 5 +- 29 files changed, 263 insertions(+), 280 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/actions/drivers/DriverActions.java b/core-java/src/main/java/io/github/boykaframework/actions/drivers/DriverActions.java index 6513c2b48..8823b586a 100644 --- a/core-java/src/main/java/io/github/boykaframework/actions/drivers/DriverActions.java +++ b/core-java/src/main/java/io/github/boykaframework/actions/drivers/DriverActions.java @@ -16,6 +16,7 @@ package io.github.boykaframework.actions.drivers; +import static com.google.common.truth.Truth.assertWithMessage; import static io.github.boykaframework.actions.CommonActions.getDriverAttribute; import static io.github.boykaframework.actions.CommonActions.performDriverAction; import static io.github.boykaframework.enums.ListenerType.DRIVER_ACTION; @@ -33,6 +34,7 @@ import static java.text.MessageFormat.format; import static java.util.Objects.isNull; import static java.util.Optional.ofNullable; +import static org.apache.commons.lang3.StringUtils.EMPTY; import static org.apache.logging.log4j.LogManager.getLogger; import java.io.BufferedWriter; @@ -41,6 +43,7 @@ import java.time.Duration; import java.util.function.Function; +import com.google.common.truth.StringSubject; import io.github.boykaframework.actions.interfaces.drivers.IDriverActions; import io.github.boykaframework.actions.interfaces.listeners.drivers.IDriverActionsListener; import org.apache.logging.log4j.Logger; @@ -48,6 +51,7 @@ import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.remote.RemoteWebDriver; /** * Device / Browser specific actions. @@ -74,6 +78,14 @@ private DriverActions () { this.listener = getSession ().getListener (DRIVER_ACTION); } + @Override + public String capability (final String name) { + LOGGER.traceEntry (); + LOGGER.info ("Getting the capability of [{}]...", name); + ofNullable (this.listener).ifPresent (l -> l.onCapability (name)); + return LOGGER.traceExit (getCapability (name)); + } + @Override @SuppressWarnings ("unchecked") public T executeScript (final String script, final Object... args) { @@ -138,6 +150,14 @@ public void saveLogs () { LOGGER.traceExit (); } + @Override + public StringSubject verifyCapability (final String capabilityName) { + LOGGER.traceEntry (); + LOGGER.info ("Verifying the capability of [{}]...", capabilityName); + ofNullable (this.listener).ifPresent (l -> l.onCapability (capabilityName)); + return assertWithMessage (capabilityName).that (getCapability (capabilityName)); + } + @Override public void waitUntil (final Function condition) { LOGGER.traceEntry (); @@ -149,6 +169,11 @@ public void waitUntil (final Function condition) { }); } + private String getCapability (final String name) { + return getDriverAttribute (d -> ((RemoteWebDriver) d).getCapabilities () + .getCapability (name), EMPTY).toString (); + } + private void saveLogType (final D driver, final String logType, final String logPath) { final var logEntries = driver.manage () .logs () diff --git a/core-java/src/main/java/io/github/boykaframework/actions/interfaces/drivers/IDriverActions.java b/core-java/src/main/java/io/github/boykaframework/actions/interfaces/drivers/IDriverActions.java index 86404faf0..73f505426 100644 --- a/core-java/src/main/java/io/github/boykaframework/actions/interfaces/drivers/IDriverActions.java +++ b/core-java/src/main/java/io/github/boykaframework/actions/interfaces/drivers/IDriverActions.java @@ -19,6 +19,7 @@ import java.time.Duration; import java.util.function.Function; +import com.google.common.truth.StringSubject; import org.openqa.selenium.WebDriver; /** @@ -28,6 +29,15 @@ * @since 16-Feb-2023 */ public interface IDriverActions { + /** + * Get Current sessions capability based on the name. + * + * @param name Name of capability + * + * @return value of the capability + */ + String capability (String name); + /** * Executes javascript in browser. * @@ -51,6 +61,15 @@ public interface IDriverActions { */ void saveLogs (); + /** + * Verify the current sessions capability based on its name + * + * @param capabilityName Name of capability to verify + * + * @return String subject to verify the capability value + */ + StringSubject verifyCapability (String capabilityName); + /** * Wait for a specific condition to be true. * diff --git a/core-java/src/main/java/io/github/boykaframework/actions/interfaces/listeners/drivers/IDriverActionsListener.java b/core-java/src/main/java/io/github/boykaframework/actions/interfaces/listeners/drivers/IDriverActionsListener.java index 694a60e75..62916f595 100644 --- a/core-java/src/main/java/io/github/boykaframework/actions/interfaces/listeners/drivers/IDriverActionsListener.java +++ b/core-java/src/main/java/io/github/boykaframework/actions/interfaces/listeners/drivers/IDriverActionsListener.java @@ -27,6 +27,15 @@ * @since 09-Apr-2023 */ public interface IDriverActionsListener extends BoykaListener { + /** + * Handles get capability method + * + * @param capability Name of capability + */ + default void onCapability (final String capability) { + // not implemented. + } + /** * Handle execute script method. * @@ -53,6 +62,15 @@ default void onSaveLogs () { // not implemented. } + /** + * Handles verify capability method. + * + * @param capability Name of capability + */ + default void onVerifyCapability (final String capability) { + // not implemented. + } + /** * Handle wait until method. */ diff --git a/core-java/src/main/java/io/github/boykaframework/enums/Message.java b/core-java/src/main/java/io/github/boykaframework/enums/Message.java index 744ec73bc..fe9932a58 100644 --- a/core-java/src/main/java/io/github/boykaframework/enums/Message.java +++ b/core-java/src/main/java/io/github/boykaframework/enums/Message.java @@ -218,6 +218,10 @@ public enum Message { * Swipe distance Error. */ INVALID_SWIPE_DISTANCE ("Swipe Distance should be greater than 0% and less than 100%..."), + /** + * Invalid target for remote session. + */ + INVALID_TARGET ("Invalid target ({0}) for Remote session..."), /** * Malformed JSON syntax error. */ @@ -254,10 +258,6 @@ public enum Message { * Path should be a folder / directory. */ PATH_NOT_DIRECTORY ("Path [{0}] is not a folder. Only folder path should be provided..."), - /** - * Protocol is required for host name - */ - PROTOCOL_REQUIRED_FOR_HOST ("Protocol is required for host ({0})..."), /** * Schema validation assert failure */ diff --git a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java index 5d7070533..d2753cd4b 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java @@ -22,10 +22,10 @@ import static io.github.boykaframework.enums.Message.HOSTNAME_REQUIRED_FOR_REMOTE; import static io.github.boykaframework.enums.Message.INVALID_BROWSER; import static io.github.boykaframework.enums.Message.INVALID_REMOTE_URL; +import static io.github.boykaframework.enums.Message.INVALID_TARGET; import static io.github.boykaframework.enums.Message.NULL_REMOTE_URL; import static io.github.boykaframework.enums.Message.PAGE_LOAD_STRATEGY_MISSING; import static io.github.boykaframework.enums.Message.PASSWORD_REQUIRED_FOR_CLOUD; -import static io.github.boykaframework.enums.Message.PROTOCOL_REQUIRED_FOR_HOST; import static io.github.boykaframework.enums.Message.SESSION_NOT_STARTED; import static io.github.boykaframework.enums.Message.USER_NAME_REQUIRED_FOR_CLOUD; import static io.github.boykaframework.enums.TargetProviders.LOCAL; @@ -155,16 +155,18 @@ private URL getRemoteUrl (final WebSetting webSetting) { final var URL_PATTERN = "{0}://{1}"; final var target = webSetting.getTarget (); final var hostName = new StringBuilder (getHostName (webSetting, target)); + + if (target == LOCAL) { + throwError (INVALID_TARGET, target); + } + if (webSetting.getPort () != 0) { hostName.append (":") .append (webSetting.getPort ()); } - if (target != LOCAL) { - hostName.append ("/wd/hub"); - } + hostName.append ("/wd/hub"); final var url = format (URL_PATTERN, - requireNonNull (requireNonNullElse (webSetting.getProtocol (), target.getProtocol ()), - PROTOCOL_REQUIRED_FOR_HOST, hostName).name () + requireNonNullElse (webSetting.getProtocol (), target.getProtocol ()).name () .toLowerCase (), hostName); try { return LOGGER.traceExit (new URL (url)); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/others/ApiTests.java b/core-java/src/test/java/io/github/boykaframework/testng/api/others/ApiTests.java index 9ac918beb..1a1572fcf 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/others/ApiTests.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/others/ApiTests.java @@ -20,14 +20,14 @@ import static io.github.boykaframework.builders.ApiRequest.createRequest; import static io.github.boykaframework.enums.PlatformType.API; import static io.github.boykaframework.enums.RequestMethod.GET; +import static io.github.boykaframework.enums.RequestMethod.POST; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; +import static io.github.boykaframework.testng.api.restful.data.BookingRequestData.getBookingData; import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.createBooking; import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.getBooking; -import io.github.boykaframework.enums.RequestMethod; import io.github.boykaframework.exception.FrameworkError; -import io.github.boykaframework.testng.api.restful.data.BookingRequestData; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; @@ -69,11 +69,11 @@ public void testInvalidApiConfigKey () { @Test public void testNullHeader () { createSession (API, "test_restfulbooker"); - final var request = createRequest ().method (RequestMethod.POST) + final var request = createRequest ().method (POST) .header ("Accept", "application/json") .header ("Content-Type", null) .path ("/booking") - .bodyObject (createBooking (BookingRequestData.getBookingData ())) + .bodyObject (createBooking (getBookingData ())) .create (); final var response = withRequest (request).execute (); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/postman/ApiPostmanTest.java b/core-java/src/test/java/io/github/boykaframework/testng/api/postman/ApiPostmanTest.java index 22a811d64..222c3e781 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/postman/ApiPostmanTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/postman/ApiPostmanTest.java @@ -16,14 +16,14 @@ package io.github.boykaframework.testng.api.postman; +import static io.github.boykaframework.actions.api.ApiActions.withRequest; +import static io.github.boykaframework.builders.ApiRequest.createRequest; import static io.github.boykaframework.enums.ContentType.FORM_URLENCODED; import static io.github.boykaframework.enums.PlatformType.API; import static io.github.boykaframework.enums.RequestMethod.POST; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; -import io.github.boykaframework.actions.api.ApiActions; -import io.github.boykaframework.builders.ApiRequest; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -56,16 +56,14 @@ public void tearDownTestClass () { */ @Test (description = "Test Form body POST request") public void testFormBodyRequest () { - final var request = ApiRequest.createRequest () - .contentType (FORM_URLENCODED) + final var request = createRequest ().contentType (FORM_URLENCODED) .formBody ("strange", "boom") .formBody ("test", "abc") .method (POST) .path ("/post") .create (); - final var response = ApiActions.withRequest (request) - .execute (); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/DataDrivenBookingTest.java b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/DataDrivenBookingTest.java index f4a450c2f..5a782d4a6 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/DataDrivenBookingTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/DataDrivenBookingTest.java @@ -16,15 +16,15 @@ package io.github.boykaframework.testng.api.restful; +import static io.github.boykaframework.actions.api.ApiActions.withRequest; +import static io.github.boykaframework.enums.PlatformType.API; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import java.text.DecimalFormat; -import io.github.boykaframework.actions.api.ApiActions; import io.github.boykaframework.actions.interfaces.data.IDataRow; import io.github.boykaframework.builders.ApiRequest; -import io.github.boykaframework.enums.PlatformType; import io.github.boykaframework.enums.RequestMethod; import io.github.boykaframework.testng.api.restful.data.BookingDataProviders; import io.github.boykaframework.testng.api.restful.pojo.BookingData; @@ -44,7 +44,7 @@ public class DataDrivenBookingTest { @BeforeClass public void setupClass () { - createSession (PlatformType.API, "test_restfulbooker"); + createSession (API, "test_restfulbooker"); } @AfterClass @@ -106,8 +106,7 @@ private void testBooking (final BookingData bookingData) { .bodyObject (bookingData) .create (); - final var response = ApiActions.withRequest (request) - .execute (); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/RestfulBookerEndToEndTests.java b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/RestfulBookerEndToEndTests.java index 371a41d51..f75403398 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/RestfulBookerEndToEndTests.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/RestfulBookerEndToEndTests.java @@ -16,16 +16,21 @@ package io.github.boykaframework.testng.api.restful; +import static io.github.boykaframework.actions.api.ApiActions.withRequest; import static io.github.boykaframework.enums.PlatformType.API; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.manager.ParallelSession.getSession; +import static io.github.boykaframework.testng.api.restful.data.BookingRequestData.getBookingData; +import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.createBooking; +import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.deleteBooking; +import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.getBooking; +import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.updateBooking; +import static io.github.boykaframework.testng.api.restful.requests.BookingRequest.updatePartialBooking; -import io.github.boykaframework.actions.api.ApiActions; import io.github.boykaframework.exception.FrameworkError; import io.github.boykaframework.testng.api.restful.data.BookingRequestData; import io.github.boykaframework.testng.api.restful.pojo.BookingData; -import io.github.boykaframework.testng.api.restful.requests.BookingRequest; import io.qameta.allure.Description; import io.qameta.allure.Epic; import io.qameta.allure.Feature; @@ -54,7 +59,7 @@ public class RestfulBookerEndToEndTests { @BeforeClass (description = "Setup test class") public void setupTestClass () { createSession (API, "test_restfulbooker"); - this.newBooking = BookingRequestData.getBookingData (); + this.newBooking = getBookingData (); } /** @@ -68,9 +73,8 @@ public void tearDownTestClass () { @Story ("Create Booking with POST request") @Test (description = "Test for creating new booking with POST request") public void testCreateBooking () { - final var request = BookingRequest.createBooking (this.newBooking); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = createBooking (this.newBooking); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); @@ -93,9 +97,8 @@ public void testCreateBooking () { @Story ("Delete Booking") @Test (description = "Test for Deleting a booking using DELETE request") public void testDeleteBooking () { - final var request = BookingRequest.deleteBooking (getSession ().getSharedData (BOOKING_ID)); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = deleteBooking (getSession ().getSharedData (BOOKING_ID)); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (201); } @@ -103,9 +106,8 @@ public void testDeleteBooking () { @Story ("Get deleted Booking") @Test (description = "Test for checking deleted booking using GET request") public void testDeletedBooking () { - final var request = BookingRequest.getBooking (getSession ().getSharedData (BOOKING_ID)); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = getBooking (getSession ().getSharedData (BOOKING_ID)); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (404); } @@ -113,9 +115,8 @@ public void testDeletedBooking () { @Story ("Get Created Booking") @Test (description = "Test for retrieving booking using GET request") public void testGetBooking () { - final var request = BookingRequest.getBooking (getSession ().getSharedData (BOOKING_ID)); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = getBooking (getSession ().getSharedData (BOOKING_ID)); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); @@ -128,9 +129,8 @@ public void testGetBooking () { @Story ("Json Validation Exception tests") @Test (description = "Tests for file not found exception", expectedExceptions = FrameworkError.class) public void testJsonSchemaFileException () { - final var request = BookingRequest.createBooking (this.newBooking); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = createBooking (this.newBooking); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); @@ -144,9 +144,8 @@ public void testJsonSchemaFileException () { public void testUpdateBooking () { final var updateBookingData = this.newBooking; - final var request = BookingRequest.updateBooking (getSession ().getSharedData (BOOKING_ID), updateBookingData); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = updateBooking (getSession ().getSharedData (BOOKING_ID), updateBookingData); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); response.verifyTextField ("firstname") @@ -160,10 +159,8 @@ public void testUpdateBooking () { public void testUpdatePartialBooking () { final var partialBookingData = BookingRequestData.getPartialBookingData (); - final var request = BookingRequest.updatePartialBooking (getSession ().getSharedData (BOOKING_ID), - partialBookingData); - final var response = ApiActions.withRequest (request) - .execute (); + final var request = updatePartialBooking (getSession ().getSharedData (BOOKING_ID), partialBookingData); + final var response = withRequest (request).execute (); response.verifyStatusCode () .isEqualTo (200); response.verifyTextField ("firstname") diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java index 2d37235b7..3c6881c6f 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java @@ -48,9 +48,9 @@ public static BookingData getBookingData () { .numberBetween (1, 2000)) .depositpaid (true) .bookingdates (BookingDates.builder () - .checkin (formatter.format (FAKER.date () + .checkin (formatter.format (FAKER.timeAndDate () .past (20, TimeUnit.DAYS))) - .checkout (formatter.format (FAKER.date () + .checkout (formatter.format (FAKER.timeAndDate () .future (5, TimeUnit.DAYS))) .build ()) .additionalneeds ("Breakfast") diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/requests/BookingRequest.java b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/requests/BookingRequest.java index 0e59c05f9..f93c60281 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/requests/BookingRequest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/requests/BookingRequest.java @@ -16,13 +16,17 @@ package io.github.boykaframework.testng.api.restful.requests; +import static io.github.boykaframework.actions.api.ApiActions.withRequest; import static io.github.boykaframework.builders.ApiRequest.createRequest; +import static io.github.boykaframework.enums.RequestMethod.DELETE; +import static io.github.boykaframework.enums.RequestMethod.GET; +import static io.github.boykaframework.enums.RequestMethod.PATCH; +import static io.github.boykaframework.enums.RequestMethod.POST; +import static io.github.boykaframework.enums.RequestMethod.PUT; import static io.github.boykaframework.testng.api.restful.data.AuthRequestData.getTokenData; import static java.text.MessageFormat.format; -import io.github.boykaframework.actions.api.ApiActions; import io.github.boykaframework.builders.ApiRequest; -import io.github.boykaframework.enums.RequestMethod; import io.github.boykaframework.testng.api.restful.pojo.BookingData; /** @@ -33,7 +37,7 @@ */ public final class BookingRequest { public static ApiRequest createBooking (final BookingData requestBody) { - return createRequest ().method (RequestMethod.POST) + return createRequest ().method (POST) .header ("Accept", "application/json") .path ("/booking") .bodyObject (requestBody) @@ -41,7 +45,7 @@ public static ApiRequest createBooking (final BookingData requestBody) { } public static ApiRequest deleteBooking (final String id) { - return createRequest ().method (RequestMethod.DELETE) + return createRequest ().method (DELETE) .header ("Content-Type", "application/json") .header ("Cookie", format ("token={0}", generateToken ())) .path ("/booking/${id}") @@ -50,7 +54,7 @@ public static ApiRequest deleteBooking (final String id) { } public static ApiRequest getBooking (final String id) { - return createRequest ().method (RequestMethod.GET) + return createRequest ().method (GET) .header ("Accept", "application/json") .path ("/booking/${id}") .pathParam ("id", id) @@ -58,7 +62,7 @@ public static ApiRequest getBooking (final String id) { } public static ApiRequest updateBooking (final String id, final BookingData requestBody) { - return createRequest ().method (RequestMethod.PUT) + return createRequest ().method (PUT) .header ("Accept", "application/json") .header ("Cookie", format ("token={0}", generateToken ())) .path ("/booking/${id}") @@ -68,7 +72,7 @@ public static ApiRequest updateBooking (final String id, final BookingData reque } public static ApiRequest updatePartialBooking (final String id, final BookingData requestBody) { - return createRequest ().method (RequestMethod.PATCH) + return createRequest ().method (PATCH) .header ("Accept", "application/json") .header ("Cookie", format ("token={0}", generateToken ())) .path ("/booking/${id}") @@ -79,13 +83,12 @@ public static ApiRequest updatePartialBooking (final String id, final BookingDat private static String generateToken () { final var generateTokenRequest = createRequest ().header ("Accept", "application/json") - .method (RequestMethod.POST) + .method (POST) .path ("/auth") .bodyObject (getTokenData ()) .create (); - final var response = ApiActions.withRequest (generateTokenRequest) - .execute (); + final var response = withRequest (generateTokenRequest).execute (); return response.getResponseData ("token"); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/ssl/ApiSecurityTest.java b/core-java/src/test/java/io/github/boykaframework/testng/api/ssl/ApiSecurityTest.java index 1f144faa8..6a63e259d 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/ssl/ApiSecurityTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/ssl/ApiSecurityTest.java @@ -17,12 +17,12 @@ package io.github.boykaframework.testng.api.ssl; import static io.github.boykaframework.actions.api.ApiActions.withRequest; +import static io.github.boykaframework.builders.ApiRequest.createRequest; import static io.github.boykaframework.enums.PlatformType.API; import static io.github.boykaframework.enums.RequestMethod.GET; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; -import io.github.boykaframework.builders.ApiRequest; import org.testng.annotations.Test; /** @@ -39,8 +39,7 @@ public class ApiSecurityTest { public void testBadHostName () { try { createSession (API, "test_bad_host_name_wo_verify_hn"); - final var request = ApiRequest.createRequest () - .method (GET) + final var request = createRequest ().method (GET) .create (); final var response = withRequest (request).execute (); @@ -58,8 +57,7 @@ public void testBadHostName () { public void testBadSsl () { try { createSession (API, "test_bad_ssl_wo_verify"); - final var request = ApiRequest.createRequest () - .method (GET) + final var request = createRequest ().method (GET) .create (); final var response = withRequest (request).execute (); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java index 97110475f..b903887f7 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java @@ -18,7 +18,6 @@ import static java.text.MessageFormat.format; import static java.util.stream.Collectors.joining; -import static java.util.stream.Collectors.toList; import static org.apache.logging.log4j.LogManager.getLogger; import static org.testng.ITestResult.FAILURE; @@ -72,7 +71,7 @@ private List generateReportRows (final String testName, final String sui final Set allTestResults) { return allTestResults.stream () .map (testResultToResultRow (testName, suiteName)) - .collect (toList ()); + .toList (); } private String initReportTemplate () { @@ -107,14 +106,16 @@ private Function, Stream> resu } private void saveReportTemplate (final String outputDirectory, final String reportTemplate) { - new File (outputDirectory).mkdirs (); - try ( - final var reportWriter = new PrintWriter ( - new BufferedWriter (new FileWriter (new File (outputDirectory, "my-report.md"))))) { - reportWriter.println (reportTemplate); - reportWriter.flush (); - } catch (final IOException e) { - LOGGER.error ("Problem saving template", e); + final var dirCreated = new File (outputDirectory).mkdirs (); + if (dirCreated) { + try ( + final var reportWriter = new PrintWriter ( + new BufferedWriter (new FileWriter (new File (outputDirectory, "my-report.md"))))) { + reportWriter.println (reportTemplate); + reportWriter.flush (); + } catch (final IOException e) { + LOGGER.error ("Problem saving template", e); + } } } @@ -131,27 +132,21 @@ private Function testResultToResultRow (final String testNa final var testClass = testResult.getTestClass () .getRealClass (); final var index = counter.getAndIncrement (); - switch (testResult.getStatus ()) { - case FAILURE: - return format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), - testClass.getSimpleName (), testResult.getName (), "❌", "NA", testResult.getThrowable () - .getMessage ()); - - case ITestResult.SUCCESS: - return format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), + return switch (testResult.getStatus ()) { + case FAILURE -> format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), + testClass.getSimpleName (), testResult.getName (), "❌", "NA", testResult.getThrowable () + .getMessage ()); + case ITestResult.SUCCESS -> + format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), testClass.getSimpleName (), testResult.getName (), "✅", String.valueOf (testResult.getEndMillis () - testResult.getStartMillis ()), StringUtils.EMPTY); - - case ITestResult.SKIP: - return format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), - testClass.getSimpleName (), testResult.getName (), "⛔", "NA", testResult.getSkipCausedBy () - .stream () - .map (ITestNGMethod::getMethodName) - .collect (joining ())); - - default: - return ""; - } + case ITestResult.SKIP -> format (ROW_TEMPLATE, index, suiteName, testName, testClass.getPackageName (), + testClass.getSimpleName (), testResult.getName (), "⛔", "NA", testResult.getSkipCausedBy () + .stream () + .map (ITestNGMethod::getMethodName) + .collect (joining ())); + default -> ""; + }; }; } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java b/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java index e1afd80c2..33135fe33 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java @@ -16,6 +16,7 @@ package io.github.boykaframework.testng.others; +import static io.github.boykaframework.actions.drivers.DriverActions.withDriver; import static io.github.boykaframework.enums.PlatformType.WEB; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; @@ -35,10 +36,12 @@ public class DriverManagerTest { /** * Test method to verify empty browser in config. */ - @Test (description = "Test Web empty browser in config", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Browser type cannot be empty in the config...") + @Test (description = "Test Web empty browser in config") public void testEmptyBrowserInConfig () { try { createSession (PERSONA, WEB, "test_local_empty_browser"); + withDriver ().verifyCapability ("browserName") + .isEqualTo ("chrome"); } finally { clearSession (); } @@ -71,10 +74,12 @@ public void testNoneBrowser () { /** * Test method to verify empty browser in config. */ - @Test (description = "Test Web null browser in config", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "NONE Browser type is not allowed for Web platform...") + @Test (description = "Test Web null browser in config") public void testNullBrowserInConfig () { try { createSession (PERSONA, WEB, "test_local_null_browser"); + withDriver ().verifyCapability ("browserName") + .isEqualTo ("chrome"); } finally { clearSession (); } @@ -83,7 +88,7 @@ public void testNullBrowserInConfig () { /** * Test method to verify null cloud Host. */ - @Test (description = "Test Null cloud Host", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Host name is required for remote driver execution...") + @Test (description = "Test Null cloud Host", expectedExceptions = FrameworkError.class) public void testNullCloudHost () { try { createSession (PERSONA, WEB, "test_lambda_test_no_host"); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/others/ErrorHandlingTest.java b/core-java/src/test/java/io/github/boykaframework/testng/others/ErrorHandlingTest.java index 0841d77c4..3a94f8a4e 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/others/ErrorHandlingTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/others/ErrorHandlingTest.java @@ -17,11 +17,11 @@ package io.github.boykaframework.testng.others; import static io.github.boykaframework.enums.Message.TEST_ERROR; +import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; import java.io.IOException; import io.github.boykaframework.exception.FrameworkError; -import io.github.boykaframework.utils.ErrorHandler; import org.testng.annotations.Test; /** @@ -36,6 +36,6 @@ public class ErrorHandlingTest { */ @Test (expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Test error...") public void testFrameworkError () { - ErrorHandler.handleAndThrow (TEST_ERROR, new IOException ("File not found")); + handleAndThrow (TEST_ERROR, new IOException ("File not found")); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/others/NavigationTest.java b/core-java/src/test/java/io/github/boykaframework/testng/others/NavigationTest.java index 1d70c1360..c2716ec04 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/others/NavigationTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/others/NavigationTest.java @@ -16,10 +16,10 @@ package io.github.boykaframework.testng.others; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.enums.PlatformType; import io.github.boykaframework.exception.FrameworkError; import org.testng.annotations.AfterClass; @@ -54,7 +54,6 @@ public void teardownClass () { */ @Test (description = "Test Empty base URL in config", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Base URL is not provided in the config...") public void testEmptyBrowserInConfig () { - NavigateActions.navigate () - .toBaseUrl (); + navigate ().toBaseUrl (); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/others/SessionTest.java b/core-java/src/test/java/io/github/boykaframework/testng/others/SessionTest.java index 6c0ca5f1c..4addbbbb1 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/others/SessionTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/others/SessionTest.java @@ -16,11 +16,11 @@ package io.github.boykaframework.testng.others; +import static io.github.boykaframework.enums.PlatformType.WEB; import static io.github.boykaframework.manager.ParallelSession.clearAllSessions; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; -import io.github.boykaframework.enums.PlatformType; import io.github.boykaframework.exception.FrameworkError; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; @@ -47,7 +47,7 @@ public void teardownMethod () { */ @Test (description = "Test duplicate clear session", expectedExceptions = FrameworkError.class) public void testDuplicateClearSession () { - createSession (PERSONA, PlatformType.WEB, "test_local_chrome"); + createSession (PERSONA, WEB, "test_local_chrome"); clearSession (); clearSession (); } @@ -57,8 +57,8 @@ public void testDuplicateClearSession () { */ @Test (description = "Test Duplicate Session creation", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Session is already created for .SessionTest. persona...") public void testDuplicateSessionCreation () { - createSession (PERSONA, PlatformType.WEB, "test_local_chrome"); - createSession (PERSONA, PlatformType.WEB, "test_local_chrome"); + createSession (PERSONA, WEB, "test_local_chrome"); + createSession (PERSONA, WEB, "test_local_chrome"); clearSession (); } @@ -67,6 +67,6 @@ public void testDuplicateSessionCreation () { */ @Test (description = "Test session creation with Null persona", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Session Persona cannot be empty or null...") public void testSessionCreationWithNullPersona () { - createSession (null, PlatformType.WEB, "test_local_chrome"); + createSession (null, WEB, "test_local_chrome"); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/jiomeet/JioMeetTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/jiomeet/JioMeetTest.java index 60d688c16..8e438eee0 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/jiomeet/JioMeetTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/jiomeet/JioMeetTest.java @@ -20,6 +20,7 @@ import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; +import static io.github.boykaframework.actions.elements.TextBoxActions.onTextBox; import static io.github.boykaframework.manager.ParallelSession.clearAllSessions; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.manager.ParallelSession.getSession; @@ -32,7 +33,6 @@ import static org.openqa.selenium.support.ui.ExpectedConditions.invisibilityOfElementLocated; import io.github.boykaframework.actions.drivers.WindowActions; -import io.github.boykaframework.actions.elements.TextBoxActions; import io.github.boykaframework.enums.PlatformType; import org.testng.ITestResult; import org.testng.annotations.AfterClass; @@ -96,8 +96,7 @@ public void testGuestStartMeeting () { switchPersona (GUEST_PERSONA); navigate ().to (meetingUrl); - TextBoxActions.onTextBox (guestJoinPage ().getGuestName ()) - .enterText (GUEST_PERSONA); + onTextBox (guestJoinPage ().getGuestName ()).enterText (GUEST_PERSONA); withMouse (guestJoinPage ().getJoinButton ()).click (); withDriver ().waitUntil (invisibilityOfElementLocated (homePage ().getLoader () @@ -118,11 +117,9 @@ public void testHostSignIn () { navigate ().to ("https://jiomeetpro.jio.com/home"); withMouse (homePage ().getSignIn ()).click (); - TextBoxActions.onTextBox (signInPage ().getEmail ()) - .enterText ("test-user1@mailinator.com"); + onTextBox (signInPage ().getEmail ()).enterText ("test-user1@mailinator.com"); withMouse (signInPage ().getProceedButton ()).click (); - TextBoxActions.onTextBox (signInPage ().getPassword ()) - .enterText ("Admin@1234"); + onTextBox (signInPage ().getPassword ()).enterText ("Admin@1234"); withMouse (signInPage ().getSignInButton ()).click (); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/saucedemo/SauceDemoTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/saucedemo/SauceDemoTest.java index 99c5ec314..3f0d18d03 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/saucedemo/SauceDemoTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/saucedemo/SauceDemoTest.java @@ -17,13 +17,13 @@ package io.github.boykaframework.testng.ui.saucedemo; import static io.github.boykaframework.actions.device.DeviceActions.onDevice; +import static io.github.boykaframework.actions.drivers.ContextActions.withContext; import static io.github.boykaframework.actions.drivers.DriverActions.withDriver; import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static java.text.MessageFormat.format; -import io.github.boykaframework.actions.drivers.ContextActions; import io.github.boykaframework.enums.PlatformType; import io.github.boykaframework.exception.FrameworkError; import io.github.boykaframework.testng.ui.saucedemo.actions.SauceDemoActions; @@ -106,8 +106,7 @@ public void testCheckoutStep2 () { */ @Test (description = "Test context switching in Native app", dependsOnMethods = "testSignOut", expectedExceptions = FrameworkError.class) public void testContextSwitching () { - ContextActions.withContext () - .switchToWebView ("WEBVIEW"); + withContext ().switchToWebView ("WEBVIEW"); } /** diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/AlertsTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/AlertsTest.java index d1f9ddf26..ce52f0aac 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/AlertsTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/AlertsTest.java @@ -17,6 +17,8 @@ package io.github.boykaframework.testng.ui.theinternet; import static io.github.boykaframework.actions.drivers.AlertActions.onAlert; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; @@ -24,8 +26,6 @@ import static io.github.boykaframework.testng.ui.theinternet.pages.AlertPage.alertPage; import static io.github.boykaframework.testng.ui.theinternet.pages.HomePage.homePage; -import io.github.boykaframework.actions.drivers.NavigateActions; -import io.github.boykaframework.actions.drivers.WindowActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -51,10 +51,8 @@ public class AlertsTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("AlertsTest", platformType, driverKey); - WindowActions.onWindow () - .fullScreen (); - NavigateActions.navigate () - .to (URL); + onWindow ().fullScreen (); + navigate ().to (URL); withMouse (homePage ().link ("JavaScript Alerts")).click (); } @@ -63,10 +61,8 @@ public void setupClass (final PlatformType platformType, final String driverKey) */ @AfterClass (description = "Tear down test class") public void tearDownClass () { - NavigateActions.navigate () - .back (); - NavigateActions.navigate () - .verifyUrl () + navigate ().back (); + navigate ().verifyUrl () .isEqualTo (URL); clearSession (); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CheckboxTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CheckboxTest.java index e744463a3..047709e07 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CheckboxTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CheckboxTest.java @@ -16,13 +16,13 @@ package io.github.boykaframework.testng.ui.theinternet; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.CheckboxPage.checkboxPage; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -42,8 +42,7 @@ public class CheckboxTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("CheckboxTest", platformType, driverKey); - NavigateActions.navigate () - .to (URL); + navigate ().to (URL); } /** diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CookiesTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CookiesTest.java index 8b7c96b0a..93b5678c8 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CookiesTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/CookiesTest.java @@ -17,14 +17,14 @@ package io.github.boykaframework.testng.ui.theinternet; import static com.google.common.truth.Truth.assertWithMessage; +import static io.github.boykaframework.actions.drivers.CookieActions.withCookies; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.HomePage.homePage; -import io.github.boykaframework.actions.drivers.CookieActions; -import io.github.boykaframework.actions.drivers.NavigateActions; -import io.github.boykaframework.actions.drivers.WindowActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -50,10 +50,8 @@ public class CookiesTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("CookiesTest", platformType, driverKey); - WindowActions.onWindow () - .minimize (); - NavigateActions.navigate () - .to (URL); + onWindow ().minimize (); + navigate ().to (URL); withMouse (homePage ().link ("JavaScript Alerts")).click (); } @@ -70,10 +68,8 @@ public void tearDownClass () { */ @Test (description = "Verify delete all cookies", priority = 3) public void testDeleteAllCookies () { - CookieActions.withCookies () - .deleteAll (); - assertWithMessage ("Cookie size").that (CookieActions.withCookies () - .cookies () + withCookies ().deleteAll (); + assertWithMessage ("Cookie size").that (withCookies ().cookies () .size ()) .isEqualTo (0); } @@ -83,13 +79,10 @@ public void testDeleteAllCookies () { */ @Test (description = "Tests delete of single cookie", priority = 2) public void testDeleteSingleCookie () { - final var cookies = CookieActions.withCookies () - .cookies (); + final var cookies = withCookies ().cookies (); final var cookieCount = cookies.size (); - CookieActions.withCookies () - .delete (cookies.get (0)); - assertWithMessage ("Cookie Size").that (CookieActions.withCookies () - .cookies () + withCookies ().delete (cookies.get (0)); + assertWithMessage ("Cookie Size").that (withCookies ().cookies () .size ()) .isEqualTo (cookieCount - 1); } @@ -99,11 +92,9 @@ public void testDeleteSingleCookie () { */ @Test (description = "Test get cookie", priority = 1) public void testGetCookie () { - final var cookie = CookieActions.withCookies () - .cookies () + final var cookie = withCookies ().cookies () .get (0); - assertWithMessage ("Cookie Name").that (CookieActions.withCookies () - .cookie (cookie) + assertWithMessage ("Cookie Name").that (withCookies ().cookie (cookie) .getName ()) .isEqualTo (cookie); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DoubleClickTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DoubleClickTest.java index 5f35d8c67..266e864b7 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DoubleClickTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DoubleClickTest.java @@ -16,14 +16,14 @@ package io.github.boykaframework.testng.ui.theinternet; +import static io.github.boykaframework.actions.drivers.AlertActions.onAlert; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.DoubleClickPage.doubleClickPage; -import io.github.boykaframework.actions.drivers.AlertActions; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -49,8 +49,7 @@ public class DoubleClickTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("DoubleClickTest", platformType, driverKey); - NavigateActions.navigate () - .to (URL); + navigate ().to (URL); } /** @@ -88,8 +87,7 @@ public void testDoubleClick () { public void testHoverAndClick () { withMouse (doubleClickPage ().getHoverButton ()).hover (); withMouse (doubleClickPage ().getHoverMenu ()).click (); - AlertActions.onAlert () - .verifyAccept () + onAlert ().verifyAccept () .isEqualTo ("Well done you clicked on the link!"); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DragDropTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DragDropTest.java index 5f4c62a1f..bf1413329 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DragDropTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DragDropTest.java @@ -16,13 +16,13 @@ package io.github.boykaframework.testng.ui.theinternet; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.DragDropPage.dragDropPage; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -48,8 +48,7 @@ public class DragDropTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("DragDropTest", platformType, driverKey); - NavigateActions.navigate () - .to (URL); + navigate ().to (URL); } /** diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DropDownTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DropDownTest.java index 7b4e0ea9a..8017deba8 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DropDownTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/DropDownTest.java @@ -16,13 +16,13 @@ package io.github.boykaframework.testng.ui.theinternet; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.actions.elements.DropDownActions.onDropDown; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.DropDownPage.dropDownPage; import static org.apache.commons.lang3.StringUtils.EMPTY; -import io.github.boykaframework.actions.drivers.NavigateActions; -import io.github.boykaframework.actions.elements.DropDownActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -48,8 +48,7 @@ public class DropDownTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("DropDownTest", platformType, driverKey); - NavigateActions.navigate () - .to (URL); + navigate ().to (URL); } /** @@ -65,17 +64,12 @@ public void tearDownClass () { */ @Test (description = "Verify deselect all dropdown values") public void testDeselectAll () { - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByIndex (3); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByIndex (4); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItems () + onDropDown (dropDownPage ().getSuperHeroes ()).selectByIndex (3); + onDropDown (dropDownPage ().getSuperHeroes ()).selectByIndex (4); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItems () .containsExactly ("Batman", "Batwoman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .deselectAll (); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItems () + onDropDown (dropDownPage ().getSuperHeroes ()).deselectAll (); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItems () .isEmpty (); } @@ -84,15 +78,11 @@ public void testDeselectAll () { */ @Test (description = "Verify deselect dropdown value by index") public void testDeselectByIndex () { - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByIndex (4); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).selectByIndex (4); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo ("Batwoman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .deselectByIndex (4); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).deselectByIndex (4); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo (EMPTY); } @@ -101,15 +91,11 @@ public void testDeselectByIndex () { */ @Test (description = "Verify deselect dropdown value by text") public void testDeselectByText () { - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByText ("Aquaman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).selectByText ("Aquaman"); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo ("Aquaman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .deselectByText ("Aquaman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).deselectByText ("Aquaman"); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo (EMPTY); } @@ -118,15 +104,11 @@ public void testDeselectByText () { */ @Test (description = "Verify deselect dropdown value by value") public void testDeselectByValue () { - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByValue ("bt"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).selectByValue ("bt"); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo ("Batman"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .deselectByValue ("bt"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getSuperHeroes ()).deselectByValue ("bt"); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItem () .isEqualTo (EMPTY); } @@ -135,14 +117,10 @@ public void testDeselectByValue () { */ @Test (description = "Verify multi select dropdown values") public void testMultiSelect () { - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByValue ("ta"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByIndex (3); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .selectByText ("Black Panther"); - DropDownActions.onDropDown (dropDownPage ().getSuperHeroes ()) - .verifySelectedItems () + onDropDown (dropDownPage ().getSuperHeroes ()).selectByValue ("ta"); + onDropDown (dropDownPage ().getSuperHeroes ()).selectByIndex (3); + onDropDown (dropDownPage ().getSuperHeroes ()).selectByText ("Black Panther"); + onDropDown (dropDownPage ().getSuperHeroes ()).verifySelectedItems () .containsExactly ("The Avengers", "Batman", "Black Panther"); } @@ -151,10 +129,8 @@ public void testMultiSelect () { */ @Test (description = "Verify select dropdown value by index") public void testSelectByIndex () { - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .selectByIndex (3); - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getFruits ()).selectByIndex (3); + onDropDown (dropDownPage ().getFruits ()).verifySelectedItem () .isEqualTo ("Orange"); } @@ -163,10 +139,8 @@ public void testSelectByIndex () { */ @Test (description = "Verify select dropdown value by text") public void testSelectByText () { - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .selectByText ("Apple"); - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getFruits ()).selectByText ("Apple"); + onDropDown (dropDownPage ().getFruits ()).verifySelectedItem () .isEqualTo ("Apple"); } @@ -175,10 +149,8 @@ public void testSelectByText () { */ @Test (description = "Verify select dropdown value by value") public void testSelectByValue () { - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .selectByValue ("1"); - DropDownActions.onDropDown (dropDownPage ().getFruits ()) - .verifySelectedItem () + onDropDown (dropDownPage ().getFruits ()).selectByValue ("1"); + onDropDown (dropDownPage ().getFruits ()).verifySelectedItem () .isEqualTo ("Mango"); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/FramesTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/FramesTest.java index 6c81e0945..3af67ffd5 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/FramesTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/FramesTest.java @@ -17,6 +17,7 @@ package io.github.boykaframework.testng.ui.theinternet; import static io.github.boykaframework.actions.drivers.FrameActions.onFrame; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; @@ -25,7 +26,6 @@ import static io.github.boykaframework.testng.ui.theinternet.pages.HomePage.homePage; import static io.github.boykaframework.testng.ui.theinternet.pages.NestedFramePage.nestedFramePage; -import io.github.boykaframework.actions.drivers.NavigateActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -51,8 +51,7 @@ public class FramesTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("FramesTest", platformType, driverKey); - NavigateActions.navigate () - .to (URL); + navigate ().to (URL); withMouse (homePage ().link ("Frames")).click (); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/LoginTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/LoginTest.java index e6587aa5b..8c30a09a5 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/LoginTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/LoginTest.java @@ -16,17 +16,17 @@ package io.github.boykaframework.testng.ui.theinternet; +import static io.github.boykaframework.actions.device.DeviceActions.onDevice; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; +import static io.github.boykaframework.actions.elements.TextBoxActions.onTextBox; import static io.github.boykaframework.manager.ParallelSession.clearSession; import static io.github.boykaframework.manager.ParallelSession.createSession; import static io.github.boykaframework.testng.ui.theinternet.pages.LoginPage.loginPage; import static java.text.MessageFormat.format; -import io.github.boykaframework.actions.device.DeviceActions; -import io.github.boykaframework.actions.drivers.NavigateActions; -import io.github.boykaframework.actions.drivers.WindowActions; -import io.github.boykaframework.actions.elements.TextBoxActions; import io.github.boykaframework.enums.PlatformType; import org.testng.ITestResult; import org.testng.annotations.AfterClass; @@ -49,8 +49,7 @@ public class LoginTest { */ @AfterMethod public void afterMethod (final ITestResult result) { - WindowActions.onWindow () - .takeScreenshot (); + onWindow ().takeScreenshot (); } /** @@ -63,10 +62,8 @@ public void afterMethod (final ITestResult result) { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession (format ("LoginTest-{0}", platformType), platformType, driverKey); - DeviceActions.onDevice () - .startRecording (); - NavigateActions.navigate () - .to (URL); + onDevice ().startRecording (); + navigate ().to (URL); } /** @@ -74,17 +71,14 @@ public void setupClass (final PlatformType platformType, final String driverKey) */ @AfterClass (description = "Tear down test class") public void tearDownClass () { - DeviceActions.onDevice () - .stopRecording (); + onDevice ().stopRecording (); clearSession (); } @Test (description = "Test Login Flow") public void testLogin () { - TextBoxActions.onTextBox (loginPage ().getUserName ()) - .enterText ("tomsmith"); - TextBoxActions.onTextBox (loginPage ().getPassword ()) - .enterText ("SuperSecretPassword!"); + onTextBox (loginPage ().getUserName ()).enterText ("tomsmith"); + onTextBox (loginPage ().getPassword ()).enterText ("SuperSecretPassword!"); withMouse (loginPage ().getLogin ()).click (); onElement (loginPage ().getMessage ()).verifyText () .contains ("You logged into a secure area!"); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/WindowTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/WindowTest.java index f0f904f8f..7dcd8a9ba 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/WindowTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/theinternet/WindowTest.java @@ -19,6 +19,8 @@ import static com.google.common.truth.Truth.assertWithMessage; import static io.github.boykaframework.actions.drivers.AlertActions.onAlert; import static io.github.boykaframework.actions.drivers.DriverActions.withDriver; +import static io.github.boykaframework.actions.drivers.NavigateActions.navigate; +import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.manager.ParallelSession.clearSession; @@ -29,8 +31,6 @@ import static org.openqa.selenium.WindowType.TAB; import static org.openqa.selenium.support.ui.ExpectedConditions.urlMatches; -import io.github.boykaframework.actions.drivers.NavigateActions; -import io.github.boykaframework.actions.drivers.WindowActions; import io.github.boykaframework.enums.PlatformType; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; @@ -56,10 +56,8 @@ public class WindowTest { @Parameters ({ "platformType", "driverKey" }) public void setupClass (final PlatformType platformType, final String driverKey) { createSession ("WindowTest", platformType, driverKey); - WindowActions.onWindow () - .maximize (); - NavigateActions.navigate () - .to (URL); + onWindow ().maximize (); + navigate ().to (URL); withMouse (homePage ().link ("Multiple Windows")).click (); } @@ -76,10 +74,8 @@ public void tearDownClass () { */ @Test (description = "Test browser back navigation") public void testBackNavigation () { - NavigateActions.navigate () - .back (); - NavigateActions.navigate () - .verifyUrl () + navigate ().back (); + navigate ().verifyUrl () .isEqualTo (URL); } @@ -99,10 +95,8 @@ public void testExecuteScript () { */ @Test (description = "Test browser forward navigation") public void testForwardNavigation () { - NavigateActions.navigate () - .forward (); - NavigateActions.navigate () - .verifyUrl () + navigate ().forward (); + navigate ().verifyUrl () .isEqualTo (format ("{0}windows", URL)); } @@ -112,17 +106,13 @@ public void testForwardNavigation () { @Test (description = "Test to verify opening new tab") public void testOpenNewTab () { try { - WindowActions.onWindow () - .switchToNew (TAB); - WindowActions.onWindow () - .verifyTitle () + onWindow ().switchToNew (TAB); + onWindow ().verifyTitle () .isEmpty (); - NavigateActions.navigate () - .verifyUrl () + navigate ().verifyUrl () .isEqualTo ("about:blank"); } finally { - WindowActions.onWindow () - .close (); + onWindow ().close (); } } @@ -131,28 +121,22 @@ public void testOpenNewTab () { */ @Test public void testOpenWindow () { - final var currentWindow = WindowActions.onWindow () - .currentHandle (); + final var currentWindow = onWindow ().currentHandle (); withMouse (multiWindowPage ().getClickHere ()).click (); - final var newWindow = WindowActions.onWindow () - .handles () + final var newWindow = onWindow ().handles () .stream () .filter (handle -> !handle.equals (currentWindow)) .findFirst (); assertWithMessage ("Window").that (newWindow.isPresent ()) .isTrue (); - WindowActions.onWindow () - .switchTo (newWindow.get ()); + onWindow ().switchTo (newWindow.get ()); withDriver ().waitUntil (urlMatches (format ("{0}windows/new", URL))); - NavigateActions.navigate () - .verifyUrl () + navigate ().verifyUrl () .isEqualTo (format ("{0}windows/new", URL)); onElement (multiWindowPage ().getTitle ()).verifyText () .isEqualTo ("New Window"); - WindowActions.onWindow () - .close (); - NavigateActions.navigate () - .verifyUrl () + onWindow ().close (); + navigate ().verifyUrl () .isEqualTo (format ("{0}windows", URL)); } @@ -161,10 +145,8 @@ public void testOpenWindow () { */ @Test (description = "Test to verify page refresh") public void testRefreshPage () { - NavigateActions.navigate () - .refresh (); - NavigateActions.navigate () - .verifyUrl () + navigate ().refresh (); + navigate ().verifyUrl () .isEqualTo (format ("{0}windows", URL)); } } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/ui/wdio/WdioDemoTest.java b/core-java/src/test/java/io/github/boykaframework/testng/ui/wdio/WdioDemoTest.java index 994e22d08..b960d7f5d 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/ui/wdio/WdioDemoTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/ui/wdio/WdioDemoTest.java @@ -19,6 +19,7 @@ import static io.github.boykaframework.actions.device.DeviceActions.onDevice; import static io.github.boykaframework.actions.drivers.ContextActions.withContext; import static io.github.boykaframework.actions.drivers.DriverActions.withDriver; +import static io.github.boykaframework.actions.drivers.WindowActions.onWindow; import static io.github.boykaframework.actions.elements.ClickableActions.withMouse; import static io.github.boykaframework.actions.elements.ElementActions.onElement; import static io.github.boykaframework.actions.elements.FingerActions.withFinger; @@ -33,7 +34,6 @@ import static io.github.boykaframework.testng.ui.wdio.pages.WDIOHomePage.wdioHomePage; import static io.github.boykaframework.testng.ui.wdio.pages.WebViewPage.webViewPage; -import io.github.boykaframework.actions.drivers.WindowActions; import io.github.boykaframework.enums.PlatformType; import org.testng.ITestResult; import org.testng.annotations.AfterClass; @@ -55,8 +55,7 @@ public class WdioDemoTest { @AfterMethod public void afterMethod (final ITestResult result) { if (!result.isSuccess ()) { - WindowActions.onWindow () - .takeScreenshot (); + onWindow ().takeScreenshot (); } } From 698d3cabec98282bdf08968f39756dfbbe845d9d Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 25 Aug 2024 14:44:17 +0300 Subject: [PATCH 03/25] fix(java): :bug: fixed failing api and grid tests --- .../boykaframework/manager/WebDriverManager.java | 9 +++------ .../testng/api/restful/data/BookingRequestData.java | 11 +++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java index d2753cd4b..f131ddc01 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java @@ -22,7 +22,6 @@ import static io.github.boykaframework.enums.Message.HOSTNAME_REQUIRED_FOR_REMOTE; import static io.github.boykaframework.enums.Message.INVALID_BROWSER; import static io.github.boykaframework.enums.Message.INVALID_REMOTE_URL; -import static io.github.boykaframework.enums.Message.INVALID_TARGET; import static io.github.boykaframework.enums.Message.NULL_REMOTE_URL; import static io.github.boykaframework.enums.Message.PAGE_LOAD_STRATEGY_MISSING; import static io.github.boykaframework.enums.Message.PASSWORD_REQUIRED_FOR_CLOUD; @@ -156,15 +155,13 @@ private URL getRemoteUrl (final WebSetting webSetting) { final var target = webSetting.getTarget (); final var hostName = new StringBuilder (getHostName (webSetting, target)); - if (target == LOCAL) { - throwError (INVALID_TARGET, target); - } - if (webSetting.getPort () != 0) { hostName.append (":") .append (webSetting.getPort ()); } - hostName.append ("/wd/hub"); + if (target != LOCAL) { + hostName.append ("/wd/hub"); + } final var url = format (URL_PATTERN, requireNonNullElse (webSetting.getProtocol (), target.getProtocol ()).name () .toLowerCase (), hostName); diff --git a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java index 3c6881c6f..84f67618c 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/api/restful/data/BookingRequestData.java @@ -16,7 +16,6 @@ package io.github.boykaframework.testng.api.restful.data; -import java.text.SimpleDateFormat; import java.util.concurrent.TimeUnit; import io.github.boykaframework.testng.api.restful.pojo.BookingData; @@ -38,7 +37,7 @@ public final class BookingRequestData { * @return {@link BookingData} instance */ public static BookingData getBookingData () { - final var formatter = new SimpleDateFormat ("yyyy-MM-dd"); + final var dateTime = FAKER.timeAndDate (); return BookingData.builder () .firstname (FAKER.name () .firstName ()) @@ -48,10 +47,10 @@ public static BookingData getBookingData () { .numberBetween (1, 2000)) .depositpaid (true) .bookingdates (BookingDates.builder () - .checkin (formatter.format (FAKER.timeAndDate () - .past (20, TimeUnit.DAYS))) - .checkout (formatter.format (FAKER.timeAndDate () - .future (5, TimeUnit.DAYS))) + .checkin (dateTime.past (20, TimeUnit.DAYS) + .toString ()) + .checkout (dateTime.future (5, TimeUnit.DAYS) + .toString ()) .build ()) .additionalneeds ("Breakfast") .build (); From ce3a0d4d954d15bbc351c62a6b772728c05e598e Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 25 Aug 2024 15:19:17 +0300 Subject: [PATCH 04/25] fix(java): :bug: fixed failing grid and others tests --- .../boykaframework/manager/WebDriverManager.java | 2 +- .../github/boykaframework/utils/Validator.java | 3 --- .../testng/listeners/TestResultListener.java | 16 ++++++++++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java index f131ddc01..a4861fdca 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/WebDriverManager.java @@ -155,7 +155,7 @@ private URL getRemoteUrl (final WebSetting webSetting) { final var target = webSetting.getTarget (); final var hostName = new StringBuilder (getHostName (webSetting, target)); - if (webSetting.getPort () != 0) { + if (webSetting.getPort () > 0) { hostName.append (":") .append (webSetting.getPort ()); } diff --git a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java index 36c97876e..1e1d10a10 100644 --- a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java +++ b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java @@ -83,9 +83,6 @@ public static T requireNonNullElse (final T value, final T defaultValue) { if (isNull (value)) { return defaultValue; } - if (value instanceof Integer && !value.equals (0)) { - return defaultValue; - } return value; } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java index b903887f7..3eabdfcf6 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java @@ -18,6 +18,9 @@ import static java.text.MessageFormat.format; import static java.util.stream.Collectors.joining; +import static org.apache.commons.io.FileUtils.createParentDirectories; +import static org.apache.commons.io.FileUtils.delete; +import static org.apache.commons.io.FileUtils.deleteDirectory; import static org.apache.logging.log4j.LogManager.getLogger; import static org.testng.ITestResult.FAILURE; @@ -106,16 +109,21 @@ private Function, Stream> resu } private void saveReportTemplate (final String outputDirectory, final String reportTemplate) { - final var dirCreated = new File (outputDirectory).mkdirs (); - if (dirCreated) { + final var outputDir = new File (outputDirectory); + try { + final var reportFile = new File (outputDirectory, "my-report.md"); + deleteDirectory (outputDir); + createParentDirectories (outputDir); + delete (reportFile); try ( - final var reportWriter = new PrintWriter ( - new BufferedWriter (new FileWriter (new File (outputDirectory, "my-report.md"))))) { + final var reportWriter = new PrintWriter (new BufferedWriter (new FileWriter (reportFile)))) { reportWriter.println (reportTemplate); reportWriter.flush (); } catch (final IOException e) { LOGGER.error ("Problem saving template", e); } + } catch (final IOException e) { + LOGGER.error ("Problem creating output directory", e); } } From 5d8e5ac9404073aec3bf04eaa6d4b98023655b0c Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 25 Aug 2024 16:00:35 +0300 Subject: [PATCH 05/25] fix(java): :bug: fixed failing others tests --- .../boykaframework/config/api/ApiSetting.java | 24 ++++++ .../config/ui/CommonUiSetting.java | 6 ++ .../config/ui/mobile/CommonMobileSetting.java | 6 ++ .../config/ui/web/CommonWebSetting.java | 6 ++ .../config/ui/web/WebSetting.java | 75 +++++++++++++++++++ .../testng/listeners/TestResultListener.java | 24 ++---- 6 files changed, 124 insertions(+), 17 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java index 624571a74..7cd04a785 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java @@ -40,26 +40,50 @@ public class ApiSetting { private boolean validateSsl; private boolean verifyHostName; + /** + * Gets the base path + * @return base path url + */ public String getBasePath () { return requireNonNullElse (this.basePath, COMMON_SETTING.getBasePath ()); } + /** + * Gets the logging settings + * @return Logging settings + */ public LogSetting getLogging () { return requireNonNullElse (this.logging, COMMON_SETTING.getLogging ()); } + /** + * Gets the schema path + * @return Schema path + */ public String getSchemaPath () { return requireNonNullElse (this.schemaPath, COMMON_SETTING.getSchemaPath ()); } + /** + * Gets the timeout config + * @return timeout config + */ public TimeoutSetting getTimeout () { return requireNonNullElse (this.timeout, COMMON_SETTING.getTimeout ()); } + /** + * Should SSL validation be done? + * @return Validate SSL + */ public boolean isValidateSsl () { return requireNonNullElse (this.validateSsl, COMMON_SETTING.isValidateSsl ()); } + /** + * Should Verify Host name? + * @return verify host name + */ public boolean isVerifyHostName () { return requireNonNullElse (this.verifyHostName, COMMON_SETTING.isVerifyHostName ()); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java index 9857686dc..f62fbb23a 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java @@ -19,6 +19,12 @@ import io.github.boykaframework.config.ui.web.CommonWebSetting; import lombok.Data; +/** + * Common UI settings + * + * @author Wasiq Bhamla + * @since 22-Aug-2024 + */ @Data public class CommonUiSetting { private CommonWebSetting web = new CommonWebSetting (); diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java index d92fcf926..55269e1e9 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java @@ -20,6 +20,12 @@ import io.github.boykaframework.config.ui.mobile.server.ServerSetting; import lombok.Data; +/** + * Common Mobile settings + * + * @author Wasiq Bhamla + * @since 25-Aug-2024 + */ @Data public class CommonMobileSetting { private DeviceSetting device = new DeviceSetting (); diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java index cd40540c9..a08273b66 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java @@ -32,6 +32,12 @@ import org.openqa.selenium.Dimension; import org.openqa.selenium.PageLoadStrategy; +/** + * Common Web Settings. + * + * @author Wasiq Bhamla + * @since 22-Aug-2024 + */ @Data public class CommonWebSetting { private String baseUrl; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java index 1d3f00433..433ac42dd 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java @@ -59,30 +59,65 @@ public class WebSetting { private String userName; private String version; + /** + * Gets the base browser url + * + * @return base url + */ public String getBaseUrl () { return requireNonNullElse (this.baseUrl, WEB_SETTING.getBaseUrl ()); } + /** + * Gets the browser + * + * @return Browser + */ public Browser getBrowser () { return requireNonNullElse (this.browser, WEB_SETTING.getBrowser ()); } + /** + * Gets the browser options + * + * @return browser options + */ public List getBrowserOptions () { return requireNonNullElse (this.browserOptions, WEB_SETTING.getBrowserOptions ()); } + /** + * Gets the remote connection capabilities + * + * @return Capabilities + */ public Map getCapabilities () { return requireNonNullElse (this.capabilities, WEB_SETTING.getCapabilities ()); } + /** + * Gets the browser screen custom size + * + * @return Custom size + */ public Dimension getCustomSize () { return requireNonNullElse (this.customSize, WEB_SETTING.getCustomSize ()); } + /** + * Gets the host name + * + * @return Host name + */ public String getHost () { return requireNonNullElse (this.host, WEB_SETTING.getHost ()); } + /** + * Gets the page load strategy + * + * @return page load strategy + */ public PageLoadStrategy getPageLoadStrategy () { return requireNonNullElse (this.pageLoadStrategy, WEB_SETTING.getPageLoadStrategy ()); } @@ -96,22 +131,47 @@ public String getPassword () { return interpolate (requireNonNullElse (this.password, WEB_SETTING.getPassword ())); } + /** + * Gets the platform name + * + * @return Platform name + */ public String getPlatform () { return requireNonNullElse (this.platform, WEB_SETTING.getPlatform ()); } + /** + * Gets the port number + * + * @return Port number + */ public int getPort () { return requireNonNullElse (this.port, WEB_SETTING.getPort ()); } + /** + * Gets the connection protocol + * + * @return Protocol + */ public Protocol getProtocol () { return requireNonNullElse (this.protocol, WEB_SETTING.getProtocol ()); } + /** + * Gets the browser window resize type + * + * @return Resize type + */ public WindowResizeType getResize () { return requireNonNullElse (this.resize, WEB_SETTING.getResize ()); } + /** + * Gets the target provider + * + * @return Target provider + */ public TargetProviders getTarget () { return requireNonNullElse (this.target, WEB_SETTING.getTarget ()); } @@ -125,14 +185,29 @@ public String getUserName () { return interpolate (requireNonNullElse (this.userName, WEB_SETTING.getUserName ())); } + /** + * Gets the browser version + * + * @return Browser version + */ public String getVersion () { return requireNonNullElse (this.version, WEB_SETTING.getVersion ()); } + /** + * Gets if the browser should be headless + * + * @return Is headless + */ public boolean isHeadless () { return requireNonNullElse (this.headless, WEB_SETTING.isHeadless ()); } + /** + * Gets if the browser interactions should be highlighted + * + * @return Highlight interactions + */ public boolean isHighlight () { return requireNonNullElse (this.highlight, WEB_SETTING.isHighlight ()); } diff --git a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java index 3eabdfcf6..eab25cfea 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/listeners/TestResultListener.java @@ -18,9 +18,6 @@ import static java.text.MessageFormat.format; import static java.util.stream.Collectors.joining; -import static org.apache.commons.io.FileUtils.createParentDirectories; -import static org.apache.commons.io.FileUtils.delete; -import static org.apache.commons.io.FileUtils.deleteDirectory; import static org.apache.logging.log4j.LogManager.getLogger; import static org.testng.ITestResult.FAILURE; @@ -109,21 +106,14 @@ private Function, Stream> resu } private void saveReportTemplate (final String outputDirectory, final String reportTemplate) { - final var outputDir = new File (outputDirectory); - try { - final var reportFile = new File (outputDirectory, "my-report.md"); - deleteDirectory (outputDir); - createParentDirectories (outputDir); - delete (reportFile); - try ( - final var reportWriter = new PrintWriter (new BufferedWriter (new FileWriter (reportFile)))) { - reportWriter.println (reportTemplate); - reportWriter.flush (); - } catch (final IOException e) { - LOGGER.error ("Problem saving template", e); - } + new File (outputDirectory).mkdirs (); + try ( + final var reportWriter = new PrintWriter ( + new BufferedWriter (new FileWriter (new File (outputDirectory, "my-report.md"))))) { + reportWriter.println (reportTemplate); + reportWriter.flush (); } catch (final IOException e) { - LOGGER.error ("Problem creating output directory", e); + LOGGER.error ("Problem saving template", e); } } From 45d3ae01cc4894192ef9f7bb71774a2833b97f2b Mon Sep 17 00:00:00 2001 From: WasiqB Date: Tue, 27 Aug 2024 15:33:20 +0300 Subject: [PATCH 06/25] feat(java): :sparkles: updated missing config with common config --- ...CommonIOSSetting.java => BoykaConfig.java} | 17 +- .../boykaframework/config/CommonSetting.java | 8 +- .../config/FrameworkSetting.java | 2 +- .../config/TestDataSetting.java | 8 +- .../boykaframework/config/api/ApiSetting.java | 70 +-- .../config/api/CommonApiSetting.java | 35 -- .../boykaframework/config/api/LogSetting.java | 3 +- .../config/api/TimeoutSetting.java | 9 +- .../config/ui/CommonUiSetting.java | 9 +- .../config/ui/DelaySetting.java | 3 +- .../boykaframework/config/ui/LogSetting.java | 3 +- .../config/ui/ScreenshotSetting.java | 3 +- .../config/ui/TimeoutSetting.java | 3 +- .../boykaframework/config/ui/UISetting.java | 3 +- .../config/ui/mobile/CommonMobileSetting.java | 33 -- .../config/ui/mobile/MobileSetting.java | 15 +- .../ui/mobile/device/AndroidVideoSetting.java | 5 +- .../ui/mobile/device/ApplicationSetting.java | 11 +- .../mobile/device/CommonAndroidSetting.java | 29 -- .../ui/mobile/device/CommonDeviceSetting.java | 39 -- .../ui/mobile/device/DeviceSetting.java | 102 +---- .../ui/mobile/device/IOSVideoSetting.java | 5 +- .../config/ui/mobile/device/SwipeSetting.java | 9 +- .../config/ui/mobile/device/VideoSetting.java | 15 +- .../mobile/device/VirtualDeviceSetting.java | 7 +- .../config/ui/mobile/device/WDASetting.java | 15 +- .../config/ui/mobile/server/LogSetting.java | 3 +- .../ui/mobile/server/ServerSetting.java | 31 +- .../config/ui/web/CommonWebSetting.java | 60 --- .../config/ui/web/WebSetting.java | 182 +------- .../github/boykaframework/enums/Message.java | 8 + .../boykaframework/manager/DriverSession.java | 51 +-- .../boykaframework/utils/ReflectionUtil.java | 121 +++++ .../boykaframework/utils/Validator.java | 9 + .../src/test/resources/boyka-config.json | 110 ++--- package.json | 10 +- pnpm-lock.yaml | 427 ++++++++++++------ 37 files changed, 622 insertions(+), 851 deletions(-) rename core-java/src/main/java/io/github/boykaframework/config/{ui/mobile/device/CommonIOSSetting.java => BoykaConfig.java} (74%) delete mode 100644 core-java/src/main/java/io/github/boykaframework/config/api/CommonApiSetting.java delete mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java delete mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java delete mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java delete mode 100644 core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java create mode 100644 core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java b/core-java/src/main/java/io/github/boykaframework/config/BoykaConfig.java similarity index 74% rename from core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java rename to core-java/src/main/java/io/github/boykaframework/config/BoykaConfig.java index 194dd4edb..118cc6e2c 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonIOSSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/BoykaConfig.java @@ -14,13 +14,14 @@ * copies or substantial portions of the Software. */ -package io.github.boykaframework.config.ui.mobile.device; +package io.github.boykaframework.config; -import lombok.Data; - -@Data -public class CommonIOSSetting { - private boolean acceptAlerts = true; - private int typingSpeed = 60; - private WDASetting wda; +/** + * Marker Interface + * + * @author Wasiq Bhamla + * @since 27-Aug-2024 + */ +public interface BoykaConfig { + // Marker interface } diff --git a/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java b/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java index eab833f0a..dff0fef6f 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/CommonSetting.java @@ -16,7 +16,7 @@ package io.github.boykaframework.config; -import io.github.boykaframework.config.api.CommonApiSetting; +import io.github.boykaframework.config.api.ApiSetting; import io.github.boykaframework.config.ui.CommonUiSetting; import lombok.Data; @@ -27,7 +27,7 @@ * @since 19-Jun-2024 */ @Data -public class CommonSetting { - private CommonApiSetting api = new CommonApiSetting (); - private CommonUiSetting ui = new CommonUiSetting (); +public class CommonSetting implements BoykaConfig { + private ApiSetting api = new ApiSetting (); + private CommonUiSetting ui = new CommonUiSetting (); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/FrameworkSetting.java b/core-java/src/main/java/io/github/boykaframework/config/FrameworkSetting.java index 2a090bee2..f50fdead2 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/FrameworkSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/FrameworkSetting.java @@ -37,7 +37,7 @@ * @since 17-Feb-2022 */ @Data -public class FrameworkSetting { +public class FrameworkSetting implements BoykaConfig { private static final Logger LOGGER = getLogger (); private Map api; diff --git a/core-java/src/main/java/io/github/boykaframework/config/TestDataSetting.java b/core-java/src/main/java/io/github/boykaframework/config/TestDataSetting.java index 8992a5caa..531deb534 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/TestDataSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/TestDataSetting.java @@ -16,6 +16,8 @@ package io.github.boykaframework.config; +import static io.github.boykaframework.enums.TestDataSource.EXCEL; + import io.github.boykaframework.enums.TestDataSource; import lombok.Data; @@ -26,9 +28,9 @@ * @since 18-Nov-2023 */ @Data -public class TestDataSetting { +public class TestDataSetting implements BoykaConfig { private String extension = "xlsx"; private boolean external; - private String path = "test-data"; - private TestDataSource type = TestDataSource.EXCEL; + private String path = "test-data"; + private TestDataSource type = EXCEL; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java index 7cd04a785..1d32bc51d 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java @@ -16,9 +16,7 @@ package io.github.boykaframework.config.api; -import static io.github.boykaframework.manager.ParallelSession.getSession; -import static io.github.boykaframework.utils.Validator.requireNonNullElse; - +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -28,63 +26,13 @@ * @since 17-Feb-2022 */ @Data -public class ApiSetting { - private static final CommonApiSetting COMMON_SETTING = getSession ().getCommonApiSetting (); - - private String basePath; +public class ApiSetting implements BoykaConfig { + private String basePath = ""; private String baseUri; - private LogSetting logging; - private int port; - private String schemaPath; - private TimeoutSetting timeout; - private boolean validateSsl; - private boolean verifyHostName; - - /** - * Gets the base path - * @return base path url - */ - public String getBasePath () { - return requireNonNullElse (this.basePath, COMMON_SETTING.getBasePath ()); - } - - /** - * Gets the logging settings - * @return Logging settings - */ - public LogSetting getLogging () { - return requireNonNullElse (this.logging, COMMON_SETTING.getLogging ()); - } - - /** - * Gets the schema path - * @return Schema path - */ - public String getSchemaPath () { - return requireNonNullElse (this.schemaPath, COMMON_SETTING.getSchemaPath ()); - } - - /** - * Gets the timeout config - * @return timeout config - */ - public TimeoutSetting getTimeout () { - return requireNonNullElse (this.timeout, COMMON_SETTING.getTimeout ()); - } - - /** - * Should SSL validation be done? - * @return Validate SSL - */ - public boolean isValidateSsl () { - return requireNonNullElse (this.validateSsl, COMMON_SETTING.isValidateSsl ()); - } - - /** - * Should Verify Host name? - * @return verify host name - */ - public boolean isVerifyHostName () { - return requireNonNullElse (this.verifyHostName, COMMON_SETTING.isVerifyHostName ()); - } + private LogSetting logging = new LogSetting (); + private Integer port = 0; + private String schemaPath = ""; + private TimeoutSetting timeout = new TimeoutSetting (); + private boolean validateSsl = true; + private boolean verifyHostName = true; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/CommonApiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/CommonApiSetting.java deleted file mode 100644 index 89eecb90a..000000000 --- a/core-java/src/main/java/io/github/boykaframework/config/api/CommonApiSetting.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2024, Boyka Framework - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - */ - -package io.github.boykaframework.config.api; - -import lombok.Data; - -/** - * Default API settings. - * - * @author Wasiq Bhamla - * @since 21-May-2024 - */ -@Data -public class CommonApiSetting { - private String basePath = ""; - private LogSetting logging = new LogSetting (); - private String schemaPath = ""; - private TimeoutSetting timeout = new TimeoutSetting (); - private boolean validateSsl = true; - private boolean verifyHostName = true; -} diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/LogSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/LogSetting.java index 0c1d30241..655cae430 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/LogSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/LogSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.api; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,7 +26,7 @@ * @since 07-Sept-2022 */ @Data -public class LogSetting { +public class LogSetting implements BoykaConfig { private boolean enable = true; private boolean request = true; private boolean response = true; diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java index 27e147818..c7f3dc8eb 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.api; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,8 +26,8 @@ * @since 21-May-2024 */ @Data -public class TimeoutSetting { - private int connectionTimeout = 5; - private int readTimeout = 5; - private int writeTimeout = 5; +public class TimeoutSetting implements BoykaConfig { + private Integer connectionTimeout = 5; + private Integer readTimeout = 5; + private Integer writeTimeout = 5; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java index f62fbb23a..da589fe7d 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/CommonUiSetting.java @@ -16,7 +16,9 @@ package io.github.boykaframework.config.ui; -import io.github.boykaframework.config.ui.web.CommonWebSetting; +import io.github.boykaframework.config.BoykaConfig; +import io.github.boykaframework.config.ui.mobile.MobileSetting; +import io.github.boykaframework.config.ui.web.WebSetting; import lombok.Data; /** @@ -26,6 +28,7 @@ * @since 22-Aug-2024 */ @Data -public class CommonUiSetting { - private CommonWebSetting web = new CommonWebSetting (); +public class CommonUiSetting implements BoykaConfig { + private MobileSetting mobile = new MobileSetting (); + private WebSetting web = new WebSetting (); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/DelaySetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/DelaySetting.java index 427e173d2..5b570a13e 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/DelaySetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/DelaySetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,7 +26,7 @@ * @since 04-Apr-2024 */ @Data -public class DelaySetting { +public class DelaySetting implements BoykaConfig { private int beforeClick; private int beforeMouseMove; private int beforeSwipe = 500; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/LogSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/LogSetting.java index 17dcf8fc5..6d2767cff 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/LogSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/LogSetting.java @@ -18,6 +18,7 @@ import java.util.List; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -27,7 +28,7 @@ * @since 07-Sept-2022 */ @Data -public class LogSetting { +public class LogSetting implements BoykaConfig { private boolean enable = true; private List excludeLogs; private String path = "./logs"; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/ScreenshotSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/ScreenshotSetting.java index 27d4b49b1..5163bc521 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/ScreenshotSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/ScreenshotSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,7 +26,7 @@ * @since 13-Jul-2022 */ @Data -public class ScreenshotSetting { +public class ScreenshotSetting implements BoykaConfig { private boolean enabled = false; private String extension = "png"; private String path = "./screenshots"; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/TimeoutSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/TimeoutSetting.java index a427f78bd..51243616a 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/TimeoutSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/TimeoutSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,7 +26,7 @@ * @since 17-Feb-2022 */ @Data -public class TimeoutSetting { +public class TimeoutSetting implements BoykaConfig { private int explicitWait = 10; private int highlightDelay = 100; private int implicitWait = 1; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/UISetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/UISetting.java index 578c732d5..9aa4d12e3 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/UISetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/UISetting.java @@ -20,6 +20,7 @@ import java.util.Map; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.config.ui.mobile.MobileSetting; import io.github.boykaframework.config.ui.web.WebSetting; import lombok.Data; @@ -29,7 +30,7 @@ * @since 17-Feb-2022 */ @Data -public class UISetting { +public class UISetting implements BoykaConfig { private DelaySetting delay = new DelaySetting (); private LogSetting logging = new LogSetting (); private Map mobile; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java deleted file mode 100644 index 55269e1e9..000000000 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/CommonMobileSetting.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2024, Boyka Framework - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - */ - -package io.github.boykaframework.config.ui.mobile; - -import io.github.boykaframework.config.ui.mobile.device.DeviceSetting; -import io.github.boykaframework.config.ui.mobile.server.ServerSetting; -import lombok.Data; - -/** - * Common Mobile settings - * - * @author Wasiq Bhamla - * @since 25-Aug-2024 - */ -@Data -public class CommonMobileSetting { - private DeviceSetting device = new DeviceSetting (); - private ServerSetting server = new ServerSetting (); -} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java index 00fdbfd6b..f7c253fbf 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/MobileSetting.java @@ -16,8 +16,7 @@ package io.github.boykaframework.config.ui.mobile; -import static io.github.boykaframework.utils.Validator.requireNonNullElse; - +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.config.ui.mobile.device.DeviceSetting; import io.github.boykaframework.config.ui.mobile.server.ServerSetting; import lombok.Data; @@ -29,17 +28,7 @@ * @since 06-Sept-2022 */ @Data -public class MobileSetting { - private static final CommonMobileSetting MOBILE_SETTING = new CommonMobileSetting (); - +public class MobileSetting implements BoykaConfig { private DeviceSetting device = new DeviceSetting (); private ServerSetting server = new ServerSetting (); - - public DeviceSetting getDevice () { - return requireNonNullElse (this.device, MOBILE_SETTING.getDevice ()); - } - - public ServerSetting getServer () { - return requireNonNullElse (this.server, MOBILE_SETTING.getServer ()); - } } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java index da7bf32d4..d78c60035 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui.mobile.device; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,6 +26,6 @@ * @since 16-Oct-2023 */ @Data -public class AndroidVideoSetting { - private int bitRate = 4; +public class AndroidVideoSetting implements BoykaConfig { + private Integer bitRate = 4; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java index c43f8fc6e..5885bda6a 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java @@ -18,6 +18,7 @@ import static io.github.boykaframework.enums.ApplicationType.NATIVE; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.ApplicationType; import io.github.boykaframework.enums.Browser; import lombok.Data; @@ -29,15 +30,15 @@ * @since 13-Sept-2022 */ @Data -public class ApplicationSetting { +public class ApplicationSetting implements BoykaConfig { private String baseUrl; private Browser browser; private String bundleId; - private int chromeDriverPort; + private Integer chromeDriverPort = 0; private boolean external; - private int installTimeout = 30; + private Integer installTimeout = 30; private String path; - private ApplicationType type = NATIVE; + private ApplicationType type = NATIVE; private String waitActivity; - private int waitTimeout = 30; + private Integer waitTimeout = 30; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java deleted file mode 100644 index 3dcae1e63..000000000 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonAndroidSetting.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2024, Boyka Framework - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - */ - -package io.github.boykaframework.config.ui.mobile.device; - -import lombok.Data; - -@Data -public class CommonAndroidSetting { - private int adbTimeout = 30; - private boolean clearLogs = true; - private boolean ignoreUnimportantViews = true; - private int serverInstallTimeout = 30; - private int serverLaunchTimeout = 30; - private int systemPort = 8200; -} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java deleted file mode 100644 index 1cf81b186..000000000 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/CommonDeviceSetting.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2024, Boyka Framework - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - */ - -package io.github.boykaframework.config.ui.mobile.device; - -import static io.github.boykaframework.enums.DeviceType.VIRTUAL; - -import java.util.Map; - -import io.github.boykaframework.enums.DeviceType; -import lombok.Data; - -@Data -public class CommonDeviceSetting { - private CommonAndroidSetting android = new CommonAndroidSetting (); - private ApplicationSetting application = new ApplicationSetting (); - private Map capabilities; - private boolean clearFiles = true; - private boolean fullReset = false; - private CommonIOSSetting ios = new CommonIOSSetting (); - private boolean noReset = true; - private SwipeSetting swipe = new SwipeSetting (); - private DeviceType type = VIRTUAL; - private VideoSetting video = new VideoSetting (); - private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); -} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java index da5c5ed78..d75a76e51 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java @@ -18,10 +18,10 @@ import static io.github.boykaframework.enums.DeviceType.VIRTUAL; import static io.github.boykaframework.enums.OS.ANDROID; -import static io.github.boykaframework.utils.Validator.requireNonNullElse; import java.util.Map; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.DeviceType; import io.github.boykaframework.enums.OS; import lombok.Data; @@ -33,103 +33,27 @@ * @since 08-Sept-2022 */ @Data -public class DeviceSetting { - private static final CommonAndroidSetting ANDROID_SETTING = new CommonAndroidSetting (); - private static final CommonDeviceSetting DEVICE_SETTING = new CommonDeviceSetting (); - private static final CommonIOSSetting IOS_SETTING = new CommonIOSSetting (); - +public class DeviceSetting implements BoykaConfig { private boolean acceptAlerts = true; - private int adbTimeout = 30; + private Integer adbTimeout = 30; private ApplicationSetting application; private Map capabilities; private boolean clearFiles = true; private boolean clearLogs = true; - private boolean fullReset; + private boolean fullReset = false; private boolean ignoreUnimportantViews = true; private String name; - private boolean noReset; + private boolean noReset = true; private OS os = ANDROID; - private int serverInstallTimeout = 30; - private int serverLaunchTimeout = 30; - private SwipeSetting swipe; - private int systemPort = 8200; + private Integer serverInstallTimeout = 30; + private Integer serverLaunchTimeout = 30; + private SwipeSetting swipe = new SwipeSetting (); + private Integer systemPort = 8200; private DeviceType type = VIRTUAL; - private int typingSpeed = 60; + private Integer typingSpeed = 60; private String uniqueId; private String version; - private VideoSetting video; - private VirtualDeviceSetting virtualDevice; - private WDASetting wda; - - public int getAdbTimeout () { - return requireNonNullElse (this.adbTimeout, ANDROID_SETTING.getAdbTimeout ()); - } - - public ApplicationSetting getApplication () { - return requireNonNullElse (this.application, DEVICE_SETTING.getApplication ()); - } - - public Map getCapabilities () { - return requireNonNullElse (this.capabilities, DEVICE_SETTING.getCapabilities ()); - } - - public int getServerInstallTimeout () { - return requireNonNullElse (this.serverInstallTimeout, ANDROID_SETTING.getServerInstallTimeout ()); - } - - public int getServerLaunchTimeout () { - return requireNonNullElse (this.serverLaunchTimeout, ANDROID_SETTING.getServerLaunchTimeout ()); - } - - public SwipeSetting getSwipe () { - return requireNonNullElse (this.swipe, DEVICE_SETTING.getSwipe ()); - } - - public int getSystemPort () { - return requireNonNullElse (this.systemPort, ANDROID_SETTING.getSystemPort ()); - } - - public DeviceType getType () { - return requireNonNullElse (this.type, DEVICE_SETTING.getType ()); - } - - public int getTypingSpeed () { - return requireNonNullElse (this.typingSpeed, IOS_SETTING.getTypingSpeed ()); - } - - public VideoSetting getVideo () { - return requireNonNullElse (this.video, DEVICE_SETTING.getVideo ()); - } - - public VirtualDeviceSetting getVirtualDevice () { - return requireNonNullElse (this.virtualDevice, DEVICE_SETTING.getVirtualDevice ()); - } - - public WDASetting getWda () { - return requireNonNullElse (this.wda, IOS_SETTING.getWda ()); - } - - public boolean isAcceptAlerts () { - return requireNonNullElse (this.acceptAlerts, IOS_SETTING.isAcceptAlerts ()); - } - - public boolean isClearFiles () { - return requireNonNullElse (this.clearFiles, DEVICE_SETTING.isClearFiles ()); - } - - public boolean isClearLogs () { - return requireNonNullElse (this.clearLogs, ANDROID_SETTING.isClearLogs ()); - } - - public boolean isFullReset () { - return requireNonNullElse (this.fullReset, DEVICE_SETTING.isFullReset ()); - } - - public boolean isIgnoreUnimportantViews () { - return requireNonNullElse (this.ignoreUnimportantViews, ANDROID_SETTING.isIgnoreUnimportantViews ()); - } - - public boolean isNoReset () { - return requireNonNullElse (this.noReset, DEVICE_SETTING.isNoReset ()); - } + private VideoSetting video = new VideoSetting (); + private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); + private WDASetting wda = new WDASetting (); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java index 8613c55aa..c7f8cf1c8 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java @@ -19,6 +19,7 @@ import static io.appium.java_client.ios.IOSStartScreenRecordingOptions.VideoQuality.MEDIUM; import io.appium.java_client.ios.IOSStartScreenRecordingOptions.VideoQuality; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -28,8 +29,8 @@ * @since 16-Oct-2023 */ @Data -public class IOSVideoSetting { +public class IOSVideoSetting implements BoykaConfig { private String codec = "mpeg4"; - private int fps = 10; + private Integer fps = 10; private VideoQuality quality = MEDIUM; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java index bf24c3214..14bdc309c 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java @@ -18,6 +18,7 @@ import static io.github.boykaframework.enums.Speed.NORMAL; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.Speed; import lombok.Data; @@ -28,8 +29,8 @@ * @since 02-Jan-2023 */ @Data -public class SwipeSetting { - private int distance = 75; - private int maxSwipeUntilFound = 5; - private Speed speed = NORMAL; +public class SwipeSetting implements BoykaConfig { + private Integer distance = 75; + private Integer maxSwipeUntilFound = 5; + private Speed speed = NORMAL; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java index f8523c991..8bb8d7f8d 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui.mobile.device; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,12 +26,12 @@ * @since 13-Oct-2023 */ @Data -public class VideoSetting { - private AndroidVideoSetting android = new AndroidVideoSetting (); - private boolean enabled = false; - private IOSVideoSetting ios = new IOSVideoSetting (); - private String path = "./videos"; - private String prefix = "VID"; +public class VideoSetting implements BoykaConfig { + private AndroidVideoSetting android = new AndroidVideoSetting (); + private boolean enabled = false; + private IOSVideoSetting ios = new IOSVideoSetting (); + private String path = "./videos"; + private String prefix = "VID"; private String size; - private int timeLimit; + private Integer timeLimit = 300; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java index 527d3a586..8df24d8ff 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui.mobile.device; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,10 +26,10 @@ * @since 13-Sept-2022 */ @Data -public class VirtualDeviceSetting { +public class VirtualDeviceSetting implements BoykaConfig { private boolean connectKeyboard = true; private boolean headless = false; - private int launchTimeout = 120; + private Integer launchTimeout = 120; private String name; - private int readyTimeout = 60; + private Integer readyTimeout = 60; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java index 8b9445e87..eec98ae33 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui.mobile.device; +import io.github.boykaframework.config.BoykaConfig; import lombok.Data; /** @@ -25,15 +26,15 @@ * @since 26-Jan-2023 */ @Data -public class WDASetting { - private int connectionTimeout = 60; - private int launchTimeout = 60; - private int localPort = 8100; +public class WDASetting implements BoykaConfig { + private Integer connectionTimeout = 60; + private Integer launchTimeout = 60; + private Integer localPort = 8100; private String signingId; - private int startupRetries = 2; - private int startupRetryInterval = 10; + private Integer startupRetries = 2; + private Integer startupRetryInterval = 10; private String teamId; private String updateBundleId; - private boolean useNew; + private boolean useNew = true; private boolean usePrebuilt; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java index 252d9970c..d48a96c52 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java @@ -18,6 +18,7 @@ import static io.github.boykaframework.enums.LogLevel.ERROR; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.LogLevel; import lombok.Data; @@ -28,7 +29,7 @@ * @since 21-Sept-2023 */ @Data -public class LogSetting { +public class LogSetting implements BoykaConfig { private boolean debugSpacing = true; private LogLevel level = ERROR; private boolean localTimezone = true; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java index 06aac79af..d386c6c43 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java @@ -16,16 +16,21 @@ package io.github.boykaframework.config.ui.mobile.server; +import static io.github.boykaframework.enums.AutomationType.UI_AUTOMATOR; +import static io.github.boykaframework.enums.Protocol.HTTP; +import static io.github.boykaframework.enums.TargetProviders.LOCAL; +import static io.github.boykaframework.utils.StringUtils.interpolate; +import static java.lang.System.getProperty; import static org.apache.commons.lang3.StringUtils.isEmpty; import java.nio.file.Path; import java.util.List; import java.util.Map; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.AutomationType; import io.github.boykaframework.enums.Protocol; import io.github.boykaframework.enums.TargetProviders; -import io.github.boykaframework.utils.StringUtils; import lombok.Data; /** @@ -35,32 +40,32 @@ * @since 06-Sept-2022 */ @Data -public class ServerSetting { +public class ServerSetting implements BoykaConfig { private boolean allowCors; private List allowInsecure; private String appiumPath; private String basePath; private String callbackAddress; - private int callbackPort; + private Integer callbackPort = 0; private String configPath; private List denyInsecure; - private AutomationType driver; + private AutomationType driver = UI_AUTOMATOR; private boolean external; private boolean externalConfig; private String host; - private int keepAliveTimeout; - private LogSetting logging; + private Integer keepAliveTimeout = 120; + private LogSetting logging = new LogSetting (); private String nodePath; private Map otherArgs; private String password; private List plugins; - private int port; - private Protocol protocol; + private Integer port = 0; + private Protocol protocol = HTTP; private boolean relaxedSecurity; private boolean sessionOverride; private boolean strictCapabilities; - private TargetProviders target = TargetProviders.LOCAL; - private int timeout = 30; + private TargetProviders target = LOCAL; + private Integer timeout = 60; private String userName; private String webhook; @@ -73,7 +78,7 @@ public String getConfigPath () { if (isExternalConfig () || isEmpty (this.configPath)) { return this.configPath; } - return Path.of (System.getProperty ("user.dir"), this.configPath) + return Path.of (getProperty ("user.dir"), this.configPath) .toString (); } @@ -83,7 +88,7 @@ public String getConfigPath () { * @return the cloud password */ public String getPassword () { - return StringUtils.interpolate (this.password); + return interpolate (this.password); } /** @@ -92,6 +97,6 @@ public String getPassword () { * @return the cloud username. */ public String getUserName () { - return StringUtils.interpolate (this.userName); + return interpolate (this.userName); } } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java deleted file mode 100644 index a08273b66..000000000 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/CommonWebSetting.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2024, Boyka Framework - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - */ - -package io.github.boykaframework.config.ui.web; - -import static io.github.boykaframework.enums.Browser.NONE; -import static io.github.boykaframework.enums.Protocol.HTTP; -import static io.github.boykaframework.enums.TargetProviders.LOCAL; -import static io.github.boykaframework.enums.WindowResizeType.NORMAL; - -import java.util.List; -import java.util.Map; - -import io.github.boykaframework.enums.Browser; -import io.github.boykaframework.enums.Protocol; -import io.github.boykaframework.enums.TargetProviders; -import io.github.boykaframework.enums.WindowResizeType; -import lombok.Data; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.PageLoadStrategy; - -/** - * Common Web Settings. - * - * @author Wasiq Bhamla - * @since 22-Aug-2024 - */ -@Data -public class CommonWebSetting { - private String baseUrl; - private Browser browser = NONE; - private List browserOptions; - private Map capabilities; - private Dimension customSize = new Dimension (1920, 1080); - private boolean headless = true; - private boolean highlight = false; - private String host; - private PageLoadStrategy pageLoadStrategy = PageLoadStrategy.NORMAL; - private String password; - private String platform; - private int port; - private Protocol protocol = HTTP; - private WindowResizeType resize = NORMAL; - private TargetProviders target = LOCAL; - private String userName; - private String version = "stable"; -} diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java index 433ac42dd..3252d7cae 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java @@ -16,13 +16,14 @@ package io.github.boykaframework.config.ui.web; -import static io.github.boykaframework.manager.ParallelSession.getSession; -import static io.github.boykaframework.utils.StringUtils.interpolate; -import static io.github.boykaframework.utils.Validator.requireNonNullElse; +import static io.github.boykaframework.enums.Protocol.HTTP; +import static io.github.boykaframework.enums.TargetProviders.LOCAL; +import static io.github.boykaframework.enums.WindowResizeType.NORMAL; import java.util.List; import java.util.Map; +import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.Browser; import io.github.boykaframework.enums.Protocol; import io.github.boykaframework.enums.TargetProviders; @@ -38,177 +39,22 @@ * @since 24-Feb-2022 */ @Data -public class WebSetting { - private static final CommonWebSetting WEB_SETTING = getSession ().getCommonWebSetting (); - +public class WebSetting implements BoykaConfig { private String baseUrl; private Browser browser; private List browserOptions; private Map capabilities; - private Dimension customSize; - private boolean headless; - private boolean highlight; + private Dimension customSize = new Dimension (1920, 1080); + private boolean headless = true; + private boolean highlight = false; private String host; - private PageLoadStrategy pageLoadStrategy; + private PageLoadStrategy pageLoadStrategy = PageLoadStrategy.NORMAL; private String password; private String platform; - private int port; - private Protocol protocol; - private WindowResizeType resize; - private TargetProviders target; + private Integer port = 0; + private Protocol protocol = HTTP; + private WindowResizeType resize = NORMAL; + private TargetProviders target = LOCAL; private String userName; - private String version; - - /** - * Gets the base browser url - * - * @return base url - */ - public String getBaseUrl () { - return requireNonNullElse (this.baseUrl, WEB_SETTING.getBaseUrl ()); - } - - /** - * Gets the browser - * - * @return Browser - */ - public Browser getBrowser () { - return requireNonNullElse (this.browser, WEB_SETTING.getBrowser ()); - } - - /** - * Gets the browser options - * - * @return browser options - */ - public List getBrowserOptions () { - return requireNonNullElse (this.browserOptions, WEB_SETTING.getBrowserOptions ()); - } - - /** - * Gets the remote connection capabilities - * - * @return Capabilities - */ - public Map getCapabilities () { - return requireNonNullElse (this.capabilities, WEB_SETTING.getCapabilities ()); - } - - /** - * Gets the browser screen custom size - * - * @return Custom size - */ - public Dimension getCustomSize () { - return requireNonNullElse (this.customSize, WEB_SETTING.getCustomSize ()); - } - - /** - * Gets the host name - * - * @return Host name - */ - public String getHost () { - return requireNonNullElse (this.host, WEB_SETTING.getHost ()); - } - - /** - * Gets the page load strategy - * - * @return page load strategy - */ - public PageLoadStrategy getPageLoadStrategy () { - return requireNonNullElse (this.pageLoadStrategy, WEB_SETTING.getPageLoadStrategy ()); - } - - /** - * Gets cloud password. - * - * @return the cloud password - */ - public String getPassword () { - return interpolate (requireNonNullElse (this.password, WEB_SETTING.getPassword ())); - } - - /** - * Gets the platform name - * - * @return Platform name - */ - public String getPlatform () { - return requireNonNullElse (this.platform, WEB_SETTING.getPlatform ()); - } - - /** - * Gets the port number - * - * @return Port number - */ - public int getPort () { - return requireNonNullElse (this.port, WEB_SETTING.getPort ()); - } - - /** - * Gets the connection protocol - * - * @return Protocol - */ - public Protocol getProtocol () { - return requireNonNullElse (this.protocol, WEB_SETTING.getProtocol ()); - } - - /** - * Gets the browser window resize type - * - * @return Resize type - */ - public WindowResizeType getResize () { - return requireNonNullElse (this.resize, WEB_SETTING.getResize ()); - } - - /** - * Gets the target provider - * - * @return Target provider - */ - public TargetProviders getTarget () { - return requireNonNullElse (this.target, WEB_SETTING.getTarget ()); - } - - /** - * Gets cloud user name. - * - * @return the cloud username. - */ - public String getUserName () { - return interpolate (requireNonNullElse (this.userName, WEB_SETTING.getUserName ())); - } - - /** - * Gets the browser version - * - * @return Browser version - */ - public String getVersion () { - return requireNonNullElse (this.version, WEB_SETTING.getVersion ()); - } - - /** - * Gets if the browser should be headless - * - * @return Is headless - */ - public boolean isHeadless () { - return requireNonNullElse (this.headless, WEB_SETTING.isHeadless ()); - } - - /** - * Gets if the browser interactions should be highlighted - * - * @return Highlight interactions - */ - public boolean isHighlight () { - return requireNonNullElse (this.highlight, WEB_SETTING.isHighlight ()); - } + private String version = "stable"; } diff --git a/core-java/src/main/java/io/github/boykaframework/enums/Message.java b/core-java/src/main/java/io/github/boykaframework/enums/Message.java index fe9932a58..729c27342 100644 --- a/core-java/src/main/java/io/github/boykaframework/enums/Message.java +++ b/core-java/src/main/java/io/github/boykaframework/enums/Message.java @@ -226,6 +226,14 @@ public enum Message { * Malformed JSON syntax error. */ JSON_SYNTAX_ERROR ("JSON syntax error..."), + /** + * Method invoke failed. + */ + METHOD_INVOKE_FAILED ("Cannot invoke method ({0})..."), + /** + * Method not found. + */ + METHOD_NOT_FOUND ("Method ({0}) is not found in class ({1})..."), /** * No API setting found */ diff --git a/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java b/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java index 0a1a0d20f..532b1dc3f 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/DriverSession.java @@ -18,6 +18,7 @@ import static io.github.boykaframework.enums.Message.INVALID_LISTENER_FOUND; import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; +import static io.github.boykaframework.utils.ReflectionUtil.replaceEmptyWithCommon; import static io.github.boykaframework.utils.SettingUtils.loadSetting; import static java.lang.ClassLoader.getSystemClassLoader; import static java.util.Objects.isNull; @@ -39,9 +40,7 @@ import io.github.boykaframework.config.FrameworkSetting; import io.github.boykaframework.config.TestDataSetting; import io.github.boykaframework.config.api.ApiSetting; -import io.github.boykaframework.config.api.CommonApiSetting; import io.github.boykaframework.config.ui.mobile.MobileSetting; -import io.github.boykaframework.config.ui.web.CommonWebSetting; import io.github.boykaframework.config.ui.web.WebSetting; import io.github.boykaframework.enums.ListenerType; import io.github.boykaframework.enums.PlatformType; @@ -114,28 +113,7 @@ public void clearSharedData () { * @return {@link ApiSetting} instance */ public ApiSetting getApiSetting () { - return this.setting.getApiSetting (this.configKey); - } - - /** - * Gets Common API specific settings - * - * @return {@link CommonApiSetting} instance - */ - public CommonApiSetting getCommonApiSetting () { - return this.setting.getCommonSetting () - .getApi (); - } - - /** - * Gets Common Web Settings. - * - * @return {@link WebSetting} instance - */ - public CommonWebSetting getCommonWebSetting () { - return this.setting.getCommonSetting () - .getUi () - .getWeb (); + return replaceEmptyWithCommon (this.setting.getApiSetting (this.configKey), getCommonApiSetting ()); } /** @@ -171,8 +149,8 @@ public T getListener (final ListenerType listenerType) * @return Mobile setting */ public MobileSetting getMobileSetting () { - return this.setting.getUi () - .getMobileSetting (this.configKey); + return replaceEmptyWithCommon (this.setting.getUi () + .getMobileSetting (this.configKey), getCommonMobileSetting ()); } /** @@ -202,8 +180,8 @@ public TestDataSetting getTestDataSetting () { * @return Web Setting */ public WebSetting getWebSetting () { - return this.setting.getUi () - .getWebSetting (this.configKey); + return replaceEmptyWithCommon (this.setting.getUi () + .getWebSetting (this.configKey), getCommonWebSetting ()); } /** @@ -236,6 +214,23 @@ private void addListeners (final ArrayList listenerList, final String pa } } + private ApiSetting getCommonApiSetting () { + return this.setting.getCommonSetting () + .getApi (); + } + + private MobileSetting getCommonMobileSetting () { + return this.setting.getCommonSetting () + .getUi () + .getMobile (); + } + + private WebSetting getCommonWebSetting () { + return this.setting.getCommonSetting () + .getUi () + .getWeb (); + } + private void loadAllListeners () { final var packageName = getSetting ().getListenersPackage (); final var listenerList = new ArrayList (); diff --git a/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java new file mode 100644 index 000000000..ab58d0bb4 --- /dev/null +++ b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java @@ -0,0 +1,121 @@ +/* + * MIT License + * + * Copyright (c) 2024, Boyka Framework + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + */ + +package io.github.boykaframework.utils; + +import static io.github.boykaframework.enums.Message.METHOD_NOT_FOUND; +import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; +import static java.util.Objects.isNull; +import static org.apache.commons.lang3.StringUtils.isEmpty; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import io.github.boykaframework.config.BoykaConfig; + +/** + * Handles Java reflection related helpers + * + * @author Wasiq Bhamla + * @since 26-Aug-2024 + */ +public final class ReflectionUtil { + /** + * Replaces any null or missing field value with the default object + * + * @param source Source object to scan + * @param defaultObject Default object from where missing values is to be replaced from + * @param Object type + * + * @return New object with all the null and missing fields replaced with default + */ + public static T replaceEmptyWithCommon (final T source, final T defaultObject) { + final var sourceMethods = getMethods (source); + + for (final var sourceMethod : sourceMethods) { + if (sourceMethod.getName () + .startsWith ("get")) { + try { + final var defaultMethod = getMethod (sourceMethod, defaultObject); + final var sourceValue = getMethodValue (sourceMethod, source); + final var defaultValue = getMethodValue (defaultMethod, defaultObject); + + if (shouldReplaceValue (sourceValue, defaultValue)) { + setMethodValue (sourceMethod, source, defaultValue); + } else if (sourceValue instanceof BoykaConfig) { + replaceEmptyWithCommon (sourceValue, defaultValue); + } + } catch (final NoSuchMethodException e) { + handleAndThrow (METHOD_NOT_FOUND, e, sourceMethod.getName (), defaultObject.getClass () + .getSimpleName ()); + } + } + } + return source; + } + + private static Method getMethod (final Method method, final T object) throws NoSuchMethodException { + return object.getClass () + .getDeclaredMethod (method.getName ()); + } + + @SuppressWarnings ("unchecked") + private static E getMethodValue (final Method method, final T object) { + if (method.getName () + .startsWith ("get")) { + try { + return (E) method.invoke (object); + } catch (final IllegalAccessException | InvocationTargetException e) { + handleAndThrow (METHOD_NOT_FOUND, e, method.getName ()); + } + } + return null; + } + + private static Method[] getMethods (final T object) { + return object.getClass () + .getDeclaredMethods (); + } + + private static void setMethodValue (final Method method, final T object, final T value) { + if (!method.getName () + .startsWith ("get") || isNull (value)) { + return; + } + + final var setMethodName = "set" + method.getName () + .substring (3); + try { + final var setter = object.getClass () + .getDeclaredMethod (setMethodName, value.getClass ()); + setter.invoke (object, value); + } catch (final NoSuchMethodException e) { + handleAndThrow (METHOD_NOT_FOUND, e, method.getName (), object.getClass () + .getSimpleName ()); + } catch (final InvocationTargetException | IllegalAccessException e) { + handleAndThrow (METHOD_NOT_FOUND, e, method.getName ()); + } + } + + private static boolean shouldReplaceValue (final Object sourceValue, final Object defaultValue) { + return isNull (sourceValue) || (sourceValue instanceof String && isEmpty (sourceValue.toString ()) && !isEmpty ( + (String) defaultValue)) || (sourceValue instanceof Integer && (int) sourceValue == 0); + } + + private ReflectionUtil () { + // Utility class. + } +} diff --git a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java index 1e1d10a10..0c613ca0f 100644 --- a/core-java/src/main/java/io/github/boykaframework/utils/Validator.java +++ b/core-java/src/main/java/io/github/boykaframework/utils/Validator.java @@ -79,6 +79,15 @@ public static T requireNonNull (final T obj, final Message message, final Ob return obj; } + /** + * Returns default value if current value is null. + * + * @param value Current value to check + * @param defaultValue Default value to use if value is null + * @param Value type + * + * @return non empty value. + */ public static T requireNonNullElse (final T value, final T defaultValue) { if (isNull (value)) { return defaultValue; diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 495b44a67..3215c56f3 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -28,6 +28,44 @@ "width": 1580, "height": 1080 } + }, + "mobile": { + "server": { + "target": "LOCAL", + "session_override": true, + "logging": { + "level": "ERROR", + "debug_spacing": true, + "local_timezone": true, + "timestamp": true + } + }, + "device": { + "type": "VIRTUAL", + "server_install_timeout": 60, + "server_launch_timeout": 60, + "ignore_unimportant_views": true, + "full_reset": true, + "system_port": 8200, + "connect_keyboard": false, + "typing_speed": 35, + "swipe": { + "max_swipe_until_found": 5 + }, + "application": { + "install_timeout": 180, + "wait_timeout": 120 + }, + "virtual_device": { + "headless": true, + "launch_timeout": 180 + }, + "wda": { + "launch_timeout": 120, + "connection_timeout": 120, + "local_port": 8101 + } + } } } }, @@ -193,9 +231,7 @@ "mobile": { "test_local_sauce_android": { "server": { - "target": "LOCAL", "port": 4723, - "session_override": true, "driver": "UI_AUTOMATOR", "allow_insecure": [ "get_server_logs", @@ -206,30 +242,14 @@ "os": "ANDROID", "version": "11", "name": "Pixel_8_Pro", - "type": "VIRTUAL", - "server_install_timeout": 60, - "server_launch_timeout": 60, - "ignore_unimportant_views": true, - "full_reset": true, - "system_port": 8200, - "swipe": { - "max_swipe_until_found": 5 - }, "application": { "path": "/apps/android/sauce-demo.apk", - "wait_activity": "com.swaglabsmobileapp.MainActivity", - "install_timeout": 180, - "wait_timeout": 120 - }, - "virtual_device": { - "name": "Pixel_8_Pro", - "headless": true + "wait_activity": "com.swaglabsmobileapp.MainActivity" } } }, "test_local_wdio_android": { "server": { - "target": "LOCAL", "port": 4724, "external": true, "driver": "UI_AUTOMATOR" @@ -238,32 +258,9 @@ "os": "ANDROID", "version": "11", "name": "Pixel_8_Pro", - "type": "VIRTUAL", - "server_install_timeout": 60, - "system_port": 8201, - "server_launch_timeout": 60, - "ignore_unimportant_views": true, - "full_reset": true, - "swipe": { - "max_swipe_until_found": 5 - }, - "video": { - "enabled": true, - "time_limit": 300, - "size": "800x720", - "android": { - "bit_rate": 4 - } - }, "application": { "path": "/apps/android/wdio-demo.apk", - "type": "HYBRID", - "install_timeout": 180, - "wait_timeout": 120 - }, - "virtual_device": { - "name": "Pixel_8_Pro", - "headless": true + "type": "HYBRID" } } }, @@ -451,16 +448,9 @@ }, "test_local_wdio_ios": { "server": { - "target": "LOCAL", "port": 4726, "callback_port": 4726, - "session_override": true, "driver": "XCUI", - "logging": { - "debug_spacing": true, - "timestamp": true, - "local_timezone": true - }, "other_args": { "--long-stacktrace": true, "--callback-port": 4726, @@ -471,27 +461,9 @@ "os": "IOS", "version": "16.2", "name": "iPhone 14", - "type": "VIRTUAL", - "server_install_timeout": 60, - "server_launch_timeout": 60, - "connect_keyboard": false, - "typing_speed": 35, - "swipe": { - "max_swipe_until_found": 5 - }, - "virtual_device": { - "headless": true, - "launch_timeout": 180 - }, - "wda": { - "launch_timeout": 120, - "connection_timeout": 120, - "local_port": 8101 - }, "application": { "path": "/apps/ios/wdio-demo.app.zip", - "type": "HYBRID", - "install_timeout": 180 + "type": "HYBRID" } } }, diff --git a/package.json b/package.json index b64339905..d4b684a33 100644 --- a/package.json +++ b/package.json @@ -37,13 +37,13 @@ "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-ts": "^2.6.4", "@types/node": "^22.5.0", - "@typescript-eslint/eslint-plugin": "^8.2.0", - "@typescript-eslint/parser": "^8.2.0", + "@typescript-eslint/eslint-plugin": "^8.3.0", + "@typescript-eslint/parser": "^8.3.0", "commitlint": "^19.4.0", "eslint": "^9.9.1", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", - "eslint-import-resolver-typescript": "^3.6.1", + "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-import": "^2.29.1", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.35.0", @@ -55,14 +55,14 @@ "lerna-version": "^6.6.2", "lint-staged": "^15.2.9", "lodash": "^4.17.21", - "nx": "^19.6.2", + "nx": "^19.6.3", "prettier": "^3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", "release-it": "^17.6.0", "ts-node": "^10.9.2", "typescript": "^5.5.4", - "typescript-eslint": "^8.2.0" + "typescript-eslint": "^8.3.0" }, "scripts": { "preinstall": "npx only-allow pnpm", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7c7e38bb6..071c0219b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,11 +30,11 @@ importers: specifier: ^22.5.0 version: 22.5.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.2.0 - version: 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + specifier: ^8.3.0 + version: 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^8.2.0 - version: 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + specifier: ^8.3.0 + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) commitlint: specifier: ^19.4.0 version: 19.4.0(@types/node@22.5.0)(typescript@5.5.4) @@ -48,14 +48,14 @@ importers: specifier: ^9.1.0 version: 9.1.0(eslint@9.9.1(jiti@1.21.6)) eslint-import-resolver-typescript: - specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) + specifier: ^3.6.3 + version: 3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)) + version: 2.29.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-prettier: specifier: ^5.2.1 - version: 5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3) + version: 5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3) eslint-plugin-react: specifier: ^7.35.0 version: 7.35.0(eslint@9.9.1(jiti@1.21.6)) @@ -84,8 +84,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 nx: - specifier: ^19.6.2 - version: 19.6.2 + specifier: ^19.6.3 + version: 19.6.3 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -105,8 +105,8 @@ importers: specifier: ^5.5.4 version: 5.5.4 typescript-eslint: - specifier: ^8.2.0 - version: 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + specifier: ^8.3.0 + version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) website: dependencies: @@ -1306,6 +1306,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + '@npmcli/agent@2.2.2': resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==} engines: {node: ^16.14.0 || >=18.0.0} @@ -1487,8 +1491,8 @@ packages: resolution: {integrity: sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==} hasBin: true - '@nrwl/tao@19.6.2': - resolution: {integrity: sha512-DcqpaKpkUbF+J2kVRoLtYZOFpr8mu4+fHiKIjrdliKVabSOzekwRAx0DN+VZdpUoaZ2+5W+F8RFhSak1216ZCg==} + '@nrwl/tao@19.6.3': + resolution: {integrity: sha512-j4vPU87yBhTrdyPFSNhlUkN29w4BQ+M14khT8PFGe+Y26gHMxNRNXNFUCwtVARYAc6IwxS8Uvlwy7AwXG2ETPA==} hasBin: true '@nx/devkit@19.6.1': @@ -1496,62 +1500,62 @@ packages: peerDependencies: nx: '>= 17 <= 20' - '@nx/nx-darwin-arm64@19.6.2': - resolution: {integrity: sha512-WCt9bK5CiuXiiE/8ivoeOEy3J2xYx2Eduea+8PdyK+21FzWakSV4GK0DUfC/dmLPyc+osx2kpmVO+l4HVBIEJw==} + '@nx/nx-darwin-arm64@19.6.3': + resolution: {integrity: sha512-P7WlX5YDZOABAlyfpR6eObigQTNuUuy3iJVUuGwp1Nuo3VPMPkpK1GMWKWLwOR9+2jGnF5MzuqWHk7CdF33uqQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@19.6.2': - resolution: {integrity: sha512-jCB4yTE97/UkUd1V7ttFLJkVRx2vkQgHAqcmU0l8pAPRWKplYkO43J4g4M3M8SyLsX6arPIlfIT3uBh8TzqxXA==} + '@nx/nx-darwin-x64@19.6.3': + resolution: {integrity: sha512-HF28dPc7h0EmEGYJWJUPA3cBvjXyHbSbGQP5oP885gos9zcyVBjQ2kdJEUZDNMHB9KlZraeXbmV1umFkikjn6A==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@19.6.2': - resolution: {integrity: sha512-ZBFTHO9vhaSpzuopAww9xznseNjE2CUXGSq5be0CUBoIvGn4TWvjOfv+tinIbKSYiWdfL1PYMqnE2FIqyxscNA==} + '@nx/nx-freebsd-x64@19.6.3': + resolution: {integrity: sha512-y52dWxQ/x2ccyPqA4Vou4CnTqZX4gr/wV9myJX56G1CyEpWasmcqmPFeOKQd6dj7llGM/KJ/4Gz29RYxcWffcA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@19.6.2': - resolution: {integrity: sha512-Aubnlvx/47zAOIlp+ZWxe6Xq3cX9sSMRsB7xZhLkGnpcKwsKEh+uDWi6yfdnmLBp02ZY16qwcpAeYlyBRHZRUA==} + '@nx/nx-linux-arm-gnueabihf@19.6.3': + resolution: {integrity: sha512-RneCg1tglLbP4cmGnGUs4FgZVT0aOA9wA53tO4IbyxLnlRXNY9OE452YLgqv3H7sLtNjsey2Lkq1seBHtr3p/Q==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@19.6.2': - resolution: {integrity: sha512-LorZsjhaz7vajwzGVAGUMtMpu5232UvJceB7XzUXF1TEWM2FZfSUCdLKdQgR2YZHeALYzVoEQgU/j6zKldMqpw==} + '@nx/nx-linux-arm64-gnu@19.6.3': + resolution: {integrity: sha512-Y+vgqaxrPQUEtCzxK25QY4ahO90l0eWgVrvCALexGmq0lW41JrVpfTTsbH/BAPLsx+u8A/GPAQAgrmg7d5lSxw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@19.6.2': - resolution: {integrity: sha512-+s4BD6NkmsrnxYHWpJ84Lm49rsTa5tY4Zpz09kpMCc7NNQdIYtWimexGmaHGiIY9FmwqaQCx54lCxSXUXQ3hoQ==} + '@nx/nx-linux-arm64-musl@19.6.3': + resolution: {integrity: sha512-o/99DBgafbjiJ4e9KFxaldvtlZta/FdzEiQQW+SQQ0JGSYlLCZZ8tIT6t3edV7cmG+gQLNMwolJzgpY53O9wjA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@19.6.2': - resolution: {integrity: sha512-O7ao0x7j7mwgPS8DkWmMtewTRyharQSURq2kUgWwyCJgVbr5ggV8RySmt/uLT9Tv/2LUDerWdBnd30oDr70M5g==} + '@nx/nx-linux-x64-gnu@19.6.3': + resolution: {integrity: sha512-ppp0NBOhwJ39U1vR7h8jhFSfiur6CZPSUYjXsV44BlaNGc1wHZ+7FDXhzOTokgTNWHavYgYOJuVan5LtTLKJkA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@19.6.2': - resolution: {integrity: sha512-7tVOQoorw8o1n5CAtLTlJx9oI/py+V3NX0PTdX/Pa7tA6gxyrZW51HlpODssRZ5PM9171G8VAZVROP9eDLfntQ==} + '@nx/nx-linux-x64-musl@19.6.3': + resolution: {integrity: sha512-H7xgsT5OTtVYCXjXBLZu28v+rIInhbUggrgVJ2iQJFGBT2A2qmvGmDJdcDz8+K90ku1f4VuWmm8i+TEyDEcBuQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@19.6.2': - resolution: {integrity: sha512-l12NsHLaCAYdZPOP8KrXnSWxrytcJuifBJTejy7Xu9rFQMEDWI7dKap8vKJrYIRUtJjOsF8Yjq38064noZkLdw==} + '@nx/nx-win32-arm64-msvc@19.6.3': + resolution: {integrity: sha512-o9O6lSmx67zUnqOtlDC4YpC++fiUkixgIsQEG8J/2jdNgAATqOtERcqCNra/uke/Q94Vht2tVXjXF3uj92APhw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@19.6.2': - resolution: {integrity: sha512-B+80FY1kDWHMCOZubt786BtQOZn+LJ6CzjDGHSocqVMVqJDvBzrlf4qwmHeOIACWAsbZtJmWu+do3FriZ53ovA==} + '@nx/nx-win32-x64-msvc@19.6.3': + resolution: {integrity: sha512-6NQhc7jYQ/sqPt5fDy8C+br73kTd5jhb8ZkPtEy2Amr1aA1K9SAxZAYfyvxLHS2z1nBEelNFgXe6HBmDX92FkA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1963,6 +1967,9 @@ packages: '@types/eslint@9.6.0': resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} @@ -2113,8 +2120,8 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@typescript-eslint/eslint-plugin@8.2.0': - resolution: {integrity: sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==} + '@typescript-eslint/eslint-plugin@8.3.0': + resolution: {integrity: sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -2124,8 +2131,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.2.0': - resolution: {integrity: sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==} + '@typescript-eslint/parser@8.3.0': + resolution: {integrity: sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2138,8 +2145,12 @@ packages: resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.2.0': - resolution: {integrity: sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==} + '@typescript-eslint/scope-manager@8.3.0': + resolution: {integrity: sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.3.0': + resolution: {integrity: sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -2151,6 +2162,10 @@ packages: resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.3.0': + resolution: {integrity: sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.2.0': resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2160,16 +2175,35 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.3.0': + resolution: {integrity: sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@8.2.0': resolution: {integrity: sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.3.0': + resolution: {integrity: sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@8.2.0': resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.3.0': + resolution: {integrity: sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -2502,6 +2536,9 @@ packages: axios@1.7.4: resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + axios@1.7.5: + resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} + babel-loader@9.1.3: resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} engines: {node: '>= 14.15.0'} @@ -3262,15 +3299,6 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} @@ -3528,10 +3556,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -3650,12 +3674,18 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true eslint-module-utils@2.8.0: resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} @@ -3678,6 +3708,27 @@ packages: eslint-import-resolver-webpack: optional: true + eslint-module-utils@2.8.2: + resolution: {integrity: sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + eslint-plugin-import@2.29.1: resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} @@ -4106,8 +4157,8 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + get-tsconfig@4.7.6: + resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} get-uri@6.0.3: resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} @@ -4662,6 +4713,9 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} + is-bun-module@1.1.0: + resolution: {integrity: sha512-4mTAVPlrXpaN3jtF0lsnPCMGnq4+qZjVIKq0HCpfcqf8OC1SM5oATCIAPM5V5FN05qp2NNnFndphmdZS9CV3hA==} + is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -5614,6 +5668,10 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -6029,8 +6087,8 @@ packages: '@swc/core': optional: true - nx@19.6.2: - resolution: {integrity: sha512-uUC9glC/QDsDhfOSzWl1id9rfUVepVwLhwBGRMeO5K6+Tju7qAsRGZ2NGPoUz6J1AZuWtlKZcr+MOSK2U4+2wQ==} + nx@19.6.3: + resolution: {integrity: sha512-JbgrEKaIBvTfhw3mG3GeyyzJHBAMfuQkMNrxxIto1fn94gxdjXdMfqUnAzrW6xRAt5OEEU+rf7v2OA3vEXYc3A==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -7791,6 +7849,9 @@ packages: tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tuf-js@1.1.7: resolution: {integrity: sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7861,8 +7922,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.2.0: - resolution: {integrity: sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==} + typescript-eslint@8.3.0: + resolution: {integrity: sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -10173,15 +10234,15 @@ snapshots: '@emnapi/core@1.2.0': dependencies: '@emnapi/wasi-threads': 1.0.1 - tslib: 2.6.3 + tslib: 2.7.0 '@emnapi/runtime@1.2.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@emnapi/wasi-threads@1.0.1': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1(jiti@1.21.6))': dependencies: @@ -10325,7 +10386,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.2) + '@nx/devkit': 19.6.1(nx@19.6.3) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -10364,7 +10425,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.2 + nx: 19.6.3 p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -10525,6 +10586,8 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 + '@nolyfill/is-core-module@1.0.39': {} + '@npmcli/agent@2.2.2': dependencies: agent-base: 7.1.1 @@ -10797,9 +10860,9 @@ snapshots: tmp: 0.2.3 tslib: 2.6.3 - '@nrwl/devkit@19.6.1(nx@19.6.2)': + '@nrwl/devkit@19.6.1(nx@19.6.3)': dependencies: - '@nx/devkit': 19.6.1(nx@19.6.2) + '@nx/devkit': 19.6.1(nx@19.6.3) transitivePeerDependencies: - nx @@ -10838,56 +10901,56 @@ snapshots: - '@swc/core' - debug - '@nrwl/tao@19.6.2': + '@nrwl/tao@19.6.3': dependencies: - nx: 19.6.2 - tslib: 2.6.3 + nx: 19.6.3 + tslib: 2.7.0 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug - '@nx/devkit@19.6.1(nx@19.6.2)': + '@nx/devkit@19.6.1(nx@19.6.3)': dependencies: - '@nrwl/devkit': 19.6.1(nx@19.6.2) + '@nrwl/devkit': 19.6.1(nx@19.6.3) ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 19.6.2 + nx: 19.6.3 semver: 7.6.3 tmp: 0.2.3 tslib: 2.6.3 yargs-parser: 21.1.1 - '@nx/nx-darwin-arm64@19.6.2': + '@nx/nx-darwin-arm64@19.6.3': optional: true - '@nx/nx-darwin-x64@19.6.2': + '@nx/nx-darwin-x64@19.6.3': optional: true - '@nx/nx-freebsd-x64@19.6.2': + '@nx/nx-freebsd-x64@19.6.3': optional: true - '@nx/nx-linux-arm-gnueabihf@19.6.2': + '@nx/nx-linux-arm-gnueabihf@19.6.3': optional: true - '@nx/nx-linux-arm64-gnu@19.6.2': + '@nx/nx-linux-arm64-gnu@19.6.3': optional: true - '@nx/nx-linux-arm64-musl@19.6.2': + '@nx/nx-linux-arm64-musl@19.6.3': optional: true - '@nx/nx-linux-x64-gnu@19.6.2': + '@nx/nx-linux-x64-gnu@19.6.3': optional: true - '@nx/nx-linux-x64-musl@19.6.2': + '@nx/nx-linux-x64-musl@19.6.3': optional: true - '@nx/nx-win32-arm64-msvc@19.6.2': + '@nx/nx-win32-arm64-msvc@19.6.3': optional: true - '@nx/nx-win32-x64-msvc@19.6.2': + '@nx/nx-win32-x64-msvc@19.6.3': optional: true '@octokit/auth-token@3.0.4': {} @@ -11328,7 +11391,7 @@ snapshots: '@tybys/wasm-util@0.9.0': dependencies: - tslib: 2.6.3 + tslib: 2.7.0 '@types/acorn@4.0.6': dependencies: @@ -11370,6 +11433,12 @@ snapshots: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + optional: true + '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.5 @@ -11532,14 +11601,14 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.2.0 + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.3.0 + '@typescript-eslint/type-utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.3.0 eslint: 9.9.1(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.2 @@ -11550,12 +11619,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 8.2.0 + '@typescript-eslint/scope-manager': 8.3.0 + '@typescript-eslint/types': 8.3.0 + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.3.0 debug: 4.3.6 eslint: 9.9.1(jiti@1.21.6) optionalDependencies: @@ -11568,10 +11637,15 @@ snapshots: '@typescript-eslint/types': 8.2.0 '@typescript-eslint/visitor-keys': 8.2.0 - '@typescript-eslint/type-utils@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + '@typescript-eslint/scope-manager@8.3.0': dependencies: - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/types': 8.3.0 + '@typescript-eslint/visitor-keys': 8.3.0 + + '@typescript-eslint/type-utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) debug: 4.3.6 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: @@ -11582,6 +11656,8 @@ snapshots: '@typescript-eslint/types@8.2.0': {} + '@typescript-eslint/types@8.3.0': {} + '@typescript-eslint/typescript-estree@8.2.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.2.0 @@ -11597,6 +11673,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.3.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.3.0 + '@typescript-eslint/visitor-keys': 8.3.0 + debug: 4.3.6 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) @@ -11608,11 +11699,27 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.3.0 + '@typescript-eslint/types': 8.3.0 + '@typescript-eslint/typescript-estree': 8.3.0(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@8.2.0': dependencies: '@typescript-eslint/types': 8.2.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.3.0': + dependencies: + '@typescript-eslint/types': 8.3.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.2.0': {} '@webassemblyjs/ast@1.12.1': @@ -11700,7 +11807,7 @@ snapshots: '@yarnpkg/parsers@3.0.0-rc.46': dependencies: js-yaml: 3.14.1 - tslib: 2.6.3 + tslib: 2.7.0 '@zkochan/js-yaml@0.0.6': dependencies: @@ -11997,6 +12104,14 @@ snapshots: transitivePeerDependencies: - debug + axios@1.7.5: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + babel-loader@9.1.3(@babel/core@7.24.7)(webpack@5.92.0): dependencies: '@babel/core': 7.24.7 @@ -12918,10 +13033,6 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5: - dependencies: - ms: 2.1.2 - debug@4.3.6: dependencies: ms: 2.1.2 @@ -13151,11 +13262,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -13355,35 +13461,47 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)): dependencies: - debug: 4.3.5 - enhanced-resolve: 5.17.0 + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.6 + enhanced-resolve: 5.17.1 eslint: 9.9.1(jiti@1.21.6) - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)) + eslint-module-utils: 2.8.2(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.13.1 + get-tsconfig: 4.7.6 + is-bun-module: 1.1.0 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)): + eslint-module-utils@2.8.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1(jiti@1.21.6)): + eslint-module-utils@2.8.2(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.1(jiti@1.21.6) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.9.1(jiti@1.21.6)): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.3 @@ -13393,7 +13511,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.9.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -13404,20 +13522,20 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.2.1(@types/eslint@9.6.0)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(@types/eslint@9.6.1)(eslint-config-prettier@9.1.0(eslint@9.9.1(jiti@1.21.6)))(eslint@9.9.1(jiti@1.21.6))(prettier@3.3.3): dependencies: eslint: 9.9.1(jiti@1.21.6) prettier: 3.3.3 prettier-linter-helpers: 1.0.0 synckit: 0.9.1 optionalDependencies: - '@types/eslint': 9.6.0 + '@types/eslint': 9.6.1 eslint-config-prettier: 9.1.0(eslint@9.9.1(jiti@1.21.6)) eslint-plugin-react@7.35.0(eslint@9.9.1(jiti@1.21.6)): @@ -13663,7 +13781,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-glob@3.3.2: dependencies: @@ -13671,7 +13789,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -13946,7 +14064,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: + get-tsconfig@4.7.6: dependencies: resolve-pkg-maps: 1.0.0 @@ -14452,7 +14570,7 @@ snapshots: http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.7 + micromatch: 4.0.8 optionalDependencies: '@types/express': 4.17.21 transitivePeerDependencies: @@ -14699,6 +14817,10 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 + is-bun-module@1.1.0: + dependencies: + semver: 7.6.3 + is-callable@1.2.7: {} is-ci@2.0.0: @@ -15185,7 +15307,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.2) + '@nx/devkit': 19.6.1(nx@19.6.3) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -15230,7 +15352,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.2 + nx: 19.6.3 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -16240,6 +16362,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.33.0: {} mime-db@1.52.0: {} @@ -16749,14 +16876,14 @@ snapshots: transitivePeerDependencies: - debug - nx@19.6.2: + nx@19.6.3: dependencies: '@napi-rs/wasm-runtime': 0.2.4 - '@nrwl/tao': 19.6.2 + '@nrwl/tao': 19.6.3 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 - axios: 1.7.4 + axios: 1.7.5 chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 @@ -16783,20 +16910,20 @@ snapshots: tar-stream: 2.2.0 tmp: 0.2.3 tsconfig-paths: 4.2.0 - tslib: 2.6.3 + tslib: 2.7.0 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 19.6.2 - '@nx/nx-darwin-x64': 19.6.2 - '@nx/nx-freebsd-x64': 19.6.2 - '@nx/nx-linux-arm-gnueabihf': 19.6.2 - '@nx/nx-linux-arm64-gnu': 19.6.2 - '@nx/nx-linux-arm64-musl': 19.6.2 - '@nx/nx-linux-x64-gnu': 19.6.2 - '@nx/nx-linux-x64-musl': 19.6.2 - '@nx/nx-win32-arm64-msvc': 19.6.2 - '@nx/nx-win32-x64-msvc': 19.6.2 + '@nx/nx-darwin-arm64': 19.6.3 + '@nx/nx-darwin-x64': 19.6.3 + '@nx/nx-freebsd-x64': 19.6.3 + '@nx/nx-linux-arm-gnueabihf': 19.6.3 + '@nx/nx-linux-arm64-gnu': 19.6.3 + '@nx/nx-linux-arm64-musl': 19.6.3 + '@nx/nx-linux-x64-gnu': 19.6.3 + '@nx/nx-linux-x64-musl': 19.6.3 + '@nx/nx-win32-arm64-msvc': 19.6.3 + '@nx/nx-win32-x64-msvc': 19.6.3 transitivePeerDependencies: - debug @@ -18789,6 +18916,8 @@ snapshots: tslib@2.6.3: {} + tslib@2.7.0: {} + tuf-js@1.1.7: dependencies: '@tufjs/models': 1.0.4 @@ -18868,11 +18997,11 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): + typescript-eslint@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/parser': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -19241,7 +19370,7 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.12.1) browserslist: 4.23.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.0 + enhanced-resolve: 5.17.1 es-module-lexer: 1.5.3 eslint-scope: 5.1.1 events: 3.3.0 From 945c33fd1e3cd01dbb65d1de0dcae46a9b1151a1 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Tue, 27 Aug 2024 15:53:39 +0300 Subject: [PATCH 07/25] fix(java): :bug: fixed failing web cloud tests --- .../config/ui/web/WebSetting.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java index 3252d7cae..3b10a590c 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java @@ -19,6 +19,7 @@ import static io.github.boykaframework.enums.Protocol.HTTP; import static io.github.boykaframework.enums.TargetProviders.LOCAL; import static io.github.boykaframework.enums.WindowResizeType.NORMAL; +import static io.github.boykaframework.utils.StringUtils.interpolate; import java.util.List; import java.util.Map; @@ -57,4 +58,22 @@ public class WebSetting implements BoykaConfig { private TargetProviders target = LOCAL; private String userName; private String version = "stable"; + + /** + * Gets cloud password. + * + * @return the cloud password + */ + public String getPassword () { + return interpolate (this.password); + } + + /** + * Gets cloud user name. + * + * @return the cloud username. + */ + public String getUserName () { + return interpolate (this.userName); + } } From a8a69569e7e5721809dd435ff44a32c9571ddcd8 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 09:04:01 +0300 Subject: [PATCH 08/25] fix(java): :bug: fixed failing mobile local tests --- .github/workflows/test-core.yml | 8 +-- .../manager/ParallelSession.java | 29 ++++---- .../src/test/resources/boyka-config.json | 8 ++- package.json | 2 +- pnpm-lock.yaml | 70 +++++++++---------- 5 files changed, 63 insertions(+), 54 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index d95bd79f0..4dfce50f1 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -129,7 +129,7 @@ jobs: - check-cloud uses: ./.github/workflows/_test-core-java.yml with: - runs-on: macos-12 + runs-on: macos-latest suite-name: testng-mobile-local run-appium: true run-ios: true @@ -137,10 +137,10 @@ jobs: emulator-name: Pixel_8_Pro emulator-version: 30 emulator-channel: canary - emulator-arch: x86 + emulator-arch: arm64-v8 emulator-target: aosp_atd - simulator-name: iPhone 14 - simulator-version: 16.2 + simulator-name: iPhone 15 + simulator-version: 17.5 # test-mobile-web: # needs: diff --git a/core-java/src/main/java/io/github/boykaframework/manager/ParallelSession.java b/core-java/src/main/java/io/github/boykaframework/manager/ParallelSession.java index d4cb07bd3..5b9ce10cc 100644 --- a/core-java/src/main/java/io/github/boykaframework/manager/ParallelSession.java +++ b/core-java/src/main/java/io/github/boykaframework/manager/ParallelSession.java @@ -19,6 +19,8 @@ import static io.github.boykaframework.enums.Message.SESSION_ALREADY_CLEARED; import static io.github.boykaframework.enums.Message.SESSION_ALREADY_CREATED; import static io.github.boykaframework.enums.Message.SESSION_PERSONA_CANNOT_BE_NULL; +import static io.github.boykaframework.enums.PlatformType.API; +import static io.github.boykaframework.enums.PlatformType.WEB; import static io.github.boykaframework.utils.ErrorHandler.throwError; import static io.github.boykaframework.utils.Validator.requireNonEmpty; import static java.lang.ThreadLocal.withInitial; @@ -32,7 +34,6 @@ import java.util.Map; import io.github.boykaframework.enums.PlatformType; -import io.github.boykaframework.utils.ErrorHandler; import org.apache.logging.log4j.Logger; import org.openqa.selenium.WebDriver; @@ -70,19 +71,23 @@ public static synchronized void clearAllSessions () { */ public static void clearSession () { LOGGER.info ("Clearing session for persona [{}]...", getCurrentPersona ()); - final var session = SESSION.get (); + if (!isSessionCreated ()) { - ErrorHandler.throwError (SESSION_ALREADY_CLEARED); - } - getSession ().clearListeners (); - getSession ().clearSharedData (); - ofNullable (getSession ().getDriver ()).ifPresent (WebDriver::quit); - if (getSession ().getPlatformType () != PlatformType.WEB) { - ofNullable (getSession ().getServiceManager ()).ifPresent (ServiceManager::stopServer); + throwError (SESSION_ALREADY_CLEARED); } - if (isSessionCreated ()) { - session.remove (getCurrentPersona ()); + + final var session = getSession (); + session.clearListeners (); + session.clearSharedData (); + + ofNullable (session.getDriver ()).ifPresent (WebDriver::quit); + + if (session.getPlatformType () != WEB) { + ofNullable (session.getServiceManager ()).ifPresent (ServiceManager::stopServer); } + + SESSION.get () + .remove (getCurrentPersona ()); CURRENT_PERSONA.remove (); } @@ -102,7 +107,7 @@ public static synchronized void createSession (final String persona, final Platf final var currentSession = getSession (); currentSession.setPlatformType (platformType); currentSession.setConfigKey (configKey); - if (platformType != PlatformType.API) { + if (platformType != API) { final var instance = new DriverManager (); instance.setupDriver (); } diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 3215c56f3..91258efac 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -46,6 +46,7 @@ "server_launch_timeout": 60, "ignore_unimportant_views": true, "full_reset": true, + "no_reset": false, "system_port": 8200, "connect_keyboard": false, "typing_speed": 35, @@ -261,6 +262,9 @@ "application": { "path": "/apps/android/wdio-demo.apk", "type": "HYBRID" + }, + "virtual_device": { + "name": "Pixel_8_Pro" } } }, @@ -459,8 +463,8 @@ }, "device": { "os": "IOS", - "version": "16.2", - "name": "iPhone 14", + "version": "17.5", + "name": "iPhone 15", "application": { "path": "/apps/ios/wdio-demo.app.zip", "type": "HYBRID" diff --git a/package.json b/package.json index d4b684a33..1e597b189 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@lerna/child-process": "^7.4.2", "@release-it-plugins/lerna-changelog": "^7.0.0", "@stylistic/eslint-plugin-ts": "^2.6.4", - "@types/node": "^22.5.0", + "@types/node": "^22.5.1", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", "commitlint": "^19.4.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 071c0219b..2e548d1b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,7 +10,7 @@ importers: devDependencies: '@commitlint/cli': specifier: ^19.4.0 - version: 19.4.0(@types/node@22.5.0)(typescript@5.5.4) + version: 19.4.0(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/config-conventional': specifier: ^19.2.2 version: 19.2.2 @@ -27,8 +27,8 @@ importers: specifier: ^2.6.4 version: 2.6.4(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@types/node': - specifier: ^22.5.0 - version: 22.5.0 + specifier: ^22.5.1 + version: 22.5.1 '@typescript-eslint/eslint-plugin': specifier: ^8.3.0 version: 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) @@ -37,7 +37,7 @@ importers: version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) commitlint: specifier: ^19.4.0 - version: 19.4.0(@types/node@22.5.0)(typescript@5.5.4) + version: 19.4.0(@types/node@22.5.1)(typescript@5.5.4) eslint: specifier: ^9.9.1 version: 9.9.1(jiti@1.21.6) @@ -100,7 +100,7 @@ importers: version: 17.6.0(typescript@5.5.4) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@22.5.0)(typescript@5.5.4) + version: 10.9.2(@types/node@22.5.1)(typescript@5.5.4) typescript: specifier: ^5.5.4 version: 5.5.4 @@ -2045,8 +2045,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.5.0': - resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} + '@types/node@22.5.1': + resolution: {integrity: sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -9438,11 +9438,11 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.4.0(@types/node@22.5.0)(typescript@5.5.4)': + '@commitlint/cli@19.4.0(@types/node@22.5.1)(typescript@5.5.4)': dependencies: '@commitlint/format': 19.3.0 '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.4.0(@types/node@22.5.0)(typescript@5.5.4) + '@commitlint/load': 19.4.0(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/read': 19.4.0 '@commitlint/types': 19.0.3 execa: 8.0.1 @@ -9489,7 +9489,7 @@ snapshots: '@commitlint/rules': 19.0.3 '@commitlint/types': 19.0.3 - '@commitlint/load@19.4.0(@types/node@22.5.0)(typescript@5.5.4)': + '@commitlint/load@19.4.0(@types/node@22.5.1)(typescript@5.5.4)': dependencies: '@commitlint/config-validator': 19.0.3 '@commitlint/execute-rule': 19.0.0 @@ -9497,7 +9497,7 @@ snapshots: '@commitlint/types': 19.0.3 chalk: 5.3.0 cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.0.0(@types/node@22.5.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig-typescript-loader: 5.0.0(@types/node@22.5.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -10317,7 +10317,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/yargs': 17.0.32 chalk: 4.1.2 @@ -11400,24 +11400,24 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.3 - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/connect@3.4.38': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/debug@4.1.12': dependencies: @@ -11447,7 +11447,7 @@ snapshots: '@types/express-serve-static-core@4.19.3': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -11475,7 +11475,7 @@ snapshots: '@types/http-proxy@1.17.14': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/istanbul-lib-coverage@2.0.6': {} @@ -11511,11 +11511,11 @@ snapshots: '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/node@17.0.45': {} - '@types/node@22.5.0': + '@types/node@22.5.1': dependencies: undici-types: 6.19.8 @@ -11567,7 +11567,7 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/serve-index@1.9.4': dependencies: @@ -11576,12 +11576,12 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/send': 0.17.4 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/unist@2.0.10': {} @@ -11593,7 +11593,7 @@ snapshots: '@types/ws@8.5.10': dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 '@types/yargs-parser@21.0.3': {} @@ -12594,9 +12594,9 @@ snapshots: commander@8.3.0: {} - commitlint@19.4.0(@types/node@22.5.0)(typescript@5.5.4): + commitlint@19.4.0(@types/node@22.5.1)(typescript@5.5.4): dependencies: - '@commitlint/cli': 19.4.0(@types/node@22.5.0)(typescript@5.5.4) + '@commitlint/cli': 19.4.0(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/types': 19.0.3 transitivePeerDependencies: - '@types/node' @@ -12820,9 +12820,9 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@22.5.0)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@5.0.0(@types/node@22.5.1)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 cosmiconfig: 9.0.0(typescript@5.5.4) jiti: 1.21.6 typescript: 5.5.4 @@ -13676,7 +13676,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 require-like: 0.1.2 eventemitter3@4.0.7: {} @@ -15066,7 +15066,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.5.0 + '@types/node': 22.5.1 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -15074,13 +15074,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.5.0 + '@types/node': 22.5.1 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -18883,14 +18883,14 @@ snapshots: dependencies: typescript: 5.5.4 - ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4): + ts-node@10.9.2(@types/node@22.5.1)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.5.0 + '@types/node': 22.5.1 acorn: 8.12.0 acorn-walk: 8.3.3 arg: 4.1.3 From 482b2200392e577ab1dc75446dd9ba77cff815e1 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 09:09:59 +0300 Subject: [PATCH 09/25] fix(workflow): :bug: fixed failing mobile local workflow --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 4dfce50f1..e1a940ad6 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -137,7 +137,7 @@ jobs: emulator-name: Pixel_8_Pro emulator-version: 30 emulator-channel: canary - emulator-arch: arm64-v8 + emulator-arch: arm64-v8a emulator-target: aosp_atd simulator-name: iPhone 15 simulator-version: 17.5 From 67fea0ec511e42a535e4c5376ff67da96b150287 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 09:42:28 +0300 Subject: [PATCH 10/25] fix(workflow): :bug: fixed failing api and mobile workflow --- .github/workflows/test-core.yml | 2 +- core-java/src/test/resources/boyka-config.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index e1a940ad6..938e6b017 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -137,7 +137,7 @@ jobs: emulator-name: Pixel_8_Pro emulator-version: 30 emulator-channel: canary - emulator-arch: arm64-v8a + emulator-arch: x86 emulator-target: aosp_atd simulator-name: iPhone 15 simulator-version: 17.5 diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 91258efac..7247cc2cf 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -11,9 +11,9 @@ "response": true }, "timeout": { - "read_timeout": 3, - "write_timeout": 3, - "connection_timeout": 5 + "read_timeout": 10, + "write_timeout": 10, + "connection_timeout": 10 }, "schema_path": "schema/" }, From f05eec7ad246b0ccc7eeddfed02aa4e6fe56638b Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 11:05:21 +0300 Subject: [PATCH 11/25] fix(workflow): :bug: fixing failing mobile local workflow --- .github/workflows/test-core.yml | 10 ++-- .../src/test/resources/boyka-config.json | 2 +- package.json | 6 +-- pnpm-lock.yaml | 48 +++++++++---------- 4 files changed, 33 insertions(+), 33 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 938e6b017..bd7618b26 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -129,16 +129,16 @@ jobs: - check-cloud uses: ./.github/workflows/_test-core-java.yml with: - runs-on: macos-latest + runs-on: macos-14 suite-name: testng-mobile-local run-appium: true run-ios: true run-android: true emulator-name: Pixel_8_Pro - emulator-version: 30 - emulator-channel: canary - emulator-arch: x86 - emulator-target: aosp_atd + emulator-version: 34 + emulator-channel: stable + emulator-arch: x86_64 + emulator-target: playstore simulator-name: iPhone 15 simulator-version: 17.5 diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 7247cc2cf..f6ede4534 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -257,7 +257,7 @@ }, "device": { "os": "ANDROID", - "version": "11", + "version": "14", "name": "Pixel_8_Pro", "application": { "path": "/apps/android/wdio-demo.apk", diff --git a/package.json b/package.json index 1e597b189..cf40bfe66 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ "license": "MIT", "private": true, "devDependencies": { - "@commitlint/cli": "^19.4.0", - "@commitlint/config-conventional": "^19.2.2", + "@commitlint/cli": "^19.4.1", + "@commitlint/config-conventional": "^19.4.1", "@eslint/compat": "^1.1.1", "@lerna/child-process": "^7.4.2", "@release-it-plugins/lerna-changelog": "^7.0.0", @@ -39,7 +39,7 @@ "@types/node": "^22.5.1", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", - "commitlint": "^19.4.0", + "commitlint": "^19.4.1", "eslint": "^9.9.1", "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^9.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e548d1b2..82ca76fdc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,11 +9,11 @@ importers: .: devDependencies: '@commitlint/cli': - specifier: ^19.4.0 - version: 19.4.0(@types/node@22.5.1)(typescript@5.5.4) + specifier: ^19.4.1 + version: 19.4.1(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.4.1 + version: 19.4.1 '@eslint/compat': specifier: ^1.1.1 version: 1.1.1 @@ -36,8 +36,8 @@ importers: specifier: ^8.3.0 version: 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) commitlint: - specifier: ^19.4.0 - version: 19.4.0(@types/node@22.5.1)(typescript@5.5.4) + specifier: ^19.4.1 + version: 19.4.1(@types/node@22.5.1)(typescript@5.5.4) eslint: specifier: ^9.9.1 version: 9.9.1(jiti@1.21.6) @@ -900,13 +900,13 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@commitlint/cli@19.4.0': - resolution: {integrity: sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==} + '@commitlint/cli@19.4.1': + resolution: {integrity: sha512-EerFVII3ZcnhXsDT9VePyIdCJoh3jEzygN1L37MjQXgPfGS6fJTWL/KHClVMod1d8w94lFC3l4Vh/y5ysVAz2A==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.4.1': + resolution: {integrity: sha512-D5S5T7ilI5roybWGc8X35OBlRXLAwuTseH1ro0XgqkOWrhZU8yOwBOslrNmSDlTXhXLq8cnfhQyC42qaUCzlXA==} engines: {node: '>=v18'} '@commitlint/config-validator@19.0.3': @@ -929,8 +929,8 @@ packages: resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.4.1': + resolution: {integrity: sha512-Ws4YVAZ0jACTv6VThumITC1I5AG0UyXMGua3qcf55JmXIXm/ejfaVKykrqx7RyZOACKVAs8uDRIsEsi87JZ3+Q==} engines: {node: '>=v18'} '@commitlint/load@19.4.0': @@ -953,8 +953,8 @@ packages: resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.4.1': + resolution: {integrity: sha512-AgctfzAONoVxmxOXRyxXIq7xEPrd7lK/60h2egp9bgGUMZK9v0+YqLOA+TH+KqCa63ZoCr8owP2YxoSSu7IgnQ==} engines: {node: '>=v18'} '@commitlint/to-lines@19.0.0': @@ -2939,8 +2939,8 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - commitlint@19.4.0: - resolution: {integrity: sha512-aZU6Y5j918XufTVbm5fOu1xOeUgDcBiVfRpFxkOb83RMsPcYAW6maWRmm6Vs6YhSQbOEZ2+AE+IPoVFvoevQqg==} + commitlint@19.4.1: + resolution: {integrity: sha512-w9PRvPad1ywVXl4QuS/OA9kzyoyW68dIpaxTdezpr1ycZeYkBRUHRQMmtL5rSYw1JytktojaKEBuvf1neDmeCg==} engines: {node: '>=v18'} hasBin: true @@ -9438,10 +9438,10 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@commitlint/cli@19.4.0(@types/node@22.5.1)(typescript@5.5.4)': + '@commitlint/cli@19.4.1(@types/node@22.5.1)(typescript@5.5.4)': dependencies: '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 + '@commitlint/lint': 19.4.1 '@commitlint/load': 19.4.0(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/read': 19.4.0 '@commitlint/types': 19.0.3 @@ -9451,7 +9451,7 @@ snapshots: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.4.1': dependencies: '@commitlint/types': 19.0.3 conventional-changelog-conventionalcommits: 7.0.2 @@ -9482,11 +9482,11 @@ snapshots: '@commitlint/types': 19.0.3 semver: 7.6.3 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.4.1': dependencies: '@commitlint/is-ignored': 19.2.2 '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 + '@commitlint/rules': 19.4.1 '@commitlint/types': 19.0.3 '@commitlint/load@19.4.0(@types/node@22.5.1)(typescript@5.5.4)': @@ -9530,7 +9530,7 @@ snapshots: lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': + '@commitlint/rules@19.4.1': dependencies: '@commitlint/ensure': 19.0.3 '@commitlint/message': 19.0.0 @@ -12594,9 +12594,9 @@ snapshots: commander@8.3.0: {} - commitlint@19.4.0(@types/node@22.5.1)(typescript@5.5.4): + commitlint@19.4.1(@types/node@22.5.1)(typescript@5.5.4): dependencies: - '@commitlint/cli': 19.4.0(@types/node@22.5.1)(typescript@5.5.4) + '@commitlint/cli': 19.4.1(@types/node@22.5.1)(typescript@5.5.4) '@commitlint/types': 19.0.3 transitivePeerDependencies: - '@types/node' From bca7bbfb4fe2363d579f1739576465ebab7fcf51 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 11:29:30 +0300 Subject: [PATCH 12/25] fix(workflow): :bug: fixing failing mobile local workflow try 2 --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index bd7618b26..dbaf45f7d 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -138,7 +138,7 @@ jobs: emulator-version: 34 emulator-channel: stable emulator-arch: x86_64 - emulator-target: playstore + emulator-target: google_apis simulator-name: iPhone 15 simulator-version: 17.5 From 12715fe5aff8d925e040f63aa396ee1acb6e61af Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 11:43:08 +0300 Subject: [PATCH 13/25] fix(workflow): :bug: fixing failing mobile local workflow try 3 --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index dbaf45f7d..27d9b8bfb 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -129,7 +129,7 @@ jobs: - check-cloud uses: ./.github/workflows/_test-core-java.yml with: - runs-on: macos-14 + runs-on: macos-14-large suite-name: testng-mobile-local run-appium: true run-ios: true From eea6b3b4b58aa3f8f1813780b2c3b1bb14bc3f8f Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 11:48:58 +0300 Subject: [PATCH 14/25] fix(workflow): :bug: fixing failing mobile local workflow try 4 --- .github/workflows/test-core.yml | 4 ++-- core-java/src/test/resources/boyka-config.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 27d9b8bfb..28de92f26 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -129,7 +129,7 @@ jobs: - check-cloud uses: ./.github/workflows/_test-core-java.yml with: - runs-on: macos-14-large + runs-on: macos-13 suite-name: testng-mobile-local run-appium: true run-ios: true @@ -140,7 +140,7 @@ jobs: emulator-arch: x86_64 emulator-target: google_apis simulator-name: iPhone 15 - simulator-version: 17.5 + simulator-version: 17.2 # test-mobile-web: # needs: diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index f6ede4534..cfb7d2ca0 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -463,7 +463,7 @@ }, "device": { "os": "IOS", - "version": "17.5", + "version": "17.2", "name": "iPhone 15", "application": { "path": "/apps/ios/wdio-demo.app.zip", From 4d824398c29887d28cc1bef64ac5a41fee2529d2 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 15:09:52 +0300 Subject: [PATCH 15/25] fix(workflow): :bug: fixing failing mobile local workflow try 5 --- .github/workflows/_test-core-java.yml | 6 +++++- .github/workflows/test-core.yml | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/_test-core-java.yml b/.github/workflows/_test-core-java.yml index ea7b93f8e..ee1846b38 100644 --- a/.github/workflows/_test-core-java.yml +++ b/.github/workflows/_test-core-java.yml @@ -27,6 +27,10 @@ on: type: string description: Emulator / Simulator name default: Pixel_7_Pro + emulator-profile: + type: string + description: Emulator Profile name + default: pixel_6_pro emulator-target: type: string description: Emulator target image @@ -120,7 +124,7 @@ jobs: api-level: ${{ inputs.emulator-version }} target: ${{ inputs.emulator-target }} arch: ${{ inputs.emulator-arch }} - profile: pixel_6_pro + profile: ${{ inputs.emulator-profile }} channel: ${{ inputs.emulator-channel }} force-avd-creation: false emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 28de92f26..b8fff4f60 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -135,10 +135,11 @@ jobs: run-ios: true run-android: true emulator-name: Pixel_8_Pro + emulator-profile: pixel_7_pro emulator-version: 34 emulator-channel: stable emulator-arch: x86_64 - emulator-target: google_apis + emulator-target: aosp_atd simulator-name: iPhone 15 simulator-version: 17.2 From 26ab08f442d313ec55ac9cf5f3231889a57c4377 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Wed, 28 Aug 2024 16:17:56 +0300 Subject: [PATCH 16/25] fix(workflow): :bug: fixing failing mobile local workflow try 6 --- .github/workflows/test-core.yml | 4 ++-- .../config/ui/mobile/device/DeviceSetting.java | 6 +++--- core-java/src/test/resources/boyka-config.json | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index b8fff4f60..178b33d6f 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -140,8 +140,8 @@ jobs: emulator-channel: stable emulator-arch: x86_64 emulator-target: aosp_atd - simulator-name: iPhone 15 - simulator-version: 17.2 + simulator-name: iPhone 14 + simulator-version: 16.2 # test-mobile-web: # needs: diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java index d75a76e51..13b464061 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java @@ -35,7 +35,7 @@ @Data public class DeviceSetting implements BoykaConfig { private boolean acceptAlerts = true; - private Integer adbTimeout = 30; + private Integer adbTimeout = 0; private ApplicationSetting application; private Map capabilities; private boolean clearFiles = true; @@ -45,8 +45,8 @@ public class DeviceSetting implements BoykaConfig { private String name; private boolean noReset = true; private OS os = ANDROID; - private Integer serverInstallTimeout = 30; - private Integer serverLaunchTimeout = 30; + private Integer serverInstallTimeout = 0; + private Integer serverLaunchTimeout = 0; private SwipeSetting swipe = new SwipeSetting (); private Integer systemPort = 8200; private DeviceType type = VIRTUAL; diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index cfb7d2ca0..44174da8a 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -463,8 +463,8 @@ }, "device": { "os": "IOS", - "version": "17.2", - "name": "iPhone 15", + "version": "16.2", + "name": "iPhone 14", "application": { "path": "/apps/ios/wdio-demo.app.zip", "type": "HYBRID" From 4baa15cb5527a96c2eb6805f0e563753778b47bd Mon Sep 17 00:00:00 2001 From: WasiqB Date: Thu, 29 Aug 2024 11:29:03 +0300 Subject: [PATCH 17/25] fix(workflow): :bug: fixing failing mobile local workflow try 7 --- .github/workflows/test-core.yml | 4 +- .../src/test/resources/boyka-config.json | 6 +- package.json | 2 +- pnpm-lock.yaml | 198 +++++++++--------- 4 files changed, 105 insertions(+), 105 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 178b33d6f..35e5b9477 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -129,14 +129,14 @@ jobs: - check-cloud uses: ./.github/workflows/_test-core-java.yml with: - runs-on: macos-13 + runs-on: macos-12 suite-name: testng-mobile-local run-appium: true run-ios: true run-android: true emulator-name: Pixel_8_Pro emulator-profile: pixel_7_pro - emulator-version: 34 + emulator-version: 31 emulator-channel: stable emulator-arch: x86_64 emulator-target: aosp_atd diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 44174da8a..a67ebb482 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -42,8 +42,8 @@ }, "device": { "type": "VIRTUAL", - "server_install_timeout": 60, - "server_launch_timeout": 60, + "server_install_timeout": 90, + "server_launch_timeout": 90, "ignore_unimportant_views": true, "full_reset": true, "no_reset": false, @@ -257,7 +257,7 @@ }, "device": { "os": "ANDROID", - "version": "14", + "version": "12", "name": "Pixel_8_Pro", "application": { "path": "/apps/android/wdio-demo.apk", diff --git a/package.json b/package.json index cf40bfe66..4bdf0af63 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "lerna-version": "^6.6.2", "lint-staged": "^15.2.9", "lodash": "^4.17.21", - "nx": "^19.6.3", + "nx": "^19.6.4", "prettier": "^3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82ca76fdc..df5f69855 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,8 +84,8 @@ importers: specifier: ^4.17.21 version: 4.17.21 nx: - specifier: ^19.6.3 - version: 19.6.3 + specifier: ^19.6.4 + version: 19.6.4 prettier: specifier: ^3.3.3 version: 3.3.3 @@ -118,7 +118,7 @@ importers: version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/preset-classic': specifier: 3.5.2 - version: 3.5.2(@algolia/client-search@5.1.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) + version: 3.5.2(@algolia/client-search@5.2.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/theme-classic': specifier: ^3.5.2 version: 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) @@ -200,8 +200,8 @@ packages: '@algolia/client-common@4.23.3': resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - '@algolia/client-common@5.1.1': - resolution: {integrity: sha512-jkQNQbGY+XQB3Eln7wqqdUZKBzG8lETcsaUk5gcMc6iIwyN/qW0v0fhpKPH+Kli+BImLxo0CWk12CvVvx2exWA==} + '@algolia/client-common@5.2.1': + resolution: {integrity: sha512-f4u3TdqU8310ffGhcCjYtTBXXnVVQ9U38Gnltayxm5Hh63BxgzJzvELUcEuOaZh31CvC1FqttKx127gF90aaQg==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.23.3': @@ -210,8 +210,8 @@ packages: '@algolia/client-search@4.23.3': resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - '@algolia/client-search@5.1.1': - resolution: {integrity: sha512-SFpb3FI/VouGou/vpuS7qeCA5Y/KpV42P6CEA/1MZQtl/xJkl6PVjikb+Q9YadeHi2jtDV/aQ6PyiVDnX4PQcw==} + '@algolia/client-search@5.2.1': + resolution: {integrity: sha512-9os21w5CmC84FZZujufLcZPnYKuTVJ3J6LF4i1/i1BKJzy1Cbb9bTWXn+e9PGdRJBzo4DRZt0D0Pd2X5dvUucg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': @@ -229,8 +229,8 @@ packages: '@algolia/requester-browser-xhr@4.23.3': resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - '@algolia/requester-browser-xhr@5.1.1': - resolution: {integrity: sha512-NXmN1ujJCj5GlJQaMK6DbdiXdcf6nhRef/X40lu9TYi71q9xTo/5RPMI0K2iOp6g07S26BrXFOz6RSV3Ny4LLw==} + '@algolia/requester-browser-xhr@5.2.1': + resolution: {integrity: sha512-KRDJRPEdIcej/KgqDqhUs/vhLwVh2oKYa+GaKIFGiyRaWusjwaUYdrWgiLxcHAWNKIeIpwjKnteU/dwCz+Nykg==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.23.3': @@ -239,8 +239,8 @@ packages: '@algolia/requester-node-http@4.23.3': resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - '@algolia/requester-node-http@5.1.1': - resolution: {integrity: sha512-xwrgnNTIzgxDEx6zuCKSKTPzQLA8fL/WZiVB6fRpIu5agLMjoAi0cWA5YSDbo+2FFxqVgLqKY/Jz6mKmWtY15Q==} + '@algolia/requester-node-http@5.2.1': + resolution: {integrity: sha512-Q9LE92zL8EZhe9+H7pwG6mMdU7RNtVrGtheM7lMfZoejpkR/DBTr2/5FCB5OsUk7iLSIwP43AKWX+2rTv0cLaA==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.23.3': @@ -1491,8 +1491,8 @@ packages: resolution: {integrity: sha512-OBnHNvQf3vBH0qh9YnvBQQWyyFZ+PWguF6dJ8+1vyQYlrLVk/XZ8nJ4ukWFb+QfPv/O8VBmqaofaOI9aFC4yTw==} hasBin: true - '@nrwl/tao@19.6.3': - resolution: {integrity: sha512-j4vPU87yBhTrdyPFSNhlUkN29w4BQ+M14khT8PFGe+Y26gHMxNRNXNFUCwtVARYAc6IwxS8Uvlwy7AwXG2ETPA==} + '@nrwl/tao@19.6.4': + resolution: {integrity: sha512-1J8cD+MFzsmboiGe03VlQZ8gt64k/TaYYPZivnnhOJolPPs75nz1JyJX55uWcKKRy/b7FZNKWIu/6Wp9JDhJrQ==} hasBin: true '@nx/devkit@19.6.1': @@ -1500,62 +1500,62 @@ packages: peerDependencies: nx: '>= 17 <= 20' - '@nx/nx-darwin-arm64@19.6.3': - resolution: {integrity: sha512-P7WlX5YDZOABAlyfpR6eObigQTNuUuy3iJVUuGwp1Nuo3VPMPkpK1GMWKWLwOR9+2jGnF5MzuqWHk7CdF33uqQ==} + '@nx/nx-darwin-arm64@19.6.4': + resolution: {integrity: sha512-kRn2FLvhwJA/TJrNlsCSqqQTrguNZLmiRsiXhvjkfUMbUKwyQfVMgJlvkZ+KoqraUSG+Qyb0FmrGur1I/Mld0Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@19.6.3': - resolution: {integrity: sha512-HF28dPc7h0EmEGYJWJUPA3cBvjXyHbSbGQP5oP885gos9zcyVBjQ2kdJEUZDNMHB9KlZraeXbmV1umFkikjn6A==} + '@nx/nx-darwin-x64@19.6.4': + resolution: {integrity: sha512-3uABBUhxVk+SdRwpUu30iuBlgRWm3tA/G9seG+wt7oN2R+fOu8zzRCYa+Blvoh1Ef+D9743Ir4rDc9Mhzl2B2g==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@19.6.3': - resolution: {integrity: sha512-y52dWxQ/x2ccyPqA4Vou4CnTqZX4gr/wV9myJX56G1CyEpWasmcqmPFeOKQd6dj7llGM/KJ/4Gz29RYxcWffcA==} + '@nx/nx-freebsd-x64@19.6.4': + resolution: {integrity: sha512-OG83MiEk5L54/vAldmwZJBKEvZaM+DEIDqn2yZLTToBRj5Z9jwKJX3jKP60xbHiaT/hzsb1xPlwhOHJnYd80EQ==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@19.6.3': - resolution: {integrity: sha512-RneCg1tglLbP4cmGnGUs4FgZVT0aOA9wA53tO4IbyxLnlRXNY9OE452YLgqv3H7sLtNjsey2Lkq1seBHtr3p/Q==} + '@nx/nx-linux-arm-gnueabihf@19.6.4': + resolution: {integrity: sha512-hQ9x4qSKUh9mIVDuD270ULrBnmYfDTjXq7LnIwECw1AuP4LkKzKxULhsbqVnFQ/k3xxyFkwyGTIu2mfDcw16Gw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@19.6.3': - resolution: {integrity: sha512-Y+vgqaxrPQUEtCzxK25QY4ahO90l0eWgVrvCALexGmq0lW41JrVpfTTsbH/BAPLsx+u8A/GPAQAgrmg7d5lSxw==} + '@nx/nx-linux-arm64-gnu@19.6.4': + resolution: {integrity: sha512-OFKpAHiaVg3YGFIMBmi/JshciP9buwtOPiHDXcQdzQgE22jyYzKEiFxfcpG0nCT8PlMYAbHPAda15WfWkfVGVQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@19.6.3': - resolution: {integrity: sha512-o/99DBgafbjiJ4e9KFxaldvtlZta/FdzEiQQW+SQQ0JGSYlLCZZ8tIT6t3edV7cmG+gQLNMwolJzgpY53O9wjA==} + '@nx/nx-linux-arm64-musl@19.6.4': + resolution: {integrity: sha512-ZIR9u+mN0A7SmNd6vDxmPV1QVTgYPTdfBSM5TEnKl3q2fHw2Nkui81QBxA4d7VopJoJUz/pRHiUV+dlgEEZ6nA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@19.6.3': - resolution: {integrity: sha512-ppp0NBOhwJ39U1vR7h8jhFSfiur6CZPSUYjXsV44BlaNGc1wHZ+7FDXhzOTokgTNWHavYgYOJuVan5LtTLKJkA==} + '@nx/nx-linux-x64-gnu@19.6.4': + resolution: {integrity: sha512-AUMPvLs9KeCUuWD5DdlpbP3VfVsiD0IlptS2b3ul336rsQ7LwwdvE7jTVO5CixFOsiRZxP72fKJhaEargMn5Aw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@19.6.3': - resolution: {integrity: sha512-H7xgsT5OTtVYCXjXBLZu28v+rIInhbUggrgVJ2iQJFGBT2A2qmvGmDJdcDz8+K90ku1f4VuWmm8i+TEyDEcBuQ==} + '@nx/nx-linux-x64-musl@19.6.4': + resolution: {integrity: sha512-PU7AaBlrgnJnDxTiV/PNCu0pHUCzaogm6uNcbzCyFJLGn7DoQK9rkqUMPJjb3CnJkAj9XrrhuZwmOdbrhvHAvA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@19.6.3': - resolution: {integrity: sha512-o9O6lSmx67zUnqOtlDC4YpC++fiUkixgIsQEG8J/2jdNgAATqOtERcqCNra/uke/Q94Vht2tVXjXF3uj92APhw==} + '@nx/nx-win32-arm64-msvc@19.6.4': + resolution: {integrity: sha512-6CCmGWwH/J2k+Uxeci48w4QVhtcQ3hRZ5Z2jh26HI8YzH4wqZyA7QPgLBE6sNCPVLoGW5cBgTsfnyEdr+xarQA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@19.6.3': - resolution: {integrity: sha512-6NQhc7jYQ/sqPt5fDy8C+br73kTd5jhb8ZkPtEy2Amr1aA1K9SAxZAYfyvxLHS2z1nBEelNFgXe6HBmDX92FkA==} + '@nx/nx-win32-x64-msvc@19.6.4': + resolution: {integrity: sha512-jTNrlaFaKtbL2mYOcfPAiljtpF5CI7vbHIqYqBFYLUQXOwW9lOHlO+SeQnft6JYZs0FIr1IdHaCfdOw/hpnCiQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -6087,8 +6087,8 @@ packages: '@swc/core': optional: true - nx@19.6.3: - resolution: {integrity: sha512-JbgrEKaIBvTfhw3mG3GeyyzJHBAMfuQkMNrxxIto1fn94gxdjXdMfqUnAzrW6xRAt5OEEU+rf7v2OA3vEXYc3A==} + nx@19.6.4: + resolution: {integrity: sha512-yudYlBd3cMchRd8c0ZNan1SfT19AYK2zYOp77XVqVVwgqb6rJVxz6StFGFluUQ7Q7uSpkeT/8PsjwPVLt85EoQ==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -8446,32 +8446,32 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) search-insights: 2.17.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) - '@algolia/client-search': 5.1.1 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) + '@algolia/client-search': 5.2.1 algoliasearch: 4.23.3 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)': dependencies: - '@algolia/client-search': 5.1.1 + '@algolia/client-search': 5.2.1 algoliasearch: 4.23.3 '@algolia/cache-browser-local-storage@4.23.3': @@ -8502,7 +8502,7 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-common@5.1.1': {} + '@algolia/client-common@5.2.1': {} '@algolia/client-personalization@4.23.3': dependencies: @@ -8516,11 +8516,11 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-search@5.1.1': + '@algolia/client-search@5.2.1': dependencies: - '@algolia/client-common': 5.1.1 - '@algolia/requester-browser-xhr': 5.1.1 - '@algolia/requester-node-http': 5.1.1 + '@algolia/client-common': 5.2.1 + '@algolia/requester-browser-xhr': 5.2.1 + '@algolia/requester-node-http': 5.2.1 '@algolia/events@4.0.1': {} @@ -8548,9 +8548,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-browser-xhr@5.1.1': + '@algolia/requester-browser-xhr@5.2.1': dependencies: - '@algolia/client-common': 5.1.1 + '@algolia/client-common': 5.2.1 '@algolia/requester-common@4.23.3': {} @@ -8558,9 +8558,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http@5.1.1': + '@algolia/requester-node-http@5.2.1': dependencies: - '@algolia/client-common': 5.1.1 + '@algolia/client-common': 5.2.1 '@algolia/transporter@4.23.3': dependencies: @@ -9557,10 +9557,10 @@ snapshots: '@docsearch/css@3.6.0': {} - '@docsearch/react@3.6.0(@algolia/client-search@5.1.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)': + '@docsearch/react@3.6.0(@algolia/client-search@5.2.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3)(search-insights@2.17.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.1.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) '@docsearch/css': 3.6.0 algoliasearch: 4.23.3 optionalDependencies: @@ -9700,7 +9700,7 @@ snapshots: tslib: 2.6.3 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.93.0))(webpack@5.93.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.92.0))(webpack@5.93.0) vfile: 6.0.2 webpack: 5.93.0 transitivePeerDependencies: @@ -9986,7 +9986,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.1.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': + '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.2.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': dependencies: '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) @@ -9999,7 +9999,7 @@ snapshots: '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.1.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) + '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.2.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10104,9 +10104,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.1.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': + '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.2.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@5.1.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0) + '@docsearch/react': 3.6.0(@algolia/client-search@5.2.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0) '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) @@ -10218,7 +10218,7 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.6.3 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.93.0))(webpack@5.93.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.92.0))(webpack@5.93.0) utility-types: 3.11.0 webpack: 5.93.0 optionalDependencies: @@ -10386,7 +10386,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.3) + '@nx/devkit': 19.6.1(nx@19.6.4) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -10425,7 +10425,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.3 + nx: 19.6.4 p-map: 4.0.0 p-map-series: 2.1.0 p-queue: 6.6.2 @@ -10860,9 +10860,9 @@ snapshots: tmp: 0.2.3 tslib: 2.6.3 - '@nrwl/devkit@19.6.1(nx@19.6.3)': + '@nrwl/devkit@19.6.1(nx@19.6.4)': dependencies: - '@nx/devkit': 19.6.1(nx@19.6.3) + '@nx/devkit': 19.6.1(nx@19.6.4) transitivePeerDependencies: - nx @@ -10901,56 +10901,56 @@ snapshots: - '@swc/core' - debug - '@nrwl/tao@19.6.3': + '@nrwl/tao@19.6.4': dependencies: - nx: 19.6.3 + nx: 19.6.4 tslib: 2.7.0 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug - '@nx/devkit@19.6.1(nx@19.6.3)': + '@nx/devkit@19.6.1(nx@19.6.4)': dependencies: - '@nrwl/devkit': 19.6.1(nx@19.6.3) + '@nrwl/devkit': 19.6.1(nx@19.6.4) ejs: 3.1.10 enquirer: 2.3.6 ignore: 5.3.2 minimatch: 9.0.3 - nx: 19.6.3 + nx: 19.6.4 semver: 7.6.3 tmp: 0.2.3 tslib: 2.6.3 yargs-parser: 21.1.1 - '@nx/nx-darwin-arm64@19.6.3': + '@nx/nx-darwin-arm64@19.6.4': optional: true - '@nx/nx-darwin-x64@19.6.3': + '@nx/nx-darwin-x64@19.6.4': optional: true - '@nx/nx-freebsd-x64@19.6.3': + '@nx/nx-freebsd-x64@19.6.4': optional: true - '@nx/nx-linux-arm-gnueabihf@19.6.3': + '@nx/nx-linux-arm-gnueabihf@19.6.4': optional: true - '@nx/nx-linux-arm64-gnu@19.6.3': + '@nx/nx-linux-arm64-gnu@19.6.4': optional: true - '@nx/nx-linux-arm64-musl@19.6.3': + '@nx/nx-linux-arm64-musl@19.6.4': optional: true - '@nx/nx-linux-x64-gnu@19.6.3': + '@nx/nx-linux-x64-gnu@19.6.4': optional: true - '@nx/nx-linux-x64-musl@19.6.3': + '@nx/nx-linux-x64-musl@19.6.4': optional: true - '@nx/nx-win32-arm64-msvc@19.6.3': + '@nx/nx-win32-arm64-msvc@19.6.4': optional: true - '@nx/nx-win32-x64-msvc@19.6.3': + '@nx/nx-win32-x64-msvc@19.6.4': optional: true '@octokit/auth-token@3.0.4': {} @@ -12068,7 +12068,7 @@ snapshots: ast-types@0.13.4: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 astring@1.8.6: {} @@ -15307,7 +15307,7 @@ snapshots: '@npmcli/arborist': 7.5.4 '@npmcli/package-json': 5.2.0 '@npmcli/run-script': 8.1.0 - '@nx/devkit': 19.6.1(nx@19.6.3) + '@nx/devkit': 19.6.1(nx@19.6.4) '@octokit/plugin-enterprise-rest': 6.0.1 '@octokit/rest': 19.0.11(encoding@0.1.13) aproba: 2.0.0 @@ -15352,7 +15352,7 @@ snapshots: npm-package-arg: 11.0.2 npm-packlist: 8.0.2 npm-registry-fetch: 17.1.0 - nx: 19.6.3 + nx: 19.6.4 p-map: 4.0.0 p-map-series: 2.1.0 p-pipe: 3.1.0 @@ -16876,10 +16876,10 @@ snapshots: transitivePeerDependencies: - debug - nx@19.6.3: + nx@19.6.4: dependencies: '@napi-rs/wasm-runtime': 0.2.4 - '@nrwl/tao': 19.6.3 + '@nrwl/tao': 19.6.4 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.7 @@ -16914,16 +16914,16 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 19.6.3 - '@nx/nx-darwin-x64': 19.6.3 - '@nx/nx-freebsd-x64': 19.6.3 - '@nx/nx-linux-arm-gnueabihf': 19.6.3 - '@nx/nx-linux-arm64-gnu': 19.6.3 - '@nx/nx-linux-arm64-musl': 19.6.3 - '@nx/nx-linux-x64-gnu': 19.6.3 - '@nx/nx-linux-x64-musl': 19.6.3 - '@nx/nx-win32-arm64-msvc': 19.6.3 - '@nx/nx-win32-x64-msvc': 19.6.3 + '@nx/nx-darwin-arm64': 19.6.4 + '@nx/nx-darwin-x64': 19.6.4 + '@nx/nx-freebsd-x64': 19.6.4 + '@nx/nx-linux-arm-gnueabihf': 19.6.4 + '@nx/nx-linux-arm64-gnu': 19.6.4 + '@nx/nx-linux-arm64-musl': 19.6.4 + '@nx/nx-linux-x64-gnu': 19.6.4 + '@nx/nx-linux-x64-musl': 19.6.4 + '@nx/nx-win32-arm64-msvc': 19.6.4 + '@nx/nx-win32-x64-msvc': 19.6.4 transitivePeerDependencies: - debug @@ -19184,14 +19184,14 @@ snapshots: optionalDependencies: file-loader: 6.2.0(webpack@5.92.0) - url-loader@4.1.1(file-loader@6.2.0(webpack@5.93.0))(webpack@5.93.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.92.0))(webpack@5.93.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 webpack: 5.93.0 optionalDependencies: - file-loader: 6.2.0(webpack@5.93.0) + file-loader: 6.2.0(webpack@5.92.0) util-deprecate@1.0.2: {} From 04af6424ecde1a59863a30e8bac33a4f9fea17bd Mon Sep 17 00:00:00 2001 From: WasiqB Date: Thu, 29 Aug 2024 11:41:16 +0300 Subject: [PATCH 18/25] fix(workflow): :bug: fixing failing mobile local workflow try 8 --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 35e5b9477..e915b269f 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -135,7 +135,7 @@ jobs: run-ios: true run-android: true emulator-name: Pixel_8_Pro - emulator-profile: pixel_7_pro + emulator-profile: pixel_6_pro emulator-version: 31 emulator-channel: stable emulator-arch: x86_64 From c479dbc5c04961c6ff9eecdc7463e4879914f740 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Thu, 29 Aug 2024 15:45:09 +0300 Subject: [PATCH 19/25] fix(workflow): :bug: fixing failing mobile local workflow try 9 --- .../ui/mobile/device/AndroidVideoSetting.java | 2 +- .../ui/mobile/device/ApplicationSetting.java | 4 +- .../ui/mobile/device/DeviceSetting.java | 4 +- .../ui/mobile/device/IOSVideoSetting.java | 2 +- .../config/ui/mobile/device/SwipeSetting.java | 4 +- .../config/ui/mobile/device/VideoSetting.java | 2 +- .../mobile/device/VirtualDeviceSetting.java | 4 +- .../config/ui/mobile/device/WDASetting.java | 10 ++-- .../config/ui/mobile/server/LogSetting.java | 4 +- .../src/test/resources/boyka-config.json | 15 +++++- core-java/test-suites/testng-mobile-local.xml | 10 ++-- pnpm-lock.yaml | 54 +++++++++---------- 12 files changed, 63 insertions(+), 52 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java index d78c60035..81688acf8 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java @@ -27,5 +27,5 @@ */ @Data public class AndroidVideoSetting implements BoykaConfig { - private Integer bitRate = 4; + private Integer bitRate = 0; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java index 5885bda6a..c478b8eca 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java @@ -36,9 +36,9 @@ public class ApplicationSetting implements BoykaConfig { private String bundleId; private Integer chromeDriverPort = 0; private boolean external; - private Integer installTimeout = 30; + private Integer installTimeout = 0; private String path; private ApplicationType type = NATIVE; private String waitActivity; - private Integer waitTimeout = 30; + private Integer waitTimeout = 0; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java index 13b464061..3ccc8ca08 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java @@ -48,9 +48,9 @@ public class DeviceSetting implements BoykaConfig { private Integer serverInstallTimeout = 0; private Integer serverLaunchTimeout = 0; private SwipeSetting swipe = new SwipeSetting (); - private Integer systemPort = 8200; + private Integer systemPort = 0; private DeviceType type = VIRTUAL; - private Integer typingSpeed = 60; + private Integer typingSpeed = 0; private String uniqueId; private String version; private VideoSetting video = new VideoSetting (); diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java index c7f8cf1c8..13f5c9593 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java @@ -31,6 +31,6 @@ @Data public class IOSVideoSetting implements BoykaConfig { private String codec = "mpeg4"; - private Integer fps = 10; + private Integer fps = 0; private VideoQuality quality = MEDIUM; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java index 14bdc309c..b8de1e9bc 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java @@ -30,7 +30,7 @@ */ @Data public class SwipeSetting implements BoykaConfig { - private Integer distance = 75; - private Integer maxSwipeUntilFound = 5; + private Integer distance = 0; + private Integer maxSwipeUntilFound = 0; private Speed speed = NORMAL; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java index 8bb8d7f8d..41fbed579 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java @@ -33,5 +33,5 @@ public class VideoSetting implements BoykaConfig { private String path = "./videos"; private String prefix = "VID"; private String size; - private Integer timeLimit = 300; + private Integer timeLimit = 0; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java index 8df24d8ff..6912a4422 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java @@ -29,7 +29,7 @@ public class VirtualDeviceSetting implements BoykaConfig { private boolean connectKeyboard = true; private boolean headless = false; - private Integer launchTimeout = 120; + private Integer launchTimeout = 0; private String name; - private Integer readyTimeout = 60; + private Integer readyTimeout = 0; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java index eec98ae33..c6daa90c5 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java @@ -27,12 +27,12 @@ */ @Data public class WDASetting implements BoykaConfig { - private Integer connectionTimeout = 60; - private Integer launchTimeout = 60; - private Integer localPort = 8100; + private Integer connectionTimeout = 0; + private Integer launchTimeout = 0; + private Integer localPort = 0; private String signingId; - private Integer startupRetries = 2; - private Integer startupRetryInterval = 10; + private Integer startupRetries = 0; + private Integer startupRetryInterval = 0; private String teamId; private String updateBundleId; private boolean useNew = true; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java index d48a96c52..dc955698d 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/LogSetting.java @@ -16,8 +16,6 @@ package io.github.boykaframework.config.ui.mobile.server; -import static io.github.boykaframework.enums.LogLevel.ERROR; - import io.github.boykaframework.config.BoykaConfig; import io.github.boykaframework.enums.LogLevel; import lombok.Data; @@ -31,7 +29,7 @@ @Data public class LogSetting implements BoykaConfig { private boolean debugSpacing = true; - private LogLevel level = ERROR; + private LogLevel level; private boolean localTimezone = true; private boolean timestamp = true; } diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index a67ebb482..c272348af 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -34,7 +34,7 @@ "target": "LOCAL", "session_override": true, "logging": { - "level": "ERROR", + "level": "INFO", "debug_spacing": true, "local_timezone": true, "timestamp": true @@ -61,6 +61,19 @@ "headless": true, "launch_timeout": 180 }, + "video": { + "enabled": false, + "time_limit": 300, + "size": "800x720", + "android": { + "bit_rate": 4 + }, + "ios": { + "codec": "mpeg4", + "fps": 10, + "quality": "MEDIUM" + } + }, "wda": { "launch_timeout": 120, "connection_timeout": 120, diff --git a/core-java/test-suites/testng-mobile-local.xml b/core-java/test-suites/testng-mobile-local.xml index 00d8e684b..2684ec93a 100644 --- a/core-java/test-suites/testng-mobile-local.xml +++ b/core-java/test-suites/testng-mobile-local.xml @@ -25,9 +25,9 @@ - - - + + + @@ -38,8 +38,8 @@ - - + + diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ed79a7fa..72bffcc3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2533,8 +2533,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axios@1.7.5: - resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} axios@1.7.5: resolution: {integrity: sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==} @@ -9749,7 +9749,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) reading-time: 1.5.0 srcset: 4.0.0 - tslib: 2.7.0 + tslib: 2.6.3 unist-util-visit: 5.0.0 utility-types: 3.11.0 webpack: 5.92.0 @@ -9822,7 +9822,7 @@ snapshots: fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 + tslib: 2.6.3 webpack: 5.92.0 transitivePeerDependencies: - '@mdx-js/react' @@ -9852,7 +9852,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-json-view-lite: 1.4.0(react@18.3.1) - tslib: 2.7.0 + tslib: 2.6.3 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -9879,7 +9879,7 @@ snapshots: '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 + tslib: 2.6.3 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -9907,7 +9907,7 @@ snapshots: '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 + tslib: 2.6.3 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -9966,7 +9966,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) sitemap: 7.1.2 - tslib: 2.7.0 + tslib: 2.6.3 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -10027,7 +10027,7 @@ snapshots: '@docusaurus/react-loadable@6.0.0(react@18.3.1)': dependencies: - '@types/react': 18.3.3 + '@types/react': 18.3.4 react: 18.3.1 '@docusaurus/theme-classic@3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': @@ -10122,7 +10122,7 @@ snapshots: lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.7.0 + tslib: 2.6.3 utility-types: 3.11.0 transitivePeerDependencies: - '@algolia/client-search' @@ -10352,7 +10352,7 @@ snapshots: '@lerna/child-process@6.6.2': dependencies: - chalk: 4.1.0 + chalk: 4.1.2 execa: 5.0.0 strong-log-transformer: 2.1.0 @@ -10858,7 +10858,7 @@ snapshots: nx: 15.9.7 semver: 7.5.4 tmp: 0.2.3 - tslib: 2.7.0 + tslib: 2.6.3 '@nrwl/devkit@19.6.1(nx@19.6.4)': dependencies: @@ -10920,7 +10920,7 @@ snapshots: nx: 19.6.4 semver: 7.6.3 tmp: 0.2.3 - tslib: 2.7.0 + tslib: 2.6.3 yargs-parser: 21.1.1 '@nx/nx-darwin-arm64@19.6.4': @@ -11546,7 +11546,7 @@ snapshots: '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.3 + '@types/react': 18.3.4 '@types/react@18.3.3': dependencies: @@ -12096,7 +12096,7 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axios@1.7.5: + axios@1.7.4: dependencies: follow-redirects: 1.15.6 form-data: 4.0.0 @@ -13975,7 +13975,7 @@ snapshots: fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 @@ -15056,7 +15056,7 @@ snapshots: jest-diff@29.7.0: dependencies: - chalk: 4.1.2 + chalk: 4.1.0 diff-sequences: 29.6.3 jest-get-type: 29.6.3 pretty-format: 29.7.0 @@ -16610,7 +16610,7 @@ snapshots: env-paths: 2.2.1 exponential-backoff: 3.1.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-fetch-happen: 10.2.1 nopt: 6.0.0 npmlog: 6.0.2 @@ -16834,8 +16834,8 @@ snapshots: '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 '@zkochan/js-yaml': 0.0.6 - axios: 1.7.5 - chalk: 4.1.0 + axios: 1.7.4 + chalk: 4.1.2 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: 7.0.4 @@ -16859,7 +16859,7 @@ snapshots: tar-stream: 2.2.0 tmp: 0.2.3 tsconfig-paths: 4.2.0 - tslib: 2.7.0 + tslib: 2.6.3 v8-compile-cache: 2.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -17159,7 +17159,7 @@ snapshots: ky: 1.5.0 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.2 + semver: 7.6.3 package-json@8.1.1: dependencies: @@ -18209,7 +18209,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.7.0 + tslib: 2.6.3 sade@1.8.1: dependencies: @@ -18275,7 +18275,7 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 semver@5.7.2: {} @@ -18753,7 +18753,7 @@ snapshots: synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.7.0 + tslib: 2.6.3 tapable@1.1.3: {} @@ -19165,7 +19165,7 @@ snapshots: is-npm: 6.0.0 latest-version: 9.0.0 pupa: 3.1.0 - semver: 7.6.2 + semver: 7.6.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -19616,7 +19616,7 @@ snapshots: require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 20.2.4 yargs@17.7.2: dependencies: From c1aa37100e6a1de80fe9b2ec09a041b1cfb218dd Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sat, 31 Aug 2024 19:22:56 +0300 Subject: [PATCH 20/25] fix(workflow): :bug: fixing failing mobile local workflow try 10 --- .../boykaframework/config/api/ApiSetting.java | 2 +- .../config/api/TimeoutSetting.java | 6 +- .../ui/mobile/device/AndroidVideoSetting.java | 2 +- .../ui/mobile/device/ApplicationSetting.java | 8 +- .../ui/mobile/device/DeviceSetting.java | 34 +- .../ui/mobile/device/IOSVideoSetting.java | 2 +- .../config/ui/mobile/device/SwipeSetting.java | 6 +- .../config/ui/mobile/device/VideoSetting.java | 2 +- .../mobile/device/VirtualDeviceSetting.java | 4 +- .../config/ui/mobile/device/WDASetting.java | 12 +- .../ui/mobile/server/ServerSetting.java | 8 +- .../config/ui/web/WebSetting.java | 5 +- .../boykaframework/utils/ReflectionUtil.java | 107 +++++-- .../testng/others/DriverManagerTest.java | 4 +- .../src/test/resources/boyka-config.json | 6 +- package.json | 2 +- pnpm-lock.yaml | 303 +++++++----------- website/package.json | 2 +- 18 files changed, 248 insertions(+), 267 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java index 1d32bc51d..d44c1f471 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/ApiSetting.java @@ -30,7 +30,7 @@ public class ApiSetting implements BoykaConfig { private String basePath = ""; private String baseUri; private LogSetting logging = new LogSetting (); - private Integer port = 0; + private int port = 0; private String schemaPath = ""; private TimeoutSetting timeout = new TimeoutSetting (); private boolean validateSsl = true; diff --git a/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java b/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java index c7f3dc8eb..4a47777f0 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/api/TimeoutSetting.java @@ -27,7 +27,7 @@ */ @Data public class TimeoutSetting implements BoykaConfig { - private Integer connectionTimeout = 5; - private Integer readTimeout = 5; - private Integer writeTimeout = 5; + private int connectionTimeout = 5; + private int readTimeout = 5; + private int writeTimeout = 5; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java index 81688acf8..322ee67b8 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/AndroidVideoSetting.java @@ -27,5 +27,5 @@ */ @Data public class AndroidVideoSetting implements BoykaConfig { - private Integer bitRate = 0; + private int bitRate = 4; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java index c478b8eca..339136c05 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/ApplicationSetting.java @@ -34,11 +34,11 @@ public class ApplicationSetting implements BoykaConfig { private String baseUrl; private Browser browser; private String bundleId; - private Integer chromeDriverPort = 0; - private boolean external; - private Integer installTimeout = 0; + private int chromeDriverPort = 0; + private boolean external = false; + private int installTimeout = 30; private String path; private ApplicationType type = NATIVE; private String waitActivity; - private Integer waitTimeout = 0; + private int waitTimeout = 30; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java index 3ccc8ca08..aa93344ec 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/DeviceSetting.java @@ -34,26 +34,26 @@ */ @Data public class DeviceSetting implements BoykaConfig { - private boolean acceptAlerts = true; - private Integer adbTimeout = 0; + private boolean acceptAlerts; + private int adbTimeout = 30; private ApplicationSetting application; private Map capabilities; - private boolean clearFiles = true; - private boolean clearLogs = true; - private boolean fullReset = false; - private boolean ignoreUnimportantViews = true; + private boolean clearFiles; + private boolean clearLogs; + private boolean fullReset; + private boolean ignoreUnimportantViews; private String name; - private boolean noReset = true; - private OS os = ANDROID; - private Integer serverInstallTimeout = 0; - private Integer serverLaunchTimeout = 0; - private SwipeSetting swipe = new SwipeSetting (); - private Integer systemPort = 0; - private DeviceType type = VIRTUAL; - private Integer typingSpeed = 0; + private boolean noReset; + private OS os = ANDROID; + private int serverInstallTimeout = 30; + private int serverLaunchTimeout = 30; + private SwipeSetting swipe = new SwipeSetting (); + private int systemPort = 8200; + private DeviceType type = VIRTUAL; + private int typingSpeed = 60; private String uniqueId; private String version; - private VideoSetting video = new VideoSetting (); - private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); - private WDASetting wda = new WDASetting (); + private VideoSetting video = new VideoSetting (); + private VirtualDeviceSetting virtualDevice = new VirtualDeviceSetting (); + private WDASetting wda = new WDASetting (); } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java index 13f5c9593..c8cc0f045 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/IOSVideoSetting.java @@ -31,6 +31,6 @@ @Data public class IOSVideoSetting implements BoykaConfig { private String codec = "mpeg4"; - private Integer fps = 0; + private int fps = 10; private VideoQuality quality = MEDIUM; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java index b8de1e9bc..5f38ae985 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/SwipeSetting.java @@ -30,7 +30,7 @@ */ @Data public class SwipeSetting implements BoykaConfig { - private Integer distance = 0; - private Integer maxSwipeUntilFound = 0; - private Speed speed = NORMAL; + private int distance = 75; + private int maxSwipeUntilFound = 5; + private Speed speed = NORMAL; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java index 41fbed579..52dda95b2 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VideoSetting.java @@ -33,5 +33,5 @@ public class VideoSetting implements BoykaConfig { private String path = "./videos"; private String prefix = "VID"; private String size; - private Integer timeLimit = 0; + private int timeLimit = 0; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java index 6912a4422..fa38aa814 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/VirtualDeviceSetting.java @@ -29,7 +29,7 @@ public class VirtualDeviceSetting implements BoykaConfig { private boolean connectKeyboard = true; private boolean headless = false; - private Integer launchTimeout = 0; + private int launchTimeout = 120; private String name; - private Integer readyTimeout = 0; + private int readyTimeout = 60; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java index c6daa90c5..e04d6960b 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/device/WDASetting.java @@ -27,14 +27,14 @@ */ @Data public class WDASetting implements BoykaConfig { - private Integer connectionTimeout = 0; - private Integer launchTimeout = 0; - private Integer localPort = 0; + private int connectionTimeout = 60; + private int launchTimeout = 60; + private int localPort = 8100; private String signingId; - private Integer startupRetries = 0; - private Integer startupRetryInterval = 0; + private int startupRetries = 2; + private int startupRetryInterval = 10; private String teamId; private String updateBundleId; private boolean useNew = true; - private boolean usePrebuilt; + private boolean usePrebuilt = false; } diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java index d386c6c43..9b6d61357 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/mobile/server/ServerSetting.java @@ -46,26 +46,26 @@ public class ServerSetting implements BoykaConfig { private String appiumPath; private String basePath; private String callbackAddress; - private Integer callbackPort = 0; + private int callbackPort = 0; private String configPath; private List denyInsecure; private AutomationType driver = UI_AUTOMATOR; private boolean external; private boolean externalConfig; private String host; - private Integer keepAliveTimeout = 120; + private int keepAliveTimeout = 120; private LogSetting logging = new LogSetting (); private String nodePath; private Map otherArgs; private String password; private List plugins; - private Integer port = 0; + private int port = 0; private Protocol protocol = HTTP; private boolean relaxedSecurity; private boolean sessionOverride; private boolean strictCapabilities; private TargetProviders target = LOCAL; - private Integer timeout = 60; + private int timeout = 30; private String userName; private String webhook; diff --git a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java index 3b10a590c..111fd01aa 100644 --- a/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java +++ b/core-java/src/main/java/io/github/boykaframework/config/ui/web/WebSetting.java @@ -16,6 +16,7 @@ package io.github.boykaframework.config.ui.web; +import static io.github.boykaframework.enums.Browser.NONE; import static io.github.boykaframework.enums.Protocol.HTTP; import static io.github.boykaframework.enums.TargetProviders.LOCAL; import static io.github.boykaframework.enums.WindowResizeType.NORMAL; @@ -42,7 +43,7 @@ @Data public class WebSetting implements BoykaConfig { private String baseUrl; - private Browser browser; + private Browser browser = NONE; private List browserOptions; private Map capabilities; private Dimension customSize = new Dimension (1920, 1080); @@ -52,7 +53,7 @@ public class WebSetting implements BoykaConfig { private PageLoadStrategy pageLoadStrategy = PageLoadStrategy.NORMAL; private String password; private String platform; - private Integer port = 0; + private int port = 0; private Protocol protocol = HTTP; private WindowResizeType resize = NORMAL; private TargetProviders target = LOCAL; diff --git a/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java index ab58d0bb4..74d671906 100644 --- a/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java +++ b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java @@ -16,6 +16,7 @@ package io.github.boykaframework.utils; +import static io.github.boykaframework.enums.Message.METHOD_INVOKE_FAILED; import static io.github.boykaframework.enums.Message.METHOD_NOT_FOUND; import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; import static java.util.Objects.isNull; @@ -37,30 +38,35 @@ public final class ReflectionUtil { * Replaces any null or missing field value with the default object * * @param source Source object to scan - * @param defaultObject Default object from where missing values is to be replaced from + * @param common Default object from where missing values is to be replaced from * @param Object type * * @return New object with all the null and missing fields replaced with default */ - public static T replaceEmptyWithCommon (final T source, final T defaultObject) { + public static T replaceEmptyWithCommon (final T source, final T common) { final var sourceMethods = getMethods (source); for (final var sourceMethod : sourceMethods) { if (sourceMethod.getName () - .startsWith ("get")) { + .startsWith ("get") || sourceMethod.getName () + .startsWith ("is")) { try { - final var defaultMethod = getMethod (sourceMethod, defaultObject); final var sourceValue = getMethodValue (sourceMethod, source); - final var defaultValue = getMethodValue (defaultMethod, defaultObject); + final var defaultObject = init (source.getClass ()); + final var defaultValue = getMethodValue (sourceMethod, defaultObject); + final var commonMethod = getMethod (sourceMethod, common); + final var commonValue = getMethodValue (commonMethod, common); - if (shouldReplaceValue (sourceValue, defaultValue)) { - setMethodValue (sourceMethod, source, defaultValue); - } else if (sourceValue instanceof BoykaConfig) { - replaceEmptyWithCommon (sourceValue, defaultValue); + if (sourceValue instanceof BoykaConfig) { + replaceEmptyWithCommon (sourceValue, commonValue); + } else if (shouldReplaceValue (sourceValue, commonValue, defaultValue)) { + setMethodValue (sourceMethod, source, commonValue, defaultValue); } } catch (final NoSuchMethodException e) { - handleAndThrow (METHOD_NOT_FOUND, e, sourceMethod.getName (), defaultObject.getClass () + handleAndThrow (METHOD_NOT_FOUND, e, sourceMethod.getName (), common.getClass () .getSimpleName ()); + } catch (final InvocationTargetException | InstantiationException | IllegalAccessException e) { + handleAndThrow (METHOD_INVOKE_FAILED, e, sourceMethod.getName ()); } } } @@ -75,11 +81,12 @@ private static Method getMethod (final Method method, final T object) throws @SuppressWarnings ("unchecked") private static E getMethodValue (final Method method, final T object) { if (method.getName () - .startsWith ("get")) { + .startsWith ("get") || method.getName () + .startsWith ("is")) { try { return (E) method.invoke (object); } catch (final IllegalAccessException | InvocationTargetException e) { - handleAndThrow (METHOD_NOT_FOUND, e, method.getName ()); + handleAndThrow (METHOD_INVOKE_FAILED, e, method.getName ()); } } return null; @@ -90,29 +97,79 @@ private static Method[] getMethods (final T object) { .getDeclaredMethods (); } - private static void setMethodValue (final Method method, final T object, final T value) { - if (!method.getName () - .startsWith ("get") || isNull (value)) { + @SuppressWarnings ("unchecked") + private static T init (final Class cls) + throws InvocationTargetException, InstantiationException, IllegalAccessException { + final var ctor = cls.getDeclaredConstructors ()[0]; + return (T) ctor.newInstance (); + } + + private static void setMethodValue (final Method method, final T source, final T commonValue, + final T defaultValue) { + final var methodName = method.getName (); + + if (!(methodName.startsWith ("get") || methodName.startsWith ("is"))) { return; } - final var setMethodName = "set" + method.getName () - .substring (3); + final var setMethodName = "set" + (methodName.startsWith ("is") + ? methodName.substring (2) + : methodName.substring (3)); + final T valueToSet; + + if (methodName.startsWith ("is") && source instanceof Boolean && commonValue instanceof Boolean) { + valueToSet = !commonValue.equals (source) && source.equals (defaultValue) ? commonValue : source; + } else { + valueToSet = !isNull (commonValue) && !commonValue.equals (defaultValue) ? commonValue : defaultValue; + } + + var valueType = valueToSet.getClass (); + if (valueToSet instanceof Boolean) { + valueType = Boolean.TYPE; + } else if (valueToSet instanceof Integer) { + valueType = Integer.TYPE; + } + try { - final var setter = object.getClass () - .getDeclaredMethod (setMethodName, value.getClass ()); - setter.invoke (object, value); + final var sourceClass = source.getClass (); + final var setter = sourceClass.getDeclaredMethod (setMethodName, valueType); + setter.invoke (source, valueToSet); } catch (final NoSuchMethodException e) { - handleAndThrow (METHOD_NOT_FOUND, e, method.getName (), object.getClass () + handleAndThrow (METHOD_NOT_FOUND, e, methodName, source.getClass () .getSimpleName ()); } catch (final InvocationTargetException | IllegalAccessException e) { - handleAndThrow (METHOD_NOT_FOUND, e, method.getName ()); + handleAndThrow (METHOD_INVOKE_FAILED, e, methodName); } } - private static boolean shouldReplaceValue (final Object sourceValue, final Object defaultValue) { - return isNull (sourceValue) || (sourceValue instanceof String && isEmpty (sourceValue.toString ()) && !isEmpty ( - (String) defaultValue)) || (sourceValue instanceof Integer && (int) sourceValue == 0); + private static boolean shouldReplaceValue (final T sourceValue, final T commonValue, final T defaultValue) { + if (isNull (sourceValue) && isNull (commonValue) && isNull (defaultValue)) { + return false; + } + + if (sourceValue instanceof String) { + return isEmpty (sourceValue.toString ()) && !isEmpty ((String) commonValue); + } + + if (sourceValue instanceof Boolean) { + final var source = (boolean) sourceValue; + final var common = (boolean) commonValue; + final var defaultVal = (boolean) defaultValue; + return (source != common && source == defaultVal); + } + + if (sourceValue instanceof Integer && (int) sourceValue == 0) { + if (commonValue instanceof Integer && (int) commonValue != 0) { + return false; + } + return defaultValue instanceof Integer && (int) defaultValue != 0; + } + + if (sourceValue instanceof Enum) { + return sourceValue != commonValue && sourceValue == defaultValue; + } + + return false; } private ReflectionUtil () { diff --git a/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java b/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java index 33135fe33..ec4794f4f 100644 --- a/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java +++ b/core-java/src/test/java/io/github/boykaframework/testng/others/DriverManagerTest.java @@ -36,7 +36,7 @@ public class DriverManagerTest { /** * Test method to verify empty browser in config. */ - @Test (description = "Test Web empty browser in config") + @Test (description = "Test Web empty browser in config", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "Browser type cannot be empty in the config...") public void testEmptyBrowserInConfig () { try { createSession (PERSONA, WEB, "test_local_empty_browser"); @@ -62,7 +62,7 @@ public void testInvalidWebConfigKey () { /** * Test method to verify none browser. */ - @Test (description = "Test None Browser", expectedExceptions = FrameworkError.class, expectedExceptionsMessageRegExp = "NONE Browser type is not allowed for Web platform...") + @Test (description = "Test None Browser") public void testNoneBrowser () { try { createSession (PERSONA, WEB, "test_local_none_browser"); diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index c272348af..35f2288a3 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -6,6 +6,8 @@ }, "common_setting": { "api": { + "validate_ssl": true, + "verify_host_name": true, "logging": { "request": true, "response": true @@ -476,8 +478,8 @@ }, "device": { "os": "IOS", - "version": "16.2", - "name": "iPhone 14", + "version": "17.5", + "name": "iPhone 15", "application": { "path": "/apps/ios/wdio-demo.app.zip", "type": "HYBRID" diff --git a/package.json b/package.json index 4bdf0af63..3a54442ad 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@eslint/compat": "^1.1.1", "@lerna/child-process": "^7.4.2", "@release-it-plugins/lerna-changelog": "^7.0.0", - "@stylistic/eslint-plugin-ts": "^2.6.4", + "@stylistic/eslint-plugin-ts": "^2.7.2", "@types/node": "^22.5.1", "@typescript-eslint/eslint-plugin": "^8.3.0", "@typescript-eslint/parser": "^8.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72bffcc3a..263276c79 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^7.0.0 version: 7.0.0(release-it@17.6.0(typescript@5.5.4)) '@stylistic/eslint-plugin-ts': - specifier: ^2.6.4 - version: 2.6.4(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) + specifier: ^2.7.2 + version: 2.7.2(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) '@types/node': specifier: ^22.5.1 version: 22.5.1 @@ -112,25 +112,25 @@ importers: dependencies: '@docusaurus/core': specifier: 3.5.2 - version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/plugin-google-tag-manager': specifier: ^3.5.2 - version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/preset-classic': specifier: 3.5.2 - version: 3.5.2(@algolia/client-search@5.2.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) + version: 3.5.2(@algolia/client-search@5.2.3)(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/theme-classic': specifier: ^3.5.2 - version: 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@mdx-js/react': specifier: ^3.0.1 - version: 3.0.1(@types/react@18.3.4)(react@18.3.1) + version: 3.0.1(@types/react@18.3.5)(react@18.3.1) clsx: specifier: ^2.1.1 version: 2.1.1 prism-react-renderer: - specifier: ^2.3.1 - version: 2.3.1(react@18.3.1) + specifier: ^2.4.0 + version: 2.4.0(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -149,7 +149,7 @@ importers: version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/plugin-content-docs': specifier: ^3.5.2 - version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + version: 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/tsconfig': specifier: ^3.5.2 version: 3.5.2 @@ -200,8 +200,8 @@ packages: '@algolia/client-common@4.23.3': resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} - '@algolia/client-common@5.2.1': - resolution: {integrity: sha512-f4u3TdqU8310ffGhcCjYtTBXXnVVQ9U38Gnltayxm5Hh63BxgzJzvELUcEuOaZh31CvC1FqttKx127gF90aaQg==} + '@algolia/client-common@5.2.3': + resolution: {integrity: sha512-zqfcbgjYR72Y/rx/+/6g5Li/eV33yhRq5mkGbU06JYBzvGq6viy0gZl1ckCFhLLifKzXZ4yzUQTw/KG6FV+smg==} engines: {node: '>= 14.0.0'} '@algolia/client-personalization@4.23.3': @@ -210,8 +210,8 @@ packages: '@algolia/client-search@4.23.3': resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} - '@algolia/client-search@5.2.1': - resolution: {integrity: sha512-9os21w5CmC84FZZujufLcZPnYKuTVJ3J6LF4i1/i1BKJzy1Cbb9bTWXn+e9PGdRJBzo4DRZt0D0Pd2X5dvUucg==} + '@algolia/client-search@5.2.3': + resolution: {integrity: sha512-xXdCg8vpiwE8gqSyvjxq8V3qbFa+gHasY5epIz718IByWv3WKLLi/n4SMIfB/zRwXTLVWeGOH/UJSz5VCnAAqg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': @@ -229,8 +229,8 @@ packages: '@algolia/requester-browser-xhr@4.23.3': resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} - '@algolia/requester-browser-xhr@5.2.1': - resolution: {integrity: sha512-KRDJRPEdIcej/KgqDqhUs/vhLwVh2oKYa+GaKIFGiyRaWusjwaUYdrWgiLxcHAWNKIeIpwjKnteU/dwCz+Nykg==} + '@algolia/requester-browser-xhr@5.2.3': + resolution: {integrity: sha512-lezcE4E7ax7JkDGDKA/xAnyAY9p9LZ4AxzsyL0pksqUpOvn4U0msP553M2yJRfsxxdGDp15noCnPuRsh7u8dMg==} engines: {node: '>= 14.0.0'} '@algolia/requester-common@4.23.3': @@ -239,8 +239,8 @@ packages: '@algolia/requester-node-http@4.23.3': resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} - '@algolia/requester-node-http@5.2.1': - resolution: {integrity: sha512-Q9LE92zL8EZhe9+H7pwG6mMdU7RNtVrGtheM7lMfZoejpkR/DBTr2/5FCB5OsUk7iLSIwP43AKWX+2rTv0cLaA==} + '@algolia/requester-node-http@5.2.3': + resolution: {integrity: sha512-xTxsRnJqxG1dylIkxmflrHO9LJfJKjSHqEF5yGdRrtnqIEvb2hiQPCHm2XwqxMa3NBcf6lmydGfJqhPLnRJwtw==} engines: {node: '>= 14.0.0'} '@algolia/transporter@4.23.3': @@ -1800,14 +1800,8 @@ packages: '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - '@stylistic/eslint-plugin-js@2.6.4': - resolution: {integrity: sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.40.0' - - '@stylistic/eslint-plugin-ts@2.6.4': - resolution: {integrity: sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA==} + '@stylistic/eslint-plugin-ts@2.7.2': + resolution: {integrity: sha512-uf3hmqWLK1upUnTmUSn4XDvNu1o6b1nY+xdema8dGGY+zH663V+0cHN3xqexDuQ8do1f0wV3hChkfmz3jWC4Uw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' @@ -1964,9 +1958,6 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@9.6.0': - resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} - '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} @@ -2081,6 +2072,9 @@ packages: '@types/react@18.3.4': resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} + '@types/react@18.3.5': + resolution: {integrity: sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==} + '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -2141,10 +2135,6 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.2.0': - resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.3.0': resolution: {integrity: sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2158,23 +2148,10 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.2.0': - resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.3.0': resolution: {integrity: sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.2.0': - resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - '@typescript-eslint/typescript-estree@8.3.0': resolution: {integrity: sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2184,22 +2161,12 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.2.0': - resolution: {integrity: sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.3.0': resolution: {integrity: sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.2.0': - resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.3.0': resolution: {integrity: sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6737,8 +6704,8 @@ packages: resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} engines: {node: '>=4'} - prism-react-renderer@2.3.1: - resolution: {integrity: sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==} + prism-react-renderer@2.4.0: + resolution: {integrity: sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==} peerDependencies: react: '>=16.0.0' @@ -8446,32 +8413,32 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3) search-insights: 2.17.0 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)': + '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) - '@algolia/client-search': 5.2.1 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3) + '@algolia/client-search': 5.2.3 algoliasearch: 4.23.3 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)': dependencies: - '@algolia/client-search': 5.2.1 + '@algolia/client-search': 5.2.3 algoliasearch: 4.23.3 '@algolia/cache-browser-local-storage@4.23.3': @@ -8502,7 +8469,7 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-common@5.2.1': {} + '@algolia/client-common@5.2.3': {} '@algolia/client-personalization@4.23.3': dependencies: @@ -8516,11 +8483,11 @@ snapshots: '@algolia/requester-common': 4.23.3 '@algolia/transporter': 4.23.3 - '@algolia/client-search@5.2.1': + '@algolia/client-search@5.2.3': dependencies: - '@algolia/client-common': 5.2.1 - '@algolia/requester-browser-xhr': 5.2.1 - '@algolia/requester-node-http': 5.2.1 + '@algolia/client-common': 5.2.3 + '@algolia/requester-browser-xhr': 5.2.3 + '@algolia/requester-node-http': 5.2.3 '@algolia/events@4.0.1': {} @@ -8548,9 +8515,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-browser-xhr@5.2.1': + '@algolia/requester-browser-xhr@5.2.3': dependencies: - '@algolia/client-common': 5.2.1 + '@algolia/client-common': 5.2.3 '@algolia/requester-common@4.23.3': {} @@ -8558,9 +8525,9 @@ snapshots: dependencies: '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http@5.2.1': + '@algolia/requester-node-http@5.2.3': dependencies: - '@algolia/client-common': 5.2.1 + '@algolia/client-common': 5.2.3 '@algolia/transporter@4.23.3': dependencies: @@ -9557,21 +9524,21 @@ snapshots: '@docsearch/css@3.6.0': {} - '@docsearch/react@3.6.0(@algolia/client-search@5.2.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)': + '@docsearch/react@3.6.0(@algolia/client-search@5.2.3)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3)(search-insights@2.17.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.2.1)(algoliasearch@4.23.3) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3)(search-insights@2.17.0) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@5.2.3)(algoliasearch@4.23.3) '@docsearch/css': 3.6.0 algoliasearch: 4.23.3 optionalDependencies: - '@types/react': 18.3.4 + '@types/react': 18.3.5 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) search-insights: 2.17.0 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: '@babel/core': 7.24.7 '@babel/generator': 7.24.7 @@ -9589,7 +9556,7 @@ snapshots: '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) - '@mdx-js/react': 3.0.1(@types/react@18.3.4)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.5)(react@18.3.1) autoprefixer: 10.4.19(postcss@8.4.38) babel-loader: 9.1.3(@babel/core@7.24.7)(webpack@5.92.0) babel-plugin-dynamic-import-node: 2.3.3 @@ -9730,13 +9697,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -9772,13 +9739,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -9812,9 +9779,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -9843,9 +9810,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) fs-extra: 11.2.0 @@ -9872,9 +9839,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) react: 18.3.1 @@ -9899,9 +9866,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@types/gtag.js': 0.0.12 @@ -9927,9 +9894,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) react: 18.3.1 @@ -9954,9 +9921,9 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -9986,20 +9953,20 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.2.1)(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': - dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.2.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) + '@docusaurus/preset-classic@3.5.2(@algolia/client-search@5.2.3)(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': + dependencies: + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@5.2.3)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4) '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10027,31 +9994,31 @@ snapshots: '@docusaurus/react-loadable@6.0.0(react@18.3.1)': dependencies: - '@types/react': 18.3.4 + '@types/react': 18.3.5 react: 18.3.1 - '@docusaurus/theme-classic@3.5.2(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/theme-classic@3.5.2(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-translations': 3.5.2 '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) - '@mdx-js/react': 3.0.1(@types/react@18.3.4)(react@18.3.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.5)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 infima: 0.2.0-alpha.44 lodash: 4.17.21 nprogress: 0.2.0 postcss: 8.4.38 - prism-react-renderer: 2.3.1(react@18.3.1) + prism-react-renderer: 2.4.0(react@18.3.1) prismjs: 1.29.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -10078,11 +10045,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': + '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4)': dependencies: '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@types/history': 4.7.11 @@ -10090,7 +10057,7 @@ snapshots: '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 - prism-react-renderer: 2.3.1(react@18.3.1) + prism-react-renderer: 2.4.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.6.3 @@ -10104,13 +10071,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.2.1)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': + '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@5.2.3)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(@types/react@18.3.5)(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0)(typescript@5.5.4)': dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@5.2.1)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0) - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docsearch/react': 3.6.0(@algolia/client-search@5.2.3)(@types/react@18.3.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.0) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/logger': 3.5.2 - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1))(eslint@9.9.1(jiti@1.21.6))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) '@docusaurus/theme-translations': 3.5.2 '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.5.4) @@ -10562,10 +10529,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.4)(react@18.3.1)': + '@mdx-js/react@3.0.1(@types/react@18.3.5)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.4 + '@types/react': 18.3.5 react: 18.3.1 '@napi-rs/wasm-runtime@0.2.4': @@ -11244,20 +11211,13 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 - '@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.1(jiti@1.21.6))': + '@stylistic/eslint-plugin-ts@2.7.2(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@types/eslint': 9.6.0 - acorn: 8.12.1 + '@types/eslint': 9.6.1 + '@typescript-eslint/utils': 8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) eslint: 9.9.1(jiti@1.21.6) eslint-visitor-keys: 4.0.0 espree: 10.1.0 - - '@stylistic/eslint-plugin-ts@2.6.4(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': - dependencies: - '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.1(jiti@1.21.6)) - '@types/eslint': 9.6.0 - '@typescript-eslint/utils': 8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4) - eslint: 9.9.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript @@ -11425,19 +11385,13 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 9.6.0 - '@types/estree': 1.0.5 - - '@types/eslint@9.6.0': - dependencies: + '@types/eslint': 9.6.1 '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 - optional: true '@types/estree-jsx@1.0.5': dependencies: @@ -11558,6 +11512,11 @@ snapshots: '@types/prop-types': 15.7.12 csstype: 3.1.3 + '@types/react@18.3.5': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + '@types/retry@0.12.0': {} '@types/sax@1.2.7': @@ -11632,11 +11591,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.2.0': - dependencies: - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/visitor-keys': 8.2.0 - '@typescript-eslint/scope-manager@8.3.0': dependencies: '@typescript-eslint/types': 8.3.0 @@ -11654,25 +11608,8 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.2.0': {} - '@typescript-eslint/types@8.3.0': {} - '@typescript-eslint/typescript-estree@8.2.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/visitor-keys': 8.2.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - '@typescript-eslint/typescript-estree@8.3.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 8.3.0 @@ -11688,17 +11625,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.2.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) - '@typescript-eslint/scope-manager': 8.2.0 - '@typescript-eslint/types': 8.2.0 - '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) - eslint: 9.9.1(jiti@1.21.6) - transitivePeerDependencies: - - supports-color - - typescript - '@typescript-eslint/utils@8.3.0(eslint@9.9.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1(jiti@1.21.6)) @@ -11710,11 +11636,6 @@ snapshots: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.2.0': - dependencies: - '@typescript-eslint/types': 8.2.0 - eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.3.0': dependencies: '@typescript-eslint/types': 8.3.0 @@ -17607,7 +17528,7 @@ snapshots: pretty-time@1.1.0: {} - prism-react-renderer@2.3.1(react@18.3.1): + prism-react-renderer@2.4.0(react@18.3.1): dependencies: '@types/prismjs': 1.26.4 clsx: 2.1.1 diff --git a/website/package.json b/website/package.json index 909a4a1be..ebdfadb95 100644 --- a/website/package.json +++ b/website/package.json @@ -21,7 +21,7 @@ "@docusaurus/theme-classic": "^3.5.2", "@mdx-js/react": "^3.0.1", "clsx": "^2.1.1", - "prism-react-renderer": "^2.3.1", + "prism-react-renderer": "^2.4.0", "react": "^18.3.1", "react-dom": "^18.3.1", "react-github-btn": "^1.4.0", From 696f97be7205a97bf0ad2d33752715448140c2f2 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 1 Sep 2024 08:20:41 +0300 Subject: [PATCH 21/25] fix(workflow): :bug: fixing failing mobile local workflow try 11 --- core-java/src/test/resources/boyka-config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 35f2288a3..5417328f1 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -478,8 +478,8 @@ }, "device": { "os": "IOS", - "version": "17.5", - "name": "iPhone 15", + "version": "16.2", + "name": "iPhone 14", "application": { "path": "/apps/ios/wdio-demo.app.zip", "type": "HYBRID" From 08c8400d5995f85bb46c267a196c928e9a151308 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 1 Sep 2024 09:56:01 +0300 Subject: [PATCH 22/25] fix(workflow): :bug: fixing failing mobile local workflow try 12 --- .../boykaframework/utils/ReflectionUtil.java | 63 ++++++++++++------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java index 74d671906..420a31425 100644 --- a/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java +++ b/core-java/src/main/java/io/github/boykaframework/utils/ReflectionUtil.java @@ -19,6 +19,7 @@ import static io.github.boykaframework.enums.Message.METHOD_INVOKE_FAILED; import static io.github.boykaframework.enums.Message.METHOD_NOT_FOUND; import static io.github.boykaframework.utils.ErrorHandler.handleAndThrow; +import static java.text.MessageFormat.format; import static java.util.Objects.isNull; import static org.apache.commons.lang3.StringUtils.isEmpty; @@ -73,6 +74,27 @@ public static T replaceEmptyWithCommon (final T source, final T common) { return source; } + private static T determineValueToSet (final String methodName, final T source, final T commonValue, + final T defaultValue) { + if (methodName.startsWith ("is") && source instanceof Boolean) { + return !commonValue.equals (source) && source.equals (defaultValue) ? commonValue : source; + } + return !isNull (commonValue) && !commonValue.equals (defaultValue) ? commonValue : defaultValue; + } + + private static Class determineValueType (final Object valueToSet) { + if (valueToSet instanceof Boolean) { + return Boolean.TYPE; + } else if (valueToSet instanceof Integer) { + return Integer.TYPE; + } + return valueToSet.getClass (); + } + + private static String generateSetterMethodName (final String methodName) { + return format ("set{0}", methodName.startsWith ("is") ? methodName.substring (2) : methodName.substring (3)); + } + private static Method getMethod (final Method method, final T object) throws NoSuchMethodException { return object.getClass () .getDeclaredMethod (method.getName ()); @@ -104,35 +126,30 @@ private static T init (final Class cls) return (T) ctor.newInstance (); } + private static boolean isGetterMethod (final String methodName) { + return methodName.startsWith ("get") || methodName.startsWith ("is"); + } + private static void setMethodValue (final Method method, final T source, final T commonValue, final T defaultValue) { final var methodName = method.getName (); - if (!(methodName.startsWith ("get") || methodName.startsWith ("is"))) { + if (!isGetterMethod (methodName)) { return; } - final var setMethodName = "set" + (methodName.startsWith ("is") - ? methodName.substring (2) - : methodName.substring (3)); - final T valueToSet; + final var setMethodName = generateSetterMethodName (methodName); + final var valueToSet = determineValueToSet (methodName, source, commonValue, defaultValue); - if (methodName.startsWith ("is") && source instanceof Boolean && commonValue instanceof Boolean) { - valueToSet = !commonValue.equals (source) && source.equals (defaultValue) ? commonValue : source; - } else { - valueToSet = !isNull (commonValue) && !commonValue.equals (defaultValue) ? commonValue : defaultValue; + if (isNull (valueToSet)) { + return; } - var valueType = valueToSet.getClass (); - if (valueToSet instanceof Boolean) { - valueType = Boolean.TYPE; - } else if (valueToSet instanceof Integer) { - valueType = Integer.TYPE; - } + final var valueType = determineValueType (valueToSet); try { - final var sourceClass = source.getClass (); - final var setter = sourceClass.getDeclaredMethod (setMethodName, valueType); + final var setter = source.getClass () + .getDeclaredMethod (setMethodName, valueType); setter.invoke (source, valueToSet); } catch (final NoSuchMethodException e) { handleAndThrow (METHOD_NOT_FOUND, e, methodName, source.getClass () @@ -158,15 +175,15 @@ private static boolean shouldReplaceValue (final T sourceValue, final T comm return (source != common && source == defaultVal); } - if (sourceValue instanceof Integer && (int) sourceValue == 0) { - if (commonValue instanceof Integer && (int) commonValue != 0) { - return false; - } - return defaultValue instanceof Integer && (int) defaultValue != 0; + if (sourceValue instanceof Integer) { + final var source = (int) sourceValue; + final var common = (int) commonValue; + final var defaultVal = (int) defaultValue; + return source == 0 && common != 0 || source == 0 && defaultVal != 0; } if (sourceValue instanceof Enum) { - return sourceValue != commonValue && sourceValue == defaultValue; + return !sourceValue.equals (commonValue) && sourceValue.equals (defaultValue); } return false; From f7f3bbf3226f037bcd8d38b802d33589b7b7982c Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 1 Sep 2024 11:33:20 +0300 Subject: [PATCH 23/25] fix(workflow): :bug: fixing failing mobile local workflow try 13 --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index e915b269f..6a363440c 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -137,7 +137,7 @@ jobs: emulator-name: Pixel_8_Pro emulator-profile: pixel_6_pro emulator-version: 31 - emulator-channel: stable + emulator-channel: canary emulator-arch: x86_64 emulator-target: aosp_atd simulator-name: iPhone 14 From dc8a2483df6c3fe730eeded92875197beca1aa51 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 1 Sep 2024 11:57:21 +0300 Subject: [PATCH 24/25] fix(workflow): :bug: fixing failing mobile local workflow try 14 --- .github/workflows/test-core.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 6a363440c..22e528659 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -138,7 +138,7 @@ jobs: emulator-profile: pixel_6_pro emulator-version: 31 emulator-channel: canary - emulator-arch: x86_64 + emulator-arch: x86 emulator-target: aosp_atd simulator-name: iPhone 14 simulator-version: 16.2 From 40a94df3fbbdf99a792fb5ab6531edf3d8bddf56 Mon Sep 17 00:00:00 2001 From: WasiqB Date: Sun, 1 Sep 2024 12:06:15 +0300 Subject: [PATCH 25/25] fix(workflow): :bug: fixing failing mobile local workflow try 15 --- .github/workflows/test-core.yml | 2 +- core-java/src/test/resources/boyka-config.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index 22e528659..133645184 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -136,7 +136,7 @@ jobs: run-android: true emulator-name: Pixel_8_Pro emulator-profile: pixel_6_pro - emulator-version: 31 + emulator-version: 30 emulator-channel: canary emulator-arch: x86 emulator-target: aosp_atd diff --git a/core-java/src/test/resources/boyka-config.json b/core-java/src/test/resources/boyka-config.json index 5417328f1..a0c4ea2c0 100644 --- a/core-java/src/test/resources/boyka-config.json +++ b/core-java/src/test/resources/boyka-config.json @@ -272,7 +272,7 @@ }, "device": { "os": "ANDROID", - "version": "12", + "version": "11", "name": "Pixel_8_Pro", "application": { "path": "/apps/android/wdio-demo.apk",