diff --git a/access-checkout-react-native-sdk/.prettierrc.json b/access-checkout-react-native-sdk/.prettierrc.json index 018ca32..e354e3b 100644 --- a/access-checkout-react-native-sdk/.prettierrc.json +++ b/access-checkout-react-native-sdk/.prettierrc.json @@ -4,6 +4,5 @@ "tabWidth": 2, "trailingComma": "es5", "useTabs": false, - "arrowParens": "avoid", - "bracketSameLine": true + "printWidth": 120 } diff --git a/access-checkout-react-native-sdk/README.md b/access-checkout-react-native-sdk/README.md index ed3a411..6441613 100644 --- a/access-checkout-react-native-sdk/README.md +++ b/access-checkout-react-native-sdk/README.md @@ -7,11 +7,11 @@ Create your own uniquely styled and branded checkout form by integrating our Rea This SDK is the first step to integrate with our Access Worldpay APIs into a React Native app. It is designed to simplify the integration of the following functionality in your checkout form: - validating the format of the card details entered by a customer -- generating a session (short-lived token representing a customer's card details) +- generating a session (short-lived token representing a customer's card details) ## Documentation -You can find the detailed documentation explaining how to integrate the SDK and use a session to take a payment starting with the [React Native section](https://developer.worldpay.com/docs/access-worldpay/checkout/react-native) of the [Access Worldpay documentation](https://developer.worldpay.com). +You can find the detailed documentation explaining how to integrate the SDK and use a session to take a payment starting with the [React Native section](https://developer.worldpay.com/docs/access-worldpay/checkout/react-native) of the [Access Worldpay Checkout documentation](https://developer.worldpay.com). ## Compatibility @@ -19,6 +19,15 @@ You can find the detailed documentation explaining how to integrate the SDK and - `React 18.1.0` and above - `Cocoapods` only for iOS dependencies +## SAQ-A Compliance + +To support SAQ-A compliance when using our React Native SDK, we have created a new component called AccessCheckoutTextInput: +It has been designed so that it does not expose any methods or properties to retrieve the text entered by the end user to ensure our merchants applications do not have direct access to card details and are SAQ-A compliant. + +## AccessCheckoutTextInput + +You can find detailed documentation about our new component [AccessCheckoutTextInput](https://developer.worldpay.com/docs/access-worldpay/checkout/react-native/optional-configuration) within the [React Native section](https://developer.worldpay.com/docs/access-worldpay/checkout/react-native) of the [Access Worldpay Checkout documentation](https://developer.worldpay.com). + ## How to install Refer to [Get our SDK](https://developer.worldpay.com/docs/access-worldpay/checkout/react-native#get-our-sdk) in the React Native section of the [Access Worldpay documentation](https://developer.worldpay.com) diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/build.gradle b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/build.gradle index 5492d73..92c875f 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/build.gradle +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/build.gradle @@ -48,6 +48,8 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation 'org.robolectric:robolectric:4.4' + testImplementation 'org.mockito:mockito-core:5.8.0' + instrumentedTestsImplementation 'androidx.test:core:1.4.0' instrumentedTestsImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2' diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTests.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTests.kt index c8cf6a3..afa11ec 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTests.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTests.kt @@ -3,15 +3,18 @@ package com.worldpay.access.checkout.reactnative.session import android.content.Context import androidx.test.core.app.ActivityScenario import androidx.test.platform.app.InstrumentationRegistry -import com.github.tomakehurst.wiremock.client.WireMock.* +import com.github.tomakehurst.wiremock.client.WireMock.equalTo +import com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor +import com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo +import com.github.tomakehurst.wiremock.client.WireMock.verify import com.worldpay.access.checkout.reactnative.services.AccessServicesRootStub import com.worldpay.access.checkout.reactnative.services.MockServer import com.worldpay.access.checkout.reactnative.services.MockServer.startStubServices import com.worldpay.access.checkout.reactnative.services.MockServer.stopStubServices import com.worldpay.access.checkout.reactnative.services.SessionsStub -import com.worldpay.access.checkout.reactnative.session.SessionsTestFixture.Companion.CARD -import com.worldpay.access.checkout.reactnative.session.SessionsTestFixture.Companion.CVC -import com.worldpay.access.checkout.reactnative.session.SessionsTestFixture.Companion.sessionsTextFixture +import com.worldpay.access.checkout.reactnative.utils.TestFixture.Companion.CARD +import com.worldpay.access.checkout.reactnative.utils.TestFixture.Companion.CVC +import com.worldpay.access.checkout.reactnative.utils.TestFixture.Companion.testFixture import org.awaitility.Awaitility.await import org.junit.After import org.junit.Before @@ -20,11 +23,11 @@ import java.util.concurrent.TimeUnit.MILLISECONDS class SessionsInstrumentedTests { - private val timeOutInMs = 5000L + private val timeOutInMs = 500000L @Before fun setup() { - sessionsTextFixture().clear() + testFixture().clear() val context: Context = InstrumentationRegistry.getInstrumentation().context startStubServices(context, MockServer.PORT) @@ -41,11 +44,10 @@ class SessionsInstrumentedTests { @Test fun testShouldBeAbleToGenerateACardSession() { SessionsStub.stubSessionsCardSuccess("my-session") - sessionsTextFixture().pan("4444333322221111") + testFixture().pan("4444333322221111") .expiryDate("12/34") .cvc("123") .sessionsTypes(listOf(CARD)) - .reactNativeSdkVersion("1.0.0") val scenario = ActivityScenario.launch(SessionsInstrumentedTestsActivity::class.java) @@ -58,11 +60,10 @@ class SessionsInstrumentedTests { SessionsStub.stubSessionsCardSuccess("my-session") SessionsStub.stubSessionsPaymentsCvcSuccess("my-other-session") - sessionsTextFixture().pan("4444333322221111") + testFixture().pan("4444333322221111") .expiryDate("12/34") .cvc("123") .sessionsTypes(listOf(CARD, CVC)) - .reactNativeSdkVersion("1.0.0") val scenario = ActivityScenario.launch(SessionsInstrumentedTestsActivity::class.java) @@ -77,10 +78,8 @@ class SessionsInstrumentedTests { fun testShouldBeAbleToGenerateACvcOnlySession() { SessionsStub.stubSessionsPaymentsCvcSuccess("my-other-session") - sessionsTextFixture() - .cvc("123") + testFixture().cvc("123") .sessionsTypes(listOf(CVC)) - .reactNativeSdkVersion("1.0.0") val scenario = ActivityScenario.launch(SessionsInstrumentedTestsActivity::class.java) @@ -99,38 +98,22 @@ class SessionsInstrumentedTests { SessionsStub.stubSessionsCardSuccess("my-session") SessionsStub.stubSessionsPaymentsCvcFailure(errorName, message) - sessionsTextFixture() - .pan("4444333322221111") + testFixture().pan("4444333322221111") .expiryDate("12/34") .cvc("123") .sessionsTypes(listOf(CARD, CVC)) - .reactNativeSdkVersion("1.0.0") val scenario = ActivityScenario.launch(SessionsInstrumentedTestsActivity::class.java) assertExceptionIs(scenario, expectedException) } - @Test - fun testShouldBeAbleToGiveErrorWhenSessionsTypeContainsCvcAndANullCvcIsPassed() { - val exception = RuntimeException("Expected cvcValue to be provided but was not") - - sessionsTextFixture() - .cvc(null) - .sessionsTypes(listOf(CVC)) - .reactNativeSdkVersion("1.0.0") - - val scenario = ActivityScenario.launch(SessionsInstrumentedTestsActivity::class.java) - - assertExceptionIs(scenario, exception) - } - @Test fun testShouldSetNativeSdkWpSdkHeaderWithAccessCheckoutReactNativeVersion() { SessionsStub.stubSessionsCardSuccess("my-session") SessionsStub.stubSessionsPaymentsCvcSuccess("my-other-session") - sessionsTextFixture().pan("4444333322221111") + testFixture().pan("4444333322221111") .expiryDate("12/34") .cvc("123") .sessionsTypes(listOf(CARD, CVC)) @@ -147,7 +130,7 @@ class SessionsInstrumentedTests { verify( postRequestedFor(urlEqualTo("/sessions/payments/cvc")) .withHeader("X-WP-SDK", equalTo("access-checkout-react-native/1.2.3")) - ); + ) } private fun assertSessionsAre( diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTests.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTests.kt index 0e7017a..456c8c7 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTests.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTests.kt @@ -10,9 +10,14 @@ import com.worldpay.access.checkout.reactnative.services.CardBrandsStub.Companio import com.worldpay.access.checkout.reactnative.services.MockServer import com.worldpay.access.checkout.reactnative.services.MockServer.startStubServices import com.worldpay.access.checkout.reactnative.services.MockServer.stopStubServices -import com.worldpay.access.checkout.reactnative.validation.CardValidationTestFixture.Companion.validationTestFixture +import com.worldpay.access.checkout.reactnative.utils.TestFixture +import com.worldpay.access.checkout.reactnative.utils.TestFixture.Companion.testFixture import org.awaitility.Awaitility.await -import org.junit.* +import org.junit.After +import org.junit.AfterClass +import org.junit.Before +import org.junit.BeforeClass +import org.junit.Test import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.TimeUnit.MILLISECONDS @@ -38,13 +43,7 @@ class CardValidationInstrumentedTests { @Before fun setUp() { - validationTestFixture() - .clear() - .panId(CardValidationInstrumentedTestsActivity.panId) - .expiryDateId(CardValidationInstrumentedTestsActivity.expiryDateId) - .cvcId(CardValidationInstrumentedTestsActivity.cvcId) - - CardValidationInstrumentedTestsActivity.clearActions() + TestFixture().clear() } @After @@ -55,7 +54,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenPanBecomesValid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setPan("4444333322221111") } @@ -71,7 +70,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenPanBecomesInvalid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setPan("4444333322221111") activity.setPan("4") } @@ -92,7 +91,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenExpiryDateBecomesValid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setExpiryDate("12/30") } @@ -108,7 +107,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenExpiryDateBecomesInvalid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setExpiryDate("12/30") activity.setExpiryDate("12/3") } @@ -129,7 +128,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenCvcBecomesValid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setCvc("123") } @@ -145,7 +144,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenCvcBecomesInvalid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setCvc("123") activity.setCvc("12") } @@ -166,7 +165,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenAllFieldsBecomeValid() { startActivity().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setPan("4444333322221111") activity.setExpiryDate("12/30") activity.setCvc("123") @@ -184,7 +183,7 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseEventWhenRecognisingCardBrand() { startActivityWithCardBrandRules().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setPan("4") } @@ -211,10 +210,10 @@ class CardValidationInstrumentedTests { @Test fun shouldRaiseAnInvalidPanEventWhenCardBrandIsNotAcceptedByMerchant() { - validationTestFixture().acceptedCardBrands(listOf("jcb")) + testFixture().acceptedCardBrands(listOf("jcb")) startActivityWithCardBrandRules().use { scenario -> - CardValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setPan("4") } diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTests.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTests.kt index f346d9b..4474eeb 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTests.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/androidTestInstrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTests.kt @@ -8,9 +8,11 @@ import com.worldpay.access.checkout.reactnative.react.EventMock import com.worldpay.access.checkout.reactnative.services.MockServer import com.worldpay.access.checkout.reactnative.services.MockServer.startStubServices import com.worldpay.access.checkout.reactnative.services.MockServer.stopStubServices -import com.worldpay.access.checkout.reactnative.validation.CvcOnlyValidationTestFixture.Companion.cvcOnlyValidationTestFixture import org.awaitility.Awaitility.await -import org.junit.* +import org.junit.After +import org.junit.AfterClass +import org.junit.BeforeClass +import org.junit.Test import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.TimeUnit.MILLISECONDS @@ -34,15 +36,6 @@ class CvcOnlyValidationInstrumentedTests { } - @Before - fun setUp() { - cvcOnlyValidationTestFixture() - .clear() - .cvcId(CvcOnlyValidationInstrumentedTestsActivity.cvcId) - - CvcOnlyValidationInstrumentedTestsActivity.clearActions() - } - @After fun tearDown() { WireMock.reset() @@ -51,7 +44,7 @@ class CvcOnlyValidationInstrumentedTests { @Test fun shouldRaiseEventWhenCvcBecomesValid() { startActivity().use { scenario -> - CvcOnlyValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setCvc("123") } @@ -67,7 +60,7 @@ class CvcOnlyValidationInstrumentedTests { @Test fun shouldRaiseEventWhenCvcBecomesInvalid() { startActivity().use { scenario -> - CvcOnlyValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setCvc("123") activity.setCvc("12") } @@ -88,7 +81,7 @@ class CvcOnlyValidationInstrumentedTests { @Test fun shouldRaiseEventWhenAllFieldsBecomeValid() { startActivity().use { scenario -> - CvcOnlyValidationInstrumentedTestsActivity.run { activity -> + scenario.onActivity { activity -> activity.setCvc("123") } diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/AbstractInstrumentedTestsActivity.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/AbstractInstrumentedTestsActivity.kt new file mode 100644 index 0000000..6113882 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/AbstractInstrumentedTestsActivity.kt @@ -0,0 +1,71 @@ +package com.worldpay.access.checkout.reactnative + +import android.os.Bundle +import android.widget.LinearLayout +import androidx.activity.ComponentActivity +import com.facebook.soloader.SoLoader +import com.worldpay.access.checkout.reactnative.react.EventMock +import com.worldpay.access.checkout.reactnative.react.MockReactApplicationContext.Companion.mockReactApplicationContext +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.cvcId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.expiryDateId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.panId +import com.worldpay.access.checkout.ui.AccessCheckoutEditText +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope + +abstract class AbstractInstrumentedTestsActivity : ComponentActivity(), + CoroutineScope by MainScope() { + lateinit var panAccessCheckoutEditText: AccessCheckoutEditText + lateinit var expiryDateAccessCheckoutEditText: AccessCheckoutEditText + lateinit var cvcAccessCheckoutEditText: AccessCheckoutEditText + + protected val reactApplicationContext = mockReactApplicationContext(this) + + fun setPan(value: String) { + panAccessCheckoutEditText.setText(value) + } + + fun setExpiryDate(value: String) { + expiryDateAccessCheckoutEditText.setText(value) + } + + fun setCvc(value: String) { + cvcAccessCheckoutEditText.setText(value) + } + + fun eventsReceived(): List { + return reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted + } + + fun clearEventsReceived() { + reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted.clear() + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + SoLoader.init(this, false) + + panAccessCheckoutEditText = createAccessCheckoutEditText(panId) + expiryDateAccessCheckoutEditText = createAccessCheckoutEditText(expiryDateId) + cvcAccessCheckoutEditText = createAccessCheckoutEditText(cvcId) + + val layout = LinearLayout(this) + layout.addView(panAccessCheckoutEditText) + layout.addView(expiryDateAccessCheckoutEditText) + layout.addView(cvcAccessCheckoutEditText) + setContentView(layout) + + val module = AccessCheckoutReactNativeModule(reactApplicationContext) + + doOnCreate(module) + } + + protected abstract fun doOnCreate(module: AccessCheckoutReactNativeModule) + + private fun createAccessCheckoutEditText(id: String): AccessCheckoutEditText { + val component = AccessCheckoutEditText(this) + component.setTag(R.id.view_tag_native_id, id) + return component + } +} diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTestsActivity.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTestsActivity.kt index d9431d7..3d24043 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTestsActivity.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsInstrumentedTestsActivity.kt @@ -1,60 +1,46 @@ package com.worldpay.access.checkout.reactnative.session -import android.os.Bundle -import androidx.activity.ComponentActivity -import com.facebook.react.bridge.JavaOnlyArray import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.PromiseImpl import com.facebook.react.bridge.ReadableMap -import com.facebook.soloader.SoLoader +import com.worldpay.access.checkout.reactnative.AbstractInstrumentedTestsActivity import com.worldpay.access.checkout.reactnative.AccessCheckoutReactNativeModule import com.worldpay.access.checkout.reactnative.react.FailureCallback -import com.worldpay.access.checkout.reactnative.react.MockReactApplicationContext.Companion.mockReactApplicationContext import com.worldpay.access.checkout.reactnative.react.SuccessCallback -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope +import com.worldpay.access.checkout.reactnative.utils.BridgeArguments +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.baseUrl +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.cvcId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.expiryDateId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.merchantId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.panId +import com.worldpay.access.checkout.reactnative.utils.TestFixture import kotlinx.coroutines.launch import kotlin.coroutines.suspendCoroutine -open class SessionsInstrumentedTestsActivity : ComponentActivity(), CoroutineScope by MainScope() { - companion object { - const val bridgeFieldBaseUrl = "baseUrl" - const val bridgeFieldMerchantId = "merchantId" - const val bridgeFieldPanId = "panValue" - const val bridgeFieldExpiryDateId = "expiryDateValue" - const val bridgeFieldCvcId = "cvcValue" - const val bridgeFieldSessionTypes = "sessionTypes" - const val bridgeFieldReactNativeSdkVersion = "reactNativeSdkVersion" - } - +class SessionsInstrumentedTestsActivity : AbstractInstrumentedTestsActivity() { var sessions: MutableMap = HashMap() var exception: RuntimeException? = null - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - SoLoader.init(this, false) - - val arguments = JavaOnlyMap() - arguments.putString(bridgeFieldBaseUrl, SessionsTestFixture.baseUrl()) - arguments.putString(bridgeFieldMerchantId, SessionsTestFixture.merchantId()) - arguments.putString(bridgeFieldPanId, SessionsTestFixture.pan()) - arguments.putString(bridgeFieldExpiryDateId, SessionsTestFixture.expiryDate()) - arguments.putString(bridgeFieldCvcId, SessionsTestFixture.cvc()) - arguments.putArray( - bridgeFieldSessionTypes, - JavaOnlyArray.from(SessionsTestFixture.sessionsTypes()) - ) - arguments.putString( - bridgeFieldReactNativeSdkVersion, - SessionsTestFixture.reactNativeSdkVersion() - ) - - val module = AccessCheckoutReactNativeModule(mockReactApplicationContext(this)) + override fun doOnCreate(module: AccessCheckoutReactNativeModule) { + TestFixture.pan()?.let { setPan(it) } + TestFixture.expiryDate()?.let { setExpiryDate(it) } + TestFixture.cvc()?.let { setCvc(it) } launch { try { - val result = generateSessions(module, arguments) + val bridgeArguments = BridgeArguments() + .baseUrl(baseUrl) + .merchantId(merchantId) + .panId(panId) + .expiryDateId(expiryDateId) + .cvcId(cvcId) + .sessionTypes(TestFixture.sessionsTypes()) + + TestFixture.reactNativeSdkVersion()?.let { + bridgeArguments.reactNativeSdkVersion(it) + } + + val result = generateSessions(module, bridgeArguments.toJavaOnlyMap()) if (result.getString("card") != null) { sessions["card"] = result.getString("card") as String diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsTestFixture.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsTestFixture.kt deleted file mode 100644 index d5f4162..0000000 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/session/SessionsTestFixture.kt +++ /dev/null @@ -1,86 +0,0 @@ -package com.worldpay.access.checkout.reactnative.session - -class SessionsTestFixture { - companion object { - private val INSTANCE = SessionsTestFixture() - - private const val BASE_URL = "https://localhost:8443/" - private const val MERCHANT_ID = "some-id" - - const val CARD = "card" - const val CVC = "cvc" - - fun baseUrl(): String { - return BASE_URL - } - - fun merchantId(): String { - return MERCHANT_ID - } - - fun sessionsTextFixture(): SessionsTestFixture { - return INSTANCE - } - - fun pan(): String? { - return INSTANCE.pan - } - - fun expiryDate(): String? { - return INSTANCE.expiryDate - } - - fun cvc(): String? { - return INSTANCE.cvc - } - - fun sessionsTypes(): List { - return INSTANCE.sessionsTypes - } - - fun reactNativeSdkVersion(): String? { - return INSTANCE.reactNativeSdkVersion - } - } - - var pan: String? = null - var expiryDate: String? = null - var cvc: String? = null - var sessionsTypes: MutableList = ArrayList() - var reactNativeSdkVersion: String? = null - - fun pan(pan: String?): SessionsTestFixture { - this.pan = pan - return this - } - - fun expiryDate(expiryDate: String?): SessionsTestFixture { - this.expiryDate = expiryDate - return this - } - - fun cvc(cvc: String?): SessionsTestFixture { - this.cvc = cvc - return this - } - - fun sessionsTypes(sessionsTypes: List): SessionsTestFixture { - this.sessionsTypes.clear() - this.sessionsTypes.addAll(sessionsTypes) - return this - } - - fun reactNativeSdkVersion(reactNativeSdkVersion: String?): SessionsTestFixture { - this.reactNativeSdkVersion = reactNativeSdkVersion - return this - } - - fun clear(): SessionsTestFixture { - INSTANCE.pan = null - INSTANCE.expiryDate = null - INSTANCE.cvc = null - INSTANCE.sessionsTypes.clear() - INSTANCE.reactNativeSdkVersion = null - return this - } -} diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/BridgeArguments.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/BridgeArguments.kt new file mode 100644 index 0000000..59c8860 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/BridgeArguments.kt @@ -0,0 +1,75 @@ +package com.worldpay.access.checkout.reactnative.utils + +import com.facebook.react.bridge.JavaOnlyArray +import com.facebook.react.bridge.JavaOnlyMap + +class BridgeArguments { + private companion object { + const val bridgeFieldBaseUrl = "baseUrl" + const val bridgeFieldMerchantId = "merchantId" + const val bridgeFieldPanId = "panId" + const val bridgeFieldExpiryDateId = "expiryDateId" + const val bridgeFieldCvcId = "cvcId" + const val bridgeFieldEnablePanFormatting = "enablePanFormatting" + const val bridgeFieldAcceptedCardBrands = "acceptedCardBrands" + const val bridgeFieldSessionTypes = "sessionTypes" + const val bridgeFieldReactNativeSdkVersion = "reactNativeSdkVersion" + + const val defaultReactNativeSdkVersion = "1.0.0" + } + + private val map = JavaOnlyMap() + + init { + map.putString(bridgeFieldReactNativeSdkVersion, defaultReactNativeSdkVersion) + } + + fun baseUrl(baseUrl: String): BridgeArguments { + map.putString(bridgeFieldBaseUrl, baseUrl) + return this + } + + fun merchantId(merchantId: String): BridgeArguments { + map.putString(bridgeFieldMerchantId, merchantId) + return this + } + + fun panId(panId: String): BridgeArguments { + map.putString(bridgeFieldPanId, panId) + return this + } + + fun expiryDateId(expiryDateId: String): BridgeArguments { + map.putString(bridgeFieldExpiryDateId, expiryDateId) + return this + } + + fun cvcId(cvcId: String): BridgeArguments { + map.putString(bridgeFieldCvcId, cvcId) + return this + } + + fun enablePanFormatting(enablePanFormatting: Boolean): BridgeArguments { + map.putBoolean(bridgeFieldEnablePanFormatting, enablePanFormatting) + return this + } + + fun acceptedCardBrands(acceptedCardBrands: List): BridgeArguments { + map.putArray(bridgeFieldAcceptedCardBrands, JavaOnlyArray.from(acceptedCardBrands)) + return this + } + + fun sessionTypes(sessionTypes: List): BridgeArguments { + map.putArray(bridgeFieldSessionTypes, JavaOnlyArray.from(sessionTypes)) + return this + } + + fun reactNativeSdkVersion(reactNativeSdkVersion: String): BridgeArguments { + map.putString(bridgeFieldReactNativeSdkVersion, reactNativeSdkVersion) + return this + } + + fun toJavaOnlyMap(): JavaOnlyMap { + return map + } +} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestConstants.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestConstants.kt new file mode 100644 index 0000000..71aafc1 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestConstants.kt @@ -0,0 +1,12 @@ +package com.worldpay.access.checkout.reactnative.utils + +class TestConstants { + companion object { + const val baseUrl = "https://localhost:8443/" + const val merchantId = "some-merchant-id" + + const val panId = "some-pan-id" + const val expiryDateId = "some-expiry-date-id" + const val cvcId = "some-cvc-id" + } +} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestFixture.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestFixture.kt new file mode 100644 index 0000000..1fd0075 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/utils/TestFixture.kt @@ -0,0 +1,92 @@ +package com.worldpay.access.checkout.reactnative.utils + +class TestFixture { + companion object { + private val INSTANCE = TestFixture() + + const val CARD = "card" + const val CVC = "cvc" + + fun testFixture(): TestFixture { + return INSTANCE + } + + fun pan(): String? { + return INSTANCE.pan + } + + fun expiryDate(): String? { + return INSTANCE.expiryDate + } + + fun cvc(): String? { + return INSTANCE.cvc + } + + fun sessionsTypes(): List { + return INSTANCE.sessionsTypes + } + + fun reactNativeSdkVersion(): String? { + return INSTANCE.reactNativeSdkVersion + } + + fun enablePanFormatting(): Boolean { + return INSTANCE.enablePanFormatting + } + + fun acceptedCardBrands(): List { + return INSTANCE.acceptedCardBrands + } + } + + private var pan: String? = null + private var expiryDate: String? = null + private var cvc: String? = null + private var sessionsTypes: MutableList = ArrayList() + private var reactNativeSdkVersion: String? = null + private var enablePanFormatting = false + private var acceptedCardBrands: MutableList = ArrayList() + + fun pan(pan: String?): TestFixture { + this.pan = pan + return this + } + + fun expiryDate(expiryDate: String?): TestFixture { + this.expiryDate = expiryDate + return this + } + + fun cvc(cvc: String?): TestFixture { + this.cvc = cvc + return this + } + + fun sessionsTypes(sessionsTypes: List): TestFixture { + this.sessionsTypes.clear() + this.sessionsTypes.addAll(sessionsTypes) + return this + } + + fun reactNativeSdkVersion(reactNativeSdkVersion: String?): TestFixture { + this.reactNativeSdkVersion = reactNativeSdkVersion + return this + } + + fun acceptedCardBrands(cardBrands: List): TestFixture { + acceptedCardBrands.addAll(cardBrands) + return this + } + + fun clear(): TestFixture { + INSTANCE.pan = null + INSTANCE.expiryDate = null + INSTANCE.cvc = null + INSTANCE.sessionsTypes.clear() + INSTANCE.reactNativeSdkVersion = null + INSTANCE.enablePanFormatting = false + INSTANCE.acceptedCardBrands.clear() + return this + } +} diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTestsActivity.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTestsActivity.kt index e07f175..dee0412 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTestsActivity.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationInstrumentedTestsActivity.kt @@ -1,145 +1,37 @@ package com.worldpay.access.checkout.reactnative.validation -import android.os.Bundle -import android.widget.EditText -import android.widget.LinearLayout -import android.widget.TextView.BufferType.EDITABLE -import androidx.activity.ComponentActivity -import com.facebook.react.bridge.JavaOnlyArray import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.PromiseImpl -import com.facebook.soloader.SoLoader +import com.worldpay.access.checkout.reactnative.AbstractInstrumentedTestsActivity import com.worldpay.access.checkout.reactnative.AccessCheckoutReactNativeModule -import com.worldpay.access.checkout.reactnative.R -import com.worldpay.access.checkout.reactnative.react.EventMock import com.worldpay.access.checkout.reactnative.react.FailureCallback -import com.worldpay.access.checkout.reactnative.react.MockReactApplicationContext.Companion.mockReactApplicationContext import com.worldpay.access.checkout.reactnative.react.SuccessCallback -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope +import com.worldpay.access.checkout.reactnative.utils.BridgeArguments +import com.worldpay.access.checkout.reactnative.utils.TestConstants +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.cvcId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.expiryDateId +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.panId +import com.worldpay.access.checkout.reactnative.utils.TestFixture import kotlinx.coroutines.launch -import java.util.concurrent.Executors -import java.util.concurrent.LinkedBlockingQueue -import java.util.concurrent.TimeUnit.MILLISECONDS import kotlin.coroutines.suspendCoroutine -class CardValidationInstrumentedTestsActivity : ComponentActivity(), - CoroutineScope by MainScope() { - - companion object { - const val panId = "panId" - const val expiryDateId = "expiryDateId" - const val cvcId = "cvcId" - - const val bridgeFieldBaseUrl = "baseUrl" - const val bridgeFieldPanId = "panId" - const val bridgeFieldExpiryDateId = "expiryDateId" - const val bridgeFieldCvcId = "cvcId" - const val bridgeFieldEnablePanFormatting = "enablePanFormatting" - const val bridgeFieldAcceptedCardBrands = "acceptedCardBrands" - - private val actions = LinkedBlockingQueue<((CardValidationInstrumentedTestsActivity) -> Unit)>() - - fun run(action: (CardValidationInstrumentedTestsActivity) -> Unit) { - actions.offer(action) - } - - fun clearActions() { - actions.clear() - } - } - - private val scheduledExecutorService = Executors.newScheduledThreadPool(4) - private val reactApplicationContext = mockReactApplicationContext(this) - - var panEditText: EditText? = null - var expiryDateEditText: EditText? = null - var cvcEditText: EditText? = null - - fun eventsReceived(): List { - return reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted - } - - fun clearEventsReceived() { - reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted.clear() - } - - fun setPan(value: String) { - panEditText!!.setText(value, EDITABLE) - } - - fun setExpiryDate(value: String) { - expiryDateEditText!!.setText(value, EDITABLE) - } - - fun setCvc(value: String) { - cvcEditText!!.setText(value, EDITABLE) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - SoLoader.init(this, false) - - panEditText = createEditText(panId) - expiryDateEditText = createEditText(expiryDateId) - cvcEditText = createEditText(cvcId) - - val layout = LinearLayout(this) - layout.addView(panEditText) - layout.addView(expiryDateEditText) - layout.addView(cvcEditText) - setContentView(layout) - - val validationArguments = testFixtureToReadableMap() - val module = AccessCheckoutReactNativeModule(reactApplicationContext) +class CardValidationInstrumentedTestsActivity : AbstractInstrumentedTestsActivity() { + override fun doOnCreate(module: AccessCheckoutReactNativeModule) { launch { - initialiseCardValidation(module, validationArguments) + val bridgeArguments = BridgeArguments() + .baseUrl(TestConstants.baseUrl) + .panId(panId) + .expiryDateId(expiryDateId) + .cvcId(cvcId) + .enablePanFormatting(TestFixture.enablePanFormatting()) + .acceptedCardBrands(TestFixture.acceptedCardBrands()) + + initialiseCardValidation(module, bridgeArguments.toJavaOnlyMap()) } } - override fun onStart() { - super.onStart() - - val pollStepsQueue = { - while (true) { - val action = actions.poll() - if (action != null) { - runOnUiThread { action.invoke(this) } - } - Thread.sleep(100L) - } - } - - scheduledExecutorService.schedule(pollStepsQueue, 500, MILLISECONDS) - - } - - override fun onStop() { - super.onStop() - - scheduledExecutorService.shutdownNow() - } - - private fun testFixtureToReadableMap(): JavaOnlyMap { - val arguments = JavaOnlyMap() - arguments.putString(bridgeFieldBaseUrl, CardValidationTestFixture.baseUrl()) - arguments.putString(bridgeFieldPanId, CardValidationTestFixture.panId()) - arguments.putString(bridgeFieldExpiryDateId, CardValidationTestFixture.expiryDateId()) - arguments.putString(bridgeFieldCvcId, CardValidationTestFixture.cvcId()) - arguments.putBoolean( - bridgeFieldEnablePanFormatting, CardValidationTestFixture.enablePanFormatting() - ) - - val acceptedCardBrands = JavaOnlyArray() - CardValidationTestFixture.acceptedCardBrands() - .forEach { brand -> acceptedCardBrands.pushString(brand) } - arguments.putArray(bridgeFieldAcceptedCardBrands, acceptedCardBrands) - return arguments - } - private suspend fun initialiseCardValidation( module: AccessCheckoutReactNativeModule, arguments: JavaOnlyMap @@ -151,10 +43,4 @@ class CardValidationInstrumentedTestsActivity : ComponentActivity(), module.initialiseCardValidation(arguments, promise) } - - private fun createEditText(id: String): EditText { - val editText = EditText(this) - editText.setTag(R.id.view_tag_native_id, id) - return editText - } } \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationTestFixture.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationTestFixture.kt deleted file mode 100644 index 2da760e..0000000 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CardValidationTestFixture.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.worldpay.access.checkout.reactnative.validation - -class CardValidationTestFixture { - companion object { - private val INSTANCE = CardValidationTestFixture() - - private const val BASE_URL = "https://localhost:8443/" - - fun baseUrl(): String { - return BASE_URL - } - - fun validationTestFixture(): CardValidationTestFixture { - return INSTANCE - } - - fun panId(): String { - return INSTANCE.panId - } - - fun expiryDateId(): String { - return INSTANCE.expiryDateId - } - - fun cvcId(): String { - return INSTANCE.cvcId - } - - fun enablePanFormatting(): Boolean { - return INSTANCE.enablePanFormatting - } - - fun acceptedCardBrands(): List { - return INSTANCE.acceptedCardBrands - } - } - - private var panId: String = "" - private var expiryDateId: String = "" - private var cvcId: String = "" - private var enablePanFormatting = false - private var acceptedCardBrands: MutableList = ArrayList() - - fun panId(panId: String): CardValidationTestFixture { - this.panId = panId - return this - } - - fun expiryDateId(expiryDateId: String): CardValidationTestFixture { - this.expiryDateId = expiryDateId - return this - } - - fun cvcId(cvcId: String): CardValidationTestFixture { - this.cvcId = cvcId - return this - } - - fun acceptedCardBrands(cardBrands: List): CardValidationTestFixture { - acceptedCardBrands.addAll(cardBrands) - return this - } - - fun clear(): CardValidationTestFixture { - INSTANCE.panId = "" - INSTANCE.expiryDateId = "" - INSTANCE.cvcId = "" - INSTANCE.enablePanFormatting = false - INSTANCE.acceptedCardBrands.clear() - return this - } -} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTestsActivity.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTestsActivity.kt index e2e82a0..b20515d 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTestsActivity.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationInstrumentedTestsActivity.kt @@ -1,113 +1,27 @@ package com.worldpay.access.checkout.reactnative.validation -import android.os.Bundle -import android.widget.EditText -import android.widget.LinearLayout -import android.widget.TextView.BufferType.EDITABLE -import androidx.activity.ComponentActivity import com.facebook.react.bridge.JavaOnlyMap import com.facebook.react.bridge.PromiseImpl -import com.facebook.soloader.SoLoader +import com.worldpay.access.checkout.reactnative.AbstractInstrumentedTestsActivity import com.worldpay.access.checkout.reactnative.AccessCheckoutReactNativeModule -import com.worldpay.access.checkout.reactnative.R -import com.worldpay.access.checkout.reactnative.react.EventMock import com.worldpay.access.checkout.reactnative.react.FailureCallback -import com.worldpay.access.checkout.reactnative.react.MockReactApplicationContext.Companion.mockReactApplicationContext import com.worldpay.access.checkout.reactnative.react.SuccessCallback -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.MainScope +import com.worldpay.access.checkout.reactnative.utils.BridgeArguments +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.baseUrl +import com.worldpay.access.checkout.reactnative.utils.TestConstants.Companion.cvcId import kotlinx.coroutines.launch -import java.util.concurrent.Executors -import java.util.concurrent.LinkedBlockingQueue -import java.util.concurrent.TimeUnit.MILLISECONDS import kotlin.coroutines.suspendCoroutine -class CvcOnlyValidationInstrumentedTestsActivity : ComponentActivity(), - CoroutineScope by MainScope() { - - companion object { - const val cvcId = "cvcId" - const val bridgeFieldBaseUrl = "baseUrl" - - const val bridgeFieldCvcId = "cvcId" - - private val actions = - LinkedBlockingQueue<((CvcOnlyValidationInstrumentedTestsActivity) -> Unit)>() - - fun run(action: (CvcOnlyValidationInstrumentedTestsActivity) -> Unit) { - actions.offer(action) - } - - fun clearActions() { - actions.clear() - } - } - - private val scheduledExecutorService = Executors.newScheduledThreadPool(4) - private val reactApplicationContext = mockReactApplicationContext(this) - - var cvcEditText: EditText? = null - - fun eventsReceived(): List { - return reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted - } - - fun clearEventsReceived() { - reactApplicationContext.rtcDeviceEventEmitter.eventsEmitted.clear() - } - - fun setCvc(value: String) { - cvcEditText!!.setText(value, EDITABLE) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - SoLoader.init(this, false) - - cvcEditText = createEditText(cvcId) - - val layout = LinearLayout(this) - layout.addView(cvcEditText) - setContentView(layout) - - val validationArguments = testFixtureToReadableMap() - val module = AccessCheckoutReactNativeModule(reactApplicationContext) +class CvcOnlyValidationInstrumentedTestsActivity : AbstractInstrumentedTestsActivity() { + override fun doOnCreate(module: AccessCheckoutReactNativeModule) { launch { - initialiseCvcOnlyValidation(module, validationArguments) - } - } - - override fun onStart() { - super.onStart() + val bridgeArguments = BridgeArguments() + .baseUrl(baseUrl) + .cvcId(cvcId) - val pollStepsQueue = { - while (true) { - val action = actions.poll() - if (action != null) { - runOnUiThread { action.invoke(this) } - } - Thread.sleep(100L) - } + initialiseCvcOnlyValidation(module, bridgeArguments.toJavaOnlyMap()) } - - scheduledExecutorService.schedule(pollStepsQueue, 500, MILLISECONDS) - - } - - override fun onStop() { - super.onStop() - - scheduledExecutorService.shutdownNow() - } - - private fun testFixtureToReadableMap(): JavaOnlyMap { - val arguments = JavaOnlyMap() - arguments.putString(bridgeFieldBaseUrl, CvcOnlyValidationTestFixture.baseUrl()) - arguments.putString(bridgeFieldCvcId, CvcOnlyValidationTestFixture.cvcId()) - - return arguments } private suspend fun initialiseCvcOnlyValidation( @@ -121,10 +35,4 @@ class CvcOnlyValidationInstrumentedTestsActivity : ComponentActivity(), module.initialiseCvcOnlyValidation(arguments, promise) } - - private fun createEditText(id: String): EditText { - val editText = EditText(this) - editText.setTag(R.id.view_tag_native_id, id) - return editText - } } \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationTestFixture.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationTestFixture.kt deleted file mode 100644 index 43198d9..0000000 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/instrumentedTests/java/com/worldpay/access/checkout/reactnative/validation/CvcOnlyValidationTestFixture.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.worldpay.access.checkout.reactnative.validation - -class CvcOnlyValidationTestFixture { - companion object { - private val INSTANCE = CvcOnlyValidationTestFixture() - - private const val BASE_URL = "https://localhost:8443/" - - fun baseUrl(): String { - return BASE_URL - } - - fun cvcOnlyValidationTestFixture(): CvcOnlyValidationTestFixture { - return INSTANCE - } - - fun cvcId(): String { - return INSTANCE.cvcId - } - } - - private var cvcId: String = "" - - fun cvcId(cvcId: String): CvcOnlyValidationTestFixture { - this.cvcId = cvcId - return this - } - - fun clear(): CvcOnlyValidationTestFixture { - INSTANCE.cvcId = "" - return this - } -} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactNativeModule.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactNativeModule.kt index 584d1f0..c329203 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactNativeModule.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactNativeModule.kt @@ -3,9 +3,12 @@ package com.worldpay.access.checkout.reactnative import android.os.Handler import android.os.Looper import android.util.Log -import android.widget.EditText import androidx.lifecycle.LifecycleOwner -import com.facebook.react.bridge.* +import com.facebook.react.bridge.Promise +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReactContextBaseJavaModule +import com.facebook.react.bridge.ReactMethod +import com.facebook.react.bridge.ReadableMap import com.facebook.react.uimanager.util.ReactFindViewUtil import com.worldpay.access.checkout.client.session.AccessCheckoutClient import com.worldpay.access.checkout.client.session.AccessCheckoutClientBuilder @@ -22,6 +25,7 @@ import com.worldpay.access.checkout.reactnative.validation.CvcOnlyValidationConf import com.worldpay.access.checkout.reactnative.validation.CvcOnlyValidationListener import com.worldpay.access.checkout.session.AccessCheckoutClientDisposer import com.worldpay.access.checkout.session.api.client.WpSdkHeader +import com.worldpay.access.checkout.ui.AccessCheckoutEditText /** * Module class that implements all the functionality that is required by Javascript for the end user @@ -77,15 +81,19 @@ class AccessCheckoutReactNativeModule constructor( sessionResponseListener.promise = promise + val panView = findView(config.panId!!) + val expiryDateView = findView(config.expiryDateId!!) + val cvcView = findView(config.cvcId!!) + val cardDetails: CardDetails = if (isCvcSessionOnly(config.sessionTypes)) { CardDetails.Builder() - .cvc(config.cvcValue!!) + .cvc(cvcView) .build() } else { CardDetails.Builder() - .pan(config.panValue!!) - .expiryDate(config.expiryDateValue!!) - .cvc(config.cvcValue!!) + .pan(panView) + .expiryDate(expiryDateView) + .cvc(cvcView) .build() } @@ -109,12 +117,10 @@ class AccessCheckoutReactNativeModule constructor( fun initialiseCardValidation(readableMap: ReadableMap, promise: Promise) { try { val config = CardValidationConfigConverter().fromReadableMap(readableMap) - val rootView = reactContext.currentActivity?.window?.decorView?.rootView - val panView = ReactFindViewUtil.findView(rootView, config.panId) as EditText - val expiryDateView = - ReactFindViewUtil.findView(rootView, config.expiryDateId) as EditText - val cvcView = ReactFindViewUtil.findView(rootView, config.cvcId) as EditText + val panView = findView(config.panId) + val expiryDateView = findView(config.expiryDateId) + val cvcView = findView(config.cvcId) val cardValidationConfigBuilder = CardValidationConfig.Builder() .baseUrl(config.baseUrl) @@ -154,9 +160,8 @@ class AccessCheckoutReactNativeModule constructor( fun initialiseCvcOnlyValidation(readableMap: ReadableMap, promise: Promise) { try { val config = CvcOnlyValidationConfigConverter().fromReadableMap(readableMap) - val rootView = reactContext.currentActivity?.window?.decorView?.rootView - val cvcView = ReactFindViewUtil.findView(rootView, config.cvcId) as EditText + val cvcView = findView(config.cvcId) val cvcOnlyValidationConfigBuilder = CvcValidationConfig.Builder() .cvc(cvcView) @@ -201,11 +206,16 @@ class AccessCheckoutReactNativeModule constructor( } } - private fun getLifecycleOwner() = (reactContext.currentActivity as LifecycleOwner) + private fun isCvcSessionOnly(sessionType: List): Boolean { return sessionType.count() == 1 && sessionType.first() == SessionType.CVC } -} + private fun findView(viewId: String): T { + val rootView = reactContext.currentActivity?.window?.decorView?.rootView + @Suppress("UNCHECKED_CAST") + return ReactFindViewUtil.findView(rootView, viewId) as T + } +} diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackage.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackage.kt index 5aa8e49..88a8d2d 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackage.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackage.kt @@ -3,7 +3,7 @@ package com.worldpay.access.checkout.reactnative import com.facebook.react.ReactPackage import com.facebook.react.bridge.NativeModule import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.uimanager.ViewManager +import com.worldpay.access.checkout.reactnative.ui.AccessCheckoutTextInputManager /** * This class is responsible for registering native modules with React Native. (called upon initialisation) @@ -13,8 +13,7 @@ class AccessCheckoutReactPackage : ReactPackage { override fun createNativeModules(reactContext: ReactApplicationContext): List { return listOf(AccessCheckoutReactNativeModule(reactContext)) } - - override fun createViewManagers(reactContext: ReactApplicationContext): List> { - return emptyList() - } + override fun createViewManagers( + reactContext: ReactApplicationContext + ) = listOf(AccessCheckoutTextInputManager(reactContext)) } diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfig.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfig.kt index bd2e316..ac248b2 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfig.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfig.kt @@ -5,9 +5,9 @@ import com.worldpay.access.checkout.client.session.model.SessionType class GenerateSessionsConfig( val baseUrl: String, val merchantId: String, - val panValue: String?, - val expiryDateValue: String?, - val cvcValue: String?, + val panId: String?, + val expiryDateId: String?, + val cvcId: String?, val sessionTypes: List, val reactNativeSdkVersion: String ) diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverter.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverter.kt index eed085c..7347658 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverter.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverter.kt @@ -11,9 +11,9 @@ class GenerateSessionsConfigConverter { fun fromReadableMap(map: ReadableMap): GenerateSessionsConfig { val baseUrl = extractString(fromMap = map, forKey = "baseUrl") val merchantId = extractString(fromMap = map, forKey = "merchantId") - val panValue = extractString(fromMap = map, forKey = "panValue") - val expiryDateValue = extractString(fromMap = map, forKey = "expiryDateValue") - val cvcValue = extractString(fromMap = map, forKey = "cvcValue") + val panId = extractString(fromMap = map, forKey = "panId") + val expiryDateId = extractString(fromMap = map, forKey = "expiryDateId") + val cvcId = extractString(fromMap = map, forKey = "cvcId") val sessionTypes = map.getArray("sessionTypes") val reactNativeSdkVersion = extractString(fromMap = map, forKey = "reactNativeSdkVersion") @@ -24,28 +24,28 @@ class GenerateSessionsConfigConverter { val sessionTypesList = toSessionTypesList(sessionTypes) if (sessionTypesList.contains(CARD)) { - validateNonEmptyString(panValue, "panValue") - validateNonEmptyString(expiryDateValue, "expiryDateValue") - validateNonEmptyString(cvcValue, "cvcValue") + validateNonEmptyString(panId, "panId") + validateNonEmptyString(expiryDateId, "expiryDateId") + validateNonEmptyString(cvcId, "cvcId") return GenerateSessionsConfig( baseUrl = baseUrl!!, merchantId = merchantId!!, - panValue = panValue!!, - expiryDateValue = expiryDateValue!!, - cvcValue = cvcValue!!, + panId = panId!!, + expiryDateId = expiryDateId!!, + cvcId = cvcId!!, sessionTypes = sessionTypesList, reactNativeSdkVersion = reactNativeSdkVersion!! ) } else { - validateNonEmptyString(cvcValue, "cvcValue") + validateNonEmptyString(cvcId, "cvcId") return GenerateSessionsConfig( baseUrl = baseUrl!!, merchantId = merchantId!!, - panValue = "", - expiryDateValue = "", - cvcValue = cvcValue!!, + panId = "", + expiryDateId = "", + cvcId = cvcId!!, sessionTypes = sessionTypesList, reactNativeSdkVersion = reactNativeSdkVersion!! ) diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManager.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManager.kt new file mode 100644 index 0000000..901d910 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/main/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManager.kt @@ -0,0 +1,109 @@ +package com.worldpay.access.checkout.reactnative.ui + +import android.graphics.Typeface +import android.os.Build +import android.view.Gravity +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.uimanager.SimpleViewManager +import com.facebook.react.uimanager.ThemedReactContext +import com.facebook.react.uimanager.ViewProps +import com.facebook.react.uimanager.annotations.ReactProp +import com.worldpay.access.checkout.ui.AccessCheckoutEditText +import java.lang.reflect.Type + + +class AccessCheckoutTextInputManager(private val callerContext: ReactApplicationContext) : + SimpleViewManager() { + + override fun getName() = REACT_CLASS + + companion object { + const val REACT_CLASS = "AccessCheckoutTextInput" + } + + override fun createViewInstance(context: ThemedReactContext): AccessCheckoutEditText { + val accessCheckoutEditText = AccessCheckoutEditText(context) + + // In order to replicate React Native behaviours in both ios and android we need reset + // the default paddings gravity and background added by Android + accessCheckoutEditText.background = null + accessCheckoutEditText.textSize = 14f + accessCheckoutEditText.setPadding(0, 0, 0, 0) + accessCheckoutEditText.gravity = Gravity.CENTER + + return accessCheckoutEditText + } + + /** + * Properties + */ + @ReactProp(name = ViewProps.COLOR, customType = "Color") + fun setRTCTextColor(accessCheckoutEditText: AccessCheckoutEditText, color: Int) { + accessCheckoutEditText.setTextColor(color) + } + + + @ReactProp(name = "font") + fun setRTCFont(accessCheckoutEditText: AccessCheckoutEditText, font: ReadableMap) { + var customTypeface = Typeface.DEFAULT + var fontWeightProvidedAsUnit = false; + + if (font.hasKey(ViewProps.FONT_SIZE)) { + val fontSize: Float = font.getDouble(ViewProps.FONT_SIZE).toFloat() + accessCheckoutEditText.textSize = fontSize + } + + if (font.hasKey(ViewProps.FONT_WEIGHT)) { + fontWeightProvidedAsUnit = when (font.getString(ViewProps.FONT_WEIGHT)) { + "bold", "normal" -> false + else -> true + } + } + + val bold = isBold(font) + val italic = isItalic(font) + + val fontStyle: Int = when { + bold && italic -> Typeface.BOLD_ITALIC + bold -> Typeface.BOLD + italic -> Typeface.ITALIC + else -> Typeface.NORMAL + } + + // Always attempt to get Font family if the font family is null or unsupported, a default one will be used + customTypeface = Typeface.create(font.getString(ViewProps.FONT_FAMILY), fontStyle) + + // Font Weight only supported in API >28 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && fontWeightProvidedAsUnit) { + val fontAsString = font.getString(ViewProps.FONT_WEIGHT) + // Note: This default should never happen as we use fontWeightProvidedAsUnit as a check + // but to avoid a compilation false positive we default to 400 which should be the regular for fonts. + // Also: Using font.getInt() seems to cause a casting issue where it casts tries to cast a String to a Double, which makes the app crash. + val fontWeightNumber = fontAsString?.toInt() ?: 400 + customTypeface = Typeface.create(customTypeface, fontWeightNumber, italic) + } + + accessCheckoutEditText.typeface = customTypeface; + } + + private fun isItalic(font: ReadableMap): Boolean { + return font.hasKey(ViewProps.FONT_STYLE) && "italic" == font.getString(ViewProps.FONT_STYLE) + } + + private fun isBold(font: ReadableMap): Boolean { + return font.hasKey(ViewProps.FONT_WEIGHT) && "bold" == font.getString(ViewProps.FONT_WEIGHT) + } + + @ReactProp(name = "placeholder") + fun setRTCPlaceholder(accessCheckoutEditText: AccessCheckoutEditText, placeholder: String) { + accessCheckoutEditText.setHint(placeholder) + } + + @ReactProp(name = "editable") + fun setRTCEditable(accessCheckoutEditText: AccessCheckoutEditText, editable: Boolean) { + accessCheckoutEditText.isEnabled = editable + } + +} + diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackageTest.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackageTest.kt index 48b7cef..ed80f41 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackageTest.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/AccessCheckoutReactPackageTest.kt @@ -3,6 +3,7 @@ package com.worldpay.access.checkout.reactnative import android.content.Context import androidx.test.core.app.ApplicationProvider import com.facebook.react.bridge.ReactApplicationContext +import com.worldpay.access.checkout.reactnative.ui.AccessCheckoutTextInputManager import org.assertj.core.api.Assertions.assertThat import org.junit.Test import org.junit.runner.RunWith @@ -21,10 +22,11 @@ internal class AccessCheckoutReactPackageTest { } @Test - fun `createViewManagers() should not create view managers`() { + fun `createViewManagers() should return a list with a single instance of AccessCheckoutEditTextManager`() { val viewManagers = acoReactPackage.createViewManagers(reactApplicationContext()) - assertThat(viewManagers).isEmpty() + assertThat(viewManagers).hasSize(1) + assertThat(viewManagers[0]).isInstanceOf(AccessCheckoutTextInputManager::class.java) } private fun reactApplicationContext(): ReactApplicationContext { diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverterTest.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverterTest.kt index 023d63a..8e087db 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverterTest.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/session/GenerateSessionsConfigConverterTest.kt @@ -18,9 +18,9 @@ class GenerateSessionsConfigConverterTest { assertThat(config.baseUrl).isEqualTo("some-base-url") assertThat(config.merchantId).isEqualTo("some-merchant-id") - assertThat(config.panValue).isEqualTo("some-pan-value") - assertThat(config.expiryDateValue).isEqualTo("some-expiry-date-value") - assertThat(config.cvcValue).isEqualTo("some-cvc-value") + assertThat(config.panId).isEqualTo("some-pan-value") + assertThat(config.expiryDateId).isEqualTo("some-expiry-date-value") + assertThat(config.cvcId).isEqualTo("some-cvc-value") assertThat(config.sessionTypes).isEqualTo(listOf(SessionType.CARD)) assertThat(config.reactNativeSdkVersion).isEqualTo("1.2.3") } @@ -86,93 +86,93 @@ class GenerateSessionsConfigConverterTest { } @Test - fun `should throw exception when session types contains card and panValue is null`() { + fun `should throw exception when session types contains card and panId is null`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("panValue", null) + map.putString("panId", null) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected panValue to be provided but was not") + .withMessage("Expected panId to be provided but was not") } @Test - fun `should throw exception when session types contains card and panValue is not a String`() { + fun `should throw exception when session types contains card and panId is not a String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putInt("panValue", 1) + map.putInt("panId", 1) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected panValue to be a String but was not") + .withMessage("Expected panId to be a String but was not") } @Test - fun `should throw exception when session types contains card and panValue is an empty String`() { + fun `should throw exception when session types contains card and panId is an empty String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("panValue", "") + map.putString("panId", "") assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected panValue to be a non-empty String but was not") + .withMessage("Expected panId to be a non-empty String but was not") } @Test fun `should throw exception when session types contains card and expiryDate is null`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("expiryDateValue", null) + map.putString("expiryDateId", null) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected expiryDateValue to be provided but was not") + .withMessage("Expected expiryDateId to be provided but was not") } @Test - fun `should throw exception when session types contains card and expiryDateValue is not a String`() { + fun `should throw exception when session types contains card and expiryDateId is not a String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putInt("expiryDateValue", 1) + map.putInt("expiryDateId", 1) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected expiryDateValue to be a String but was not") + .withMessage("Expected expiryDateId to be a String but was not") } @Test - fun `should throw exception when session types contains card and expiryDateValue is an empty String`() { + fun `should throw exception when session types contains card and expiryDateId is an empty String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("expiryDateValue", "") + map.putString("expiryDateId", "") assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected expiryDateValue to be a non-empty String but was not") + .withMessage("Expected expiryDateId to be a non-empty String but was not") } @Test - fun `should throw exception when session types contains card and cvcValue is null`() { + fun `should throw exception when session types contains card and cvcId is null`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("cvcValue", null) + map.putString("cvcId", null) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be provided but was not") + .withMessage("Expected cvcId to be provided but was not") } @Test - fun `should throw exception when session types contains card and cvcValue is not a String`() { + fun `should throw exception when session types contains card and cvcId is not a String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putInt("cvcValue", 1) + map.putInt("cvcId", 1) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be a String but was not") + .withMessage("Expected cvcId to be a String but was not") } @Test - fun `should throw exception when session types contains card and cvcValue is an empty String`() { + fun `should throw exception when session types contains card and cvcId is an empty String`() { val map = mapWithCardSessionTypesAndValidEntries() - map.putString("cvcValue", "") + map.putString("cvcId", "") assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be a non-empty String but was not") + .withMessage("Expected cvcId to be a non-empty String but was not") } @Test @@ -183,9 +183,9 @@ class GenerateSessionsConfigConverterTest { assertThat(config.baseUrl).isEqualTo("some-base-url") assertThat(config.merchantId).isEqualTo("some-merchant-id") - assertThat(config.panValue).isEqualTo("some-pan-value") - assertThat(config.expiryDateValue).isEqualTo("some-expiry-date-value") - assertThat(config.cvcValue).isEqualTo("some-cvc-value") + assertThat(config.panId).isEqualTo("some-pan-value") + assertThat(config.expiryDateId).isEqualTo("some-expiry-date-value") + assertThat(config.cvcId).isEqualTo("some-cvc-value") assertThat(config.sessionTypes).isEqualTo(listOf(SessionType.CARD)) assertThat(config.reactNativeSdkVersion).isEqualTo("1.2.3") } @@ -193,31 +193,31 @@ class GenerateSessionsConfigConverterTest { @Test fun `should throw exception when session types contains cvc and cvc is null`() { val map = mapWithCvcSessionTypesAndValidEntries() - map.putString("cvcValue", null) + map.putString("cvcId", null) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be provided but was not") + .withMessage("Expected cvcId to be provided but was not") } @Test - fun `should throw exception when session types contains cvc and cvcValue is not a String`() { + fun `should throw exception when session types contains cvc and cvcId is not a String`() { val map = mapWithCvcSessionTypesAndValidEntries() - map.putInt("cvcValue", 1) + map.putInt("cvcId", 1) assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be a String but was not") + .withMessage("Expected cvcId to be a String but was not") } @Test - fun `should throw exception when session types contains cvc and cvcValue is an empty String`() { + fun `should throw exception when session types contains cvc and cvcId is an empty String`() { val map = mapWithCvcSessionTypesAndValidEntries() - map.putString("cvcValue", "") + map.putString("cvcId", "") assertThatIllegalArgumentException() .isThrownBy { converter.fromReadableMap(map) } - .withMessage("Expected cvcValue to be a non-empty String but was not") + .withMessage("Expected cvcId to be a non-empty String but was not") } @Test @@ -228,7 +228,7 @@ class GenerateSessionsConfigConverterTest { assertThat(config.baseUrl).isEqualTo("some-base-url") assertThat(config.merchantId).isEqualTo("some-merchant-id") - assertThat(config.cvcValue).isEqualTo("some-cvc-value") + assertThat(config.cvcId).isEqualTo("some-cvc-value") assertThat(config.sessionTypes).isEqualTo(listOf(SessionType.CVC)) assertThat(config.reactNativeSdkVersion).isEqualTo("1.2.3") } @@ -317,9 +317,9 @@ class GenerateSessionsConfigConverterTest { val map = JavaOnlyMap() map.putString("baseUrl", "some-base-url") map.putString("merchantId", "some-merchant-id") - map.putString("panValue", "some-pan-value") - map.putString("expiryDateValue", "some-expiry-date-value") - map.putString("cvcValue", "some-cvc-value") + map.putString("panId", "some-pan-value") + map.putString("expiryDateId", "some-expiry-date-value") + map.putString("cvcId", "some-cvc-value") map.putArray("sessionTypes", JavaOnlyArray.of("card")) map.putString("reactNativeSdkVersion", "1.2.3") return map @@ -329,7 +329,7 @@ class GenerateSessionsConfigConverterTest { val map = JavaOnlyMap() map.putString("baseUrl", "some-base-url") map.putString("merchantId", "some-merchant-id") - map.putString("cvcValue", "some-cvc-value") + map.putString("cvcId", "some-cvc-value") map.putArray("sessionTypes", JavaOnlyArray.of("cvc")) map.putString("reactNativeSdkVersion", "1.2.3") return map diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManagerTest.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManagerTest.kt new file mode 100644 index 0000000..dc65371 --- /dev/null +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/ui/AccessCheckoutTextInputManagerTest.kt @@ -0,0 +1,159 @@ +package com.worldpay.access.checkout.reactnative.ui + +import android.content.Context +import android.graphics.Color +import android.graphics.Typeface +import androidx.test.core.app.ApplicationProvider +import com.facebook.react.bridge.* +import com.worldpay.access.checkout.ui.AccessCheckoutEditText +import org.assertj.core.api.AssertionsForClassTypes.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.mock +import org.mockito.Mockito.verify +import org.robolectric.RobolectricTestRunner + +@RunWith(RobolectricTestRunner::class) +internal class AccessCheckoutTextInputManagerTest { + private val manager = AccessCheckoutTextInputManager(reactApplicationContext()) + private val accessCheckoutEditTextMock = mock(AccessCheckoutEditText::class.java) + + @Test + fun `getName() should return the name of the react class`() { + val expectedName = "AccessCheckoutTextInput" + + assertThat(manager.name).isEqualTo(expectedName) + } + + @Test + fun `setRTCTextColour() should call setTextColour on AccessEditText`() { + manager.setRTCTextColor(accessCheckoutEditTextMock, Color.RED) + + verify(accessCheckoutEditTextMock).setTextColor(Color.RED) + } + + @Test + fun `setRTCPlaceholder() should call setHint on AccessEditText`() { + manager.setRTCPlaceholder(accessCheckoutEditTextMock, "placeholder") + + verify(accessCheckoutEditTextMock).setHint("placeholder") + } + + @Test + fun `setRTCEditable() should call isEnabled on AccessEditText`() { + manager.setRTCEditable(accessCheckoutEditTextMock, true) + + verify(accessCheckoutEditTextMock).isEnabled = true + } + + @Test + fun `setRTCFont() should call textSize and typeface on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putDouble("fontSize", 12.1) + fontMap.putString("fontFamily", "sans-serif") + + val typeface = Typeface.create("sans-serif", Typeface.NORMAL) + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).textSize = 12.1F + verify(accessCheckoutEditTextMock).typeface = typeface + } + + @Test + fun `setRTCFont() should use a default typeface on AccessEditText`() { + val fontMap = JavaOnlyMap() + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + verify(accessCheckoutEditTextMock).typeface = Typeface.DEFAULT + } + + + @Test + fun `setRTCFont() should call textSize on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putDouble("fontSize", 12.1) + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).textSize = 12.1F + } + + @Test + fun `setRTCFont() should change the font family on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).typeface = Typeface.create("Rubik", Typeface.NORMAL) + } + + + @Test + fun `setRTCFont() should change the font to italic on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + fontMap.putString("fontStyle", "italic") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).typeface = Typeface.create("Rubik", Typeface.ITALIC) + } + + + @Test + fun `setRTCFont() should change the font to bold on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + fontMap.putString("fontWeight", "bold") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).typeface = Typeface.create("Rubik", Typeface.BOLD) + } + + @Test + fun `setRTCFont() should change the font italic bold on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + fontMap.putString("fontStyle", "italic") + fontMap.putString("fontWeight", "bold") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + verify(accessCheckoutEditTextMock).typeface = Typeface.create("Rubik", Typeface.BOLD_ITALIC) + } + + + @Test + fun `setRTCFont() should change the font weight on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + fontMap.putString("fontWeight", "100") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + val expectedTypeface = Typeface.create("Rubik", Typeface.NORMAL); + verify(accessCheckoutEditTextMock).typeface = Typeface.create(expectedTypeface, 100, false) + } + + + @Test + fun `setRTCFont() should change the font weight and italic on AccessEditText`() { + val fontMap = JavaOnlyMap() + fontMap.putString("fontFamily", "Rubik") + fontMap.putString("fontStyle", "italic") + fontMap.putString("fontWeight", "100") + + manager.setRTCFont(accessCheckoutEditTextMock, fontMap) + + val expectedTypeface = Typeface.create("Rubik", Typeface.NORMAL); + verify(accessCheckoutEditTextMock).typeface = Typeface.create(expectedTypeface, 100, true) + } + + + private fun reactApplicationContext(): ReactApplicationContext { + val applicationContext: Context = ApplicationProvider.getApplicationContext() + return ReactApplicationContext(applicationContext) + } +} diff --git a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardCardCardValidationConfigConverterTest.kt b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardValidationConfigConverterTest.kt similarity index 98% rename from access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardCardCardValidationConfigConverterTest.kt rename to access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardValidationConfigConverterTest.kt index a6e511d..aa11d4a 100644 --- a/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardCardCardValidationConfigConverterTest.kt +++ b/access-checkout-react-native-sdk/android/access-checkout-react-native-sdk-android-bridge/src/test/java/com/worldpay/access/checkout/reactnative/validation/CardValidationConfigConverterTest.kt @@ -6,7 +6,7 @@ import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.Assertions.assertThatIllegalArgumentException import org.junit.Test -class CardCardCardValidationConfigConverterTest { +class CardValidationConfigConverterTest { private val converter = CardValidationConfigConverter() @Test diff --git a/access-checkout-react-native-sdk/android/bitrise.yml b/access-checkout-react-native-sdk/android/bitrise.yml index 9f1645c..24abd8e 100644 --- a/access-checkout-react-native-sdk/android/bitrise.yml +++ b/access-checkout-react-native-sdk/android/bitrise.yml @@ -16,7 +16,10 @@ workflows: title: Start Android emulator inputs: - api_level: '30' - - wait-for-android-emulator@1: {} + - wait-for-android-emulator@1: + title: Wait for Android emulator to boot + inputs: + - boot_timeout: 450 - script@1: title: Run instrumentation tests inputs: diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative.xcodeproj/project.pbxproj b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative.xcodeproj/project.pbxproj index aa89c4e..81afd06 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative.xcodeproj/project.pbxproj +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative.xcodeproj/project.pbxproj @@ -7,7 +7,11 @@ objects = { /* Begin PBXBuildFile section */ - 1085FCBC7FCD8F0B65952C91 /* Pods_AccessCheckoutReactNative.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1A9B14B70FA26DBC56CEA54 /* Pods_AccessCheckoutReactNative.framework */; }; + 46D3A9632B3447AE0056016D /* SessionGenerationTestUIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D3A9622B3447AE0056016D /* SessionGenerationTestUIViewController.swift */; }; + 46D3A9652B34494B0056016D /* SessionGenerationTest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 46D3A9642B34494B0056016D /* SessionGenerationTest.storyboard */; }; + 46D3A9682B3461030056016D /* AccessCheckoutReactNativeTestImplementation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D3A9672B3461030056016D /* AccessCheckoutReactNativeTestImplementation.swift */; }; + 46D51A0B2B2B6D3D001A223C /* AccessCheckoutTextInputManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D51A0A2B2B6D3D001A223C /* AccessCheckoutTextInputManager.m */; }; + 46D51A0D2B2B6D72001A223C /* AccessCheckoutTextInputManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D51A0C2B2B6D72001A223C /* AccessCheckoutTextInputManager.swift */; }; 515BA38C282E6D6600BA262D /* AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515BA38B282E6D6600BA262D /* AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift */; }; 515BA394282E6EA500BA262D /* CvcOnlyValidationTestUIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515BA393282E6EA500BA262D /* CvcOnlyValidationTestUIViewController.swift */; }; 515BA39C282E6F9600BA262D /* CvcValidationTest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 515BA39B282E6F9600BA262D /* CvcValidationTest.storyboard */; }; @@ -43,7 +47,8 @@ 51D03E9C27A8611D009781EB /* CardValidationTest.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 51D03E9B27A8611D009781EB /* CardValidationTest.storyboard */; }; 51D03EBC27A8658B009781EB /* CardValidationTestUIViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51D03EBB27A8658B009781EB /* CardValidationTestUIViewController.swift */; }; 64ADC9392816E1510045BA58 /* AccessCheckoutReactNativeSessionAcceptanceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64ADC9382816E1510045BA58 /* AccessCheckoutReactNativeSessionAcceptanceTests.swift */; }; - 9E76FAE1228E11E57FBA1E1F /* Pods_AccessCheckoutReactNativeUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCAD412BF5EDD019601562D6 /* Pods_AccessCheckoutReactNativeUnitTests.framework */; }; + 73C5BACCFF4D7E62A00D43D3 /* Pods_AccessCheckoutReactNative.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EC909E2384C1C3F6C902F7D /* Pods_AccessCheckoutReactNative.framework */; }; + B992525A1622EE868830F720 /* Pods_AccessCheckoutReactNativeUnitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E673532F5581758BAAC54B89 /* Pods_AccessCheckoutReactNativeUnitTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -64,8 +69,13 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 0A05132B3D087D149DBF457C /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig"; sourceTree = ""; }; - 4CF9E9AFFAEFDCD0DF2D332F /* Pods-AccessCheckoutReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNative.release.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative.release.xcconfig"; sourceTree = ""; }; + 0CAB15C0F73790190291BAD5 /* Pods-AccessCheckoutReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNative.debug.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative.debug.xcconfig"; sourceTree = ""; }; + 0F4E0D504060610D97F4C1F2 /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig"; sourceTree = ""; }; + 46D3A9622B3447AE0056016D /* SessionGenerationTestUIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionGenerationTestUIViewController.swift; sourceTree = ""; }; + 46D3A9642B34494B0056016D /* SessionGenerationTest.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = SessionGenerationTest.storyboard; sourceTree = ""; }; + 46D3A9672B3461030056016D /* AccessCheckoutReactNativeTestImplementation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessCheckoutReactNativeTestImplementation.swift; sourceTree = ""; }; + 46D51A0A2B2B6D3D001A223C /* AccessCheckoutTextInputManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AccessCheckoutTextInputManager.m; sourceTree = ""; }; + 46D51A0C2B2B6D72001A223C /* AccessCheckoutTextInputManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessCheckoutTextInputManager.swift; sourceTree = ""; }; 515BA38B282E6D6600BA262D /* AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift; sourceTree = ""; }; 515BA393282E6EA500BA262D /* CvcOnlyValidationTestUIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CvcOnlyValidationTestUIViewController.swift; sourceTree = ""; }; 515BA39B282E6F9600BA262D /* CvcValidationTest.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CvcValidationTest.storyboard; sourceTree = ""; }; @@ -105,11 +115,11 @@ 51D03E8027A8601B009781EB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 51D03E9B27A8611D009781EB /* CardValidationTest.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = CardValidationTest.storyboard; sourceTree = ""; }; 51D03EBB27A8658B009781EB /* CardValidationTestUIViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CardValidationTestUIViewController.swift; sourceTree = ""; }; + 5EC909E2384C1C3F6C902F7D /* Pods_AccessCheckoutReactNative.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AccessCheckoutReactNative.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 64ADC9382816E1510045BA58 /* AccessCheckoutReactNativeSessionAcceptanceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AccessCheckoutReactNativeSessionAcceptanceTests.swift; sourceTree = ""; }; - D1A9B14B70FA26DBC56CEA54 /* Pods_AccessCheckoutReactNative.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AccessCheckoutReactNative.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F774BB62CD3FD4BE07B8E378 /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig"; sourceTree = ""; }; - FB29C6D2B7D46CE62D034A19 /* Pods-AccessCheckoutReactNative.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNative.debug.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative.debug.xcconfig"; sourceTree = ""; }; - FCAD412BF5EDD019601562D6 /* Pods_AccessCheckoutReactNativeUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AccessCheckoutReactNativeUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B75286E22315FE2FFBAD12AB /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig"; sourceTree = ""; }; + E477C2239E194152C52F38B4 /* Pods-AccessCheckoutReactNative.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AccessCheckoutReactNative.release.xcconfig"; path = "Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative.release.xcconfig"; sourceTree = ""; }; + E673532F5581758BAAC54B89 /* Pods_AccessCheckoutReactNativeUnitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AccessCheckoutReactNativeUnitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -117,7 +127,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1085FCBC7FCD8F0B65952C91 /* Pods_AccessCheckoutReactNative.framework in Frameworks */, + 73C5BACCFF4D7E62A00D43D3 /* Pods_AccessCheckoutReactNative.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -126,7 +136,7 @@ buildActionMask = 2147483647; files = ( 516A9F612757D3B800E9B00E /* AccessCheckoutReactNative.framework in Frameworks */, - 9E76FAE1228E11E57FBA1E1F /* Pods_AccessCheckoutReactNativeUnitTests.framework in Frameworks */, + B992525A1622EE868830F720 /* Pods_AccessCheckoutReactNativeUnitTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -143,14 +153,22 @@ 0B03ABF5587A3A533DCAD4DF /* Pods */ = { isa = PBXGroup; children = ( - FB29C6D2B7D46CE62D034A19 /* Pods-AccessCheckoutReactNative.debug.xcconfig */, - 4CF9E9AFFAEFDCD0DF2D332F /* Pods-AccessCheckoutReactNative.release.xcconfig */, - F774BB62CD3FD4BE07B8E378 /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */, - 0A05132B3D087D149DBF457C /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */, + 0CAB15C0F73790190291BAD5 /* Pods-AccessCheckoutReactNative.debug.xcconfig */, + E477C2239E194152C52F38B4 /* Pods-AccessCheckoutReactNative.release.xcconfig */, + B75286E22315FE2FFBAD12AB /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */, + 0F4E0D504060610D97F4C1F2 /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */, ); path = Pods; sourceTree = ""; }; + 46D3A9662B3460EC0056016D /* utils */ = { + isa = PBXGroup; + children = ( + 46D3A9672B3461030056016D /* AccessCheckoutReactNativeTestImplementation.swift */, + ); + path = utils; + sourceTree = ""; + }; 516A9F4D2757D3B800E9B00E = { isa = PBXGroup; children = ( @@ -160,7 +178,7 @@ 51D03E6727A85FBA009781EB /* AccessCheckoutReactNativeUnitTestsApp */, 516A9F582757D3B800E9B00E /* Products */, 0B03ABF5587A3A533DCAD4DF /* Pods */, - 8E71B2DAB4690E3A1CBDE758 /* Frameworks */, + BF7EC299304792913C9DCC8B /* Frameworks */, ); sourceTree = ""; }; @@ -177,6 +195,8 @@ 516A9F592757D3B800E9B00E /* AccessCheckoutReactNative */ = { isa = PBXGroup; children = ( + 46D51A0A2B2B6D3D001A223C /* AccessCheckoutTextInputManager.m */, + 46D51A0C2B2B6D72001A223C /* AccessCheckoutTextInputManager.swift */, 51D03D3927A829D8009781EB /* session */, 517D9E5027A4141F002B1611 /* validation */, 516A9FA12757D6EB00E9B00E /* AccessCheckoutReactNative.m */, @@ -191,6 +211,7 @@ 516A9F642757D3B800E9B00E /* AccessCheckoutReactNativeUnitTests */ = { isa = PBXGroup; children = ( + 46D3A9662B3460EC0056016D /* utils */, 517D9E9927A45398002B1611 /* stubServices */, 517D9E4D27A41409002B1611 /* session */, 517D9E4E27A4140F002B1611 /* validation */, @@ -201,6 +222,7 @@ 515FFD69282E994300A15AEB /* AccessCheckoutReactNativeUnitTests.swift */, 51C8D02B27BA5B5800F30FD5 /* AccessCheckoutRnIllegalArgumentErrorUnitTests.swift */, 51D03EBB27A8658B009781EB /* CardValidationTestUIViewController.swift */, + 46D3A9622B3447AE0056016D /* SessionGenerationTestUIViewController.swift */, 515BA393282E6EA500BA262D /* CvcOnlyValidationTestUIViewController.swift */, ); path = AccessCheckoutReactNativeUnitTests; @@ -262,6 +284,7 @@ children = ( 51D03E8027A8601B009781EB /* AppDelegate.swift */, 51D03E9B27A8611D009781EB /* CardValidationTest.storyboard */, + 46D3A9642B34494B0056016D /* SessionGenerationTest.storyboard */, 515BA39B282E6F9600BA262D /* CvcValidationTest.storyboard */, 51D03E6E27A85FBA009781EB /* Main.storyboard */, 51D03E7127A85FC4009781EB /* Assets.xcassets */, @@ -271,11 +294,11 @@ path = AccessCheckoutReactNativeUnitTestsApp; sourceTree = ""; }; - 8E71B2DAB4690E3A1CBDE758 /* Frameworks */ = { + BF7EC299304792913C9DCC8B /* Frameworks */ = { isa = PBXGroup; children = ( - D1A9B14B70FA26DBC56CEA54 /* Pods_AccessCheckoutReactNative.framework */, - FCAD412BF5EDD019601562D6 /* Pods_AccessCheckoutReactNativeUnitTests.framework */, + 5EC909E2384C1C3F6C902F7D /* Pods_AccessCheckoutReactNative.framework */, + E673532F5581758BAAC54B89 /* Pods_AccessCheckoutReactNativeUnitTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -298,12 +321,12 @@ isa = PBXNativeTarget; buildConfigurationList = 516A9F6B2757D3B800E9B00E /* Build configuration list for PBXNativeTarget "AccessCheckoutReactNative" */; buildPhases = ( - 042F371D493E6DABFDEF3267 /* [CP] Check Pods Manifest.lock */, + 56D9D7010C55496B513D0145 /* [CP] Check Pods Manifest.lock */, 516A9F522757D3B800E9B00E /* Headers */, 516A9F532757D3B800E9B00E /* Sources */, 516A9F542757D3B800E9B00E /* Frameworks */, 516A9F552757D3B800E9B00E /* Resources */, - 9A3663AC6EF2305F39A7BD0B /* [CP] Copy Pods Resources */, + E60407863366B6070048DC96 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -318,12 +341,12 @@ isa = PBXNativeTarget; buildConfigurationList = 516A9F6E2757D3B800E9B00E /* Build configuration list for PBXNativeTarget "AccessCheckoutReactNativeUnitTests" */; buildPhases = ( - 3198F8708951ABA605A2ACD1 /* [CP] Check Pods Manifest.lock */, + FE858CC61B34F6EB3932177A /* [CP] Check Pods Manifest.lock */, 516A9F5C2757D3B800E9B00E /* Sources */, 516A9F5D2757D3B800E9B00E /* Frameworks */, 516A9F5E2757D3B800E9B00E /* Resources */, - 345418B0DDDD9A8C510C0BDD /* [CP] Embed Pods Frameworks */, - 6E7AA427B4BE28C50D3FD882 /* [CP] Copy Pods Resources */, + 38F89E6325612FA607736717 /* [CP] Embed Pods Frameworks */, + B35099D8AD80C84F3BD51A03 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -420,6 +443,7 @@ 51D03E9C27A8611D009781EB /* CardValidationTest.storyboard in Resources */, 51D03E7227A85FC4009781EB /* Assets.xcassets in Resources */, 515BA39C282E6F9600BA262D /* CvcValidationTest.storyboard in Resources */, + 46D3A9652B34494B0056016D /* SessionGenerationTest.storyboard in Resources */, 51D03E7027A85FBA009781EB /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -427,29 +451,24 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 042F371D493E6DABFDEF3267 /* [CP] Check Pods Manifest.lock */ = { + 38F89E6325612FA607736717 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-AccessCheckoutReactNative-checkManifestLockResult.txt", + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 3198F8708951ABA605A2ACD1 /* [CP] Check Pods Manifest.lock */ = { + 56D9D7010C55496B513D0145 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -464,62 +483,67 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-AccessCheckoutReactNativeUnitTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-AccessCheckoutReactNative-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 345418B0DDDD9A8C510C0BDD /* [CP] Embed Pods Frameworks */ = { + B35099D8AD80C84F3BD51A03 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 6E7AA427B4BE28C50D3FD882 /* [CP] Copy Pods Resources */ = { + E60407863366B6070048DC96 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources-${CONFIGURATION}-input-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources-${CONFIGURATION}-input-files.xcfilelist", ); name = "[CP] Copy Pods Resources"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources-${CONFIGURATION}-output-files.xcfilelist", + "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources-${CONFIGURATION}-output-files.xcfilelist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNativeUnitTests/Pods-AccessCheckoutReactNativeUnitTests-resources.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 9A3663AC6EF2305F39A7BD0B /* [CP] Copy Pods Resources */ = { + FE858CC61B34F6EB3932177A /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Copy Pods Resources"; + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-AccessCheckoutReactNativeUnitTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AccessCheckoutReactNative/Pods-AccessCheckoutReactNative-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -533,8 +557,10 @@ 516A9FAA2757D6EB00E9B00E /* AccessCheckoutReactNative.m in Sources */, 516A9FAB2757D6EB00E9B00E /* GenerateSessionConfig.swift in Sources */, 5167BB3927A7FFB100F8569D /* ReactNativeViewLocator.swift in Sources */, + 46D51A0D2B2B6D72001A223C /* AccessCheckoutTextInputManager.swift in Sources */, 516A9FA92757D6EB00E9B00E /* CardValidationConfigRN.swift in Sources */, 516A9FB02757D6EB00E9B00E /* CardValidationDelegateRN.swift in Sources */, + 46D51A0B2B2B6D3D001A223C /* AccessCheckoutTextInputManager.m in Sources */, 516A9FB12757D6EB00E9B00E /* AccessCheckoutReactNative.swift in Sources */, 515BA3E4282E93A900BA262D /* CvcOnlyValidationDelegateRN.swift in Sources */, 515BA3A9282E829D00BA262D /* CvcOnlyValidationConfigRN.swift in Sources */, @@ -550,12 +576,14 @@ 515BA3CA282E903300BA262D /* CvcOnlyValidationDelegateRNUnitTests.swift in Sources */, 51C8CFBA27B6B7EE00F30FD5 /* GenerateSessionConfigUnitTests.swift in Sources */, 5167BB2727A459BF00F8569D /* StubServices.swift in Sources */, + 46D3A9682B3461030056016D /* AccessCheckoutReactNativeTestImplementation.swift in Sources */, 51C8D02C27BA5B5800F30FD5 /* AccessCheckoutRnIllegalArgumentErrorUnitTests.swift in Sources */, 515FFD6A282E994300A15AEB /* AccessCheckoutReactNativeUnitTests.swift in Sources */, 51D03EBC27A8658B009781EB /* CardValidationTestUIViewController.swift in Sources */, 515BA394282E6EA500BA262D /* CvcOnlyValidationTestUIViewController.swift in Sources */, 64ADC9392816E1510045BA58 /* AccessCheckoutReactNativeSessionAcceptanceTests.swift in Sources */, 51C8CFDF27B6E86000F30FD5 /* CardValidationDelegateRNUnitTests.swift in Sources */, + 46D3A9632B3447AE0056016D /* SessionGenerationTestUIViewController.swift in Sources */, 51C8CFCD27B6E71300F30FD5 /* RCTEventEmitterMock.swift in Sources */, 515BA38C282E6D6600BA262D /* AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift in Sources */, 51C8D03727BA807C00F30FD5 /* ReactNativeViewLocatorUnitTests.swift in Sources */, @@ -751,7 +779,7 @@ }; 516A9F6C2757D3B800E9B00E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB29C6D2B7D46CE62D034A19 /* Pods-AccessCheckoutReactNative.debug.xcconfig */; + baseConfigurationReference = 0CAB15C0F73790190291BAD5 /* Pods-AccessCheckoutReactNative.debug.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; @@ -779,7 +807,7 @@ }; 516A9F6D2757D3B800E9B00E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4CF9E9AFFAEFDCD0DF2D332F /* Pods-AccessCheckoutReactNative.release.xcconfig */; + baseConfigurationReference = E477C2239E194152C52F38B4 /* Pods-AccessCheckoutReactNative.release.xcconfig */; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; @@ -806,7 +834,7 @@ }; 516A9F6F2757D3B800E9B00E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F774BB62CD3FD4BE07B8E378 /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */; + baseConfigurationReference = B75286E22315FE2FFBAD12AB /* Pods-AccessCheckoutReactNativeUnitTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; CODE_SIGN_STYLE = Automatic; @@ -827,7 +855,7 @@ }; 516A9F702757D3B800E9B00E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 0A05132B3D087D149DBF457C /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */; + baseConfigurationReference = 0F4E0D504060610D97F4C1F2 /* Pods-AccessCheckoutReactNativeUnitTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = "$(inherited)"; CODE_SIGN_STYLE = Automatic; diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNative.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNative.swift index cc19bab..9375126 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNative.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNative.swift @@ -39,14 +39,20 @@ class AccessCheckoutReactNative: RCTEventEmitter { let cardDetails: CardDetails if isCvcSessionOnly(sessionTypes: cfg.sessionTypes) { + let cvcInput = reactNativeViewLocator.locateUITextField(id: cfg.cvcId) + cardDetails = try CardDetailsBuilder() - .cvc(cfg.cvcValue!) + .cvc(cvcInput!) .build() } else { + let panInput = reactNativeViewLocator.locateUITextField(id: cfg.panId!) + let expiryInput = reactNativeViewLocator.locateUITextField(id: cfg.expiryDateId!) + let cvcInput = reactNativeViewLocator.locateUITextField(id: cfg.cvcId) + cardDetails = try CardDetailsBuilder() - .pan(cfg.panValue!) - .expiryDate(cfg.expiryDateValue!) - .cvc(cfg.cvcValue!) + .pan(panInput!) + .expiryDate(expiryInput!) + .cvc(cvcInput!) .build() } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNativeModule-Bridging-Header.h b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNativeModule-Bridging-Header.h index f9419a3..dfcbc3b 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNativeModule-Bridging-Header.h +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutReactNativeModule-Bridging-Header.h @@ -1,6 +1,7 @@ #import #import #import +#import @interface AccessCheckoutReactNativeModule: NSObject @end diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.m b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.m new file mode 100644 index 0000000..b4f6325 --- /dev/null +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.m @@ -0,0 +1,15 @@ +#import +#import + +@interface RCT_EXTERN_MODULE(AccessCheckoutTextInputManager, RCTViewManager) + +//Externalises properties using a remap in case of name changes +//RCT_REMAP_VIEW_PROPERTY(RN property name, ios property name, type) + +RCT_REMAP_VIEW_PROPERTY(placeholder, placeholder, NSString) +RCT_REMAP_VIEW_PROPERTY(editable, isEnabled, BOOL) + +RCT_REMAP_VIEW_PROPERTY(color, textColor, UIColor) +RCT_REMAP_VIEW_PROPERTY(font, font, UIFont) + +@end diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.swift new file mode 100644 index 0000000..d3c047b --- /dev/null +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/AccessCheckoutTextInputManager.swift @@ -0,0 +1,23 @@ +import AccessCheckoutSDK +import Foundation + +import React + +@objc(AccessCheckoutTextInputManager) +class AccessCheckoutTextInputManager: RCTViewManager { + override func view() -> UIView! { + var field = AccessCheckoutUITextField() + + // In order to replicate React Native behaviours in both ios and android we need reset + // the default padding, borders and radius added by AccessCheckoutUITextField + field.borderWidth = 0 + field.cornerRadius = 0 + field.horizontalPadding = 0 + + return field + } + + override static func requiresMainQueueSetup() -> Bool { + return false + } +} diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/session/GenerateSessionConfig.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/session/GenerateSessionConfig.swift index 36bd690..37d6625 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/session/GenerateSessionConfig.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/session/GenerateSessionConfig.swift @@ -3,48 +3,36 @@ import AccessCheckoutSDK struct GenerateSessionConfig { let baseUrl: String let merchantId: String - var panValue: String? - var expiryDateValue: String? - let cvcValue: String? + var panId: String? + var expiryDateId: String? + let cvcId: String let sessionTypes: Set var reactNativeSdkVersion: String? init(dictionary: NSDictionary) throws { + // Required Arguments self.baseUrl = dictionary["baseUrl"] as? String ?? "" self.merchantId = dictionary["merchantId"] as? String ?? "" - self.cvcValue = dictionary["cvcValue"] as? String ?? "" + self.cvcId = dictionary["cvcId"] as? String ?? "" - if self.baseUrl == "" { + guard !self.baseUrl.isEmpty else { throw AccessCheckoutRnIllegalArgumentError.missingBaseUrl() } - - if self.merchantId == "" { + guard !self.merchantId.isEmpty else { throw AccessCheckoutRnIllegalArgumentError.missingMerchantId() } - if dictionary["panValue"] != nil { - if let string = dictionary["panValue"] as? String, string != "" { - self.panValue = string - } else { - throw AccessCheckoutRnIllegalArgumentError.missingPan() - } - } - - if dictionary["expiryDateValue"] != nil { - if let string = dictionary["expiryDateValue"] as? String, string != "" { - self.expiryDateValue = string - } else { - throw AccessCheckoutRnIllegalArgumentError.missingExpiryDate() - } + // Cvc is always required independently on the type of session generated + guard !self.cvcId.isEmpty else { + throw AccessCheckoutRnIllegalArgumentError.missingCvc() } let sessionTypes = dictionary["sessionTypes"] as? [AnyObject] ?? [] - if sessionTypes.count == 0 { + guard sessionTypes.count != 0 else { throw AccessCheckoutRnIllegalArgumentError.missingSessionTypes() } - - if sessionTypes.count > 2 { + guard sessionTypes.count <= 2 else { throw AccessCheckoutRnIllegalArgumentError.tooManySessionTypes( numberFound: sessionTypes.count) } @@ -64,20 +52,23 @@ struct GenerateSessionConfig { throw AccessCheckoutRnIllegalArgumentError.sessionTypeIsNotString() } } + self.sessionTypes = set // Pan and Expiry date are required when requesting a card session if self.sessionTypes.contains(SessionType.card) { - if self.panValue == nil || self.panValue == "" { + if let string = dictionary["panId"] as? String, !string.isEmpty { + self.panId = string + } else { throw AccessCheckoutRnIllegalArgumentError.missingPan() - } else if self.expiryDateValue == nil || self.expiryDateValue == "" { + } + + if let string = dictionary["expiryDateId"] as? String, !string.isEmpty { + self.expiryDateId = string + } else { throw AccessCheckoutRnIllegalArgumentError.missingExpiryDate() } } - // Cvc is always required independently on the type of session generated - if self.cvcValue == nil || self.cvcValue == "" { - throw AccessCheckoutRnIllegalArgumentError.missingCvc() - } if dictionary["reactNativeSdkVersion"] == nil { throw AccessCheckoutRnIllegalArgumentError.missingReactNativeSdkVersion() diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/validation/ReactNativeViewLocator.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/validation/ReactNativeViewLocator.swift index 780589c..86a14e4 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/validation/ReactNativeViewLocator.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative/validation/ReactNativeViewLocator.swift @@ -3,26 +3,26 @@ import Foundation import React class ReactNativeViewLocator { - func locateUITextField(id: String) -> UITextField? { + func locateUITextField(id: String) -> AccessCheckoutUITextField? { guard let controller: UIViewController = RCTPresentedViewController() else { return nil } - return self.searchForView(subViews: controller.view!.subviews, nativeId: id) + let view = self.searchForView(subViews: controller.view!.subviews, nativeId: id) + return view as? AccessCheckoutUITextField } - private func searchForView(subViews: [UIView], nativeId: String) -> UITextField? { + private func searchForView(subViews: [UIView], nativeId: String) -> UIView? { for subView in subViews { - if subView.nativeID == nil { - if let view = searchForView(subViews: subView.subviews, nativeId: nativeId) { + if subView.nativeID == nativeId { + return subView + } else { + let view = self.searchForView(subViews: subView.subviews, nativeId: nativeId) + if view != nil { return view } - } else if subView.nativeID! == nativeId { - let inputView = (subView as? RCTSinglelineTextInputView)?.backedTextInputView - return inputView as? UITextField } } - return nil } @@ -31,20 +31,6 @@ class ReactNativeViewLocator { return nil } - return self.searchForViewInSubViews(subViews: controller.view!.subviews, nativeId: id) - } - - private func searchForViewInSubViews(subViews: [UIView], nativeId: String) -> UIView? { - for subView in subViews { - if subView.nativeID == nil { - if let view = searchForViewInSubViews(subViews: subView.subviews, nativeId: nativeId) { - return view - } - } else if subView.nativeID! == nativeId { - return subView - } - } - - return nil + return self.searchForView(subViews: controller.view!.subviews, nativeId: id) } } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCardValidationAcceptanceTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCardValidationAcceptanceTests.swift index 094b315..9d8c0d9 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCardValidationAcceptanceTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCardValidationAcceptanceTests.swift @@ -1,10 +1,10 @@ +@testable import AccessCheckoutReactNative +@testable import AccessCheckoutReactNativeUnitTestsApp +@testable import AccessCheckoutSDK import Mockingjay import React import XCTest -@testable import AccessCheckoutReactNative -@testable import AccessCheckoutReactNativeUnitTestsApp - class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { private let stubServices = StubServices(baseUrl: "http://localhost") private let config: NSDictionary = [ @@ -17,9 +17,9 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { private let storyboard = UIStoryboard(name: "CardValidationTest", bundle: nil) private var reactNativeViewLocatorMock: ReactNativeViewLocatorMock? private var controller: CardValidationTestUIViewController? = nil - private var panUITextField: UITextField? = nil - private var expiryDateUITextField: UITextField? = nil - private var cvcUITextField: UITextField? = nil + private var panACUITextField: AccessCheckoutUITextField? = nil + private var expiryDateACUITextField: AccessCheckoutUITextField? = nil + private var cvcACUITextField: AccessCheckoutUITextField? = nil override func setUp() { controller = @@ -27,13 +27,13 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { withIdentifier: "CardValidationTestUIViewController") as! CardValidationTestUIViewController) controller!.loadViewIfNeeded() - panUITextField = controller!.panTextField - expiryDateUITextField = controller!.expiryDateTextField - cvcUITextField = controller!.cvcTextField + panACUITextField = controller!.panTextField + expiryDateACUITextField = controller!.expiryDateTextField + cvcACUITextField = controller!.cvcTextField reactNativeViewLocatorMock = ReactNativeViewLocatorMock( - panUITextField: panUITextField!, - expiryDateUITextField: expiryDateUITextField!, - cvcUITextField: cvcUITextField!) + panView: panACUITextField!, + expiryDateView: expiryDateACUITextField!, + cvcView: cvcACUITextField!) } func testShouldReturnAnErrorWhenConfigurationProvidedIsInvalid() { @@ -41,10 +41,10 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let invalidConfig: NSDictionary = [:] let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: invalidConfig) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: invalidConfig) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (errorCode, errorDescription, error) in + } reject: { _, _, error in let expectedError = AccessCheckoutRnIllegalArgumentError.missingBaseUrl() XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() @@ -57,14 +57,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let expectationToFulfill = expectation(description: "Error should be returned") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - reactNativeViewLocatorMock!.panUITextField = nil + reactNativeViewLocatorMock!.panView = nil let expectedError = AccessCheckoutRnIllegalArgumentError.panTextFieldNotFound( panNativeId: "pan") - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() } @@ -76,14 +76,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let expectationToFulfill = expectation(description: "Error should be returned") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - reactNativeViewLocatorMock!.expiryDateUITextField = nil + reactNativeViewLocatorMock!.expiryDateView = nil let expectedError = AccessCheckoutRnIllegalArgumentError.expiryDateTextFieldNotFound( expiryDateNativeId: "expiryDate") - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() } @@ -95,14 +95,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let expectationToFulfill = expectation(description: "Error should be returned") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - reactNativeViewLocatorMock!.cvcUITextField = nil + reactNativeViewLocatorMock!.cvcView = nil let expectedError = AccessCheckoutRnIllegalArgumentError.cvcTextFieldNotFound( cvcNativeId: "cvc") - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() } @@ -114,10 +114,10 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let expectationToFulfill = expectation(description: "run test successfully") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from initialisation \(String(describing: error))" ) @@ -132,10 +132,11 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertEqual(true, (success as! Bool)) - self.panUITextField!.insertText("4444333322221111") + let field = self.panACUITextField?.uiTextField + field!.insertText("4444333322221111") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 1) @@ -145,7 +146,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -160,12 +161,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.panUITextField!.insertText("4444333322221111") - self.panUITextField!.deleteBackward() - XCTAssertEqual(self.panUITextField!.text, "444433332222111") + let field = self.panACUITextField?.uiTextField + field!.insertText("4444333322221111") + field!.deleteBackward() + + XCTAssertEqual(field!.text, "444433332222111") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -175,7 +178,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertFalse(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -190,11 +193,11 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertEqual(true, (success as! Bool)) - self.cvcUITextField!.insertText("123") - + let field = self.cvcACUITextField?.uiTextField + field!.insertText("123") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 1) let event = accessCheckoutReactNative.eventsSent[0] @@ -203,7 +206,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation \(String(describing: error))" ) @@ -218,12 +221,13 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.cvcUITextField!.insertText("123") - self.cvcUITextField!.deleteBackward() - XCTAssertEqual(self.cvcUITextField!.text, "12") + let field = self.cvcACUITextField?.uiTextField + field!.insertText("123") + field!.deleteBackward() + XCTAssertEqual(field!.text, "12") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -233,7 +237,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertFalse(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -248,11 +252,11 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertEqual(true, (success as! Bool)) - self.expiryDateUITextField!.insertText("10/34") - + let field = self.expiryDateACUITextField?.uiTextField + field!.insertText("10/34") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 1) let event = accessCheckoutReactNative.eventsSent[0] @@ -261,7 +265,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -276,12 +280,13 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.expiryDateUITextField!.insertText("10/34") - self.expiryDateUITextField!.deleteBackward() - XCTAssertEqual(self.expiryDateUITextField!.text, "10/3") + let field = self.expiryDateACUITextField?.uiTextField + field!.insertText("10/34") + field!.deleteBackward() + XCTAssertEqual(field!.text, "10/3") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -291,7 +296,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertFalse(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -307,13 +312,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) // Waiting for configuration to have successfully loaded self.wait(0.5) - self.panUITextField!.insertText("4") + let field = self.panACUITextField?.uiTextField + field!.insertText("4") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 1) @@ -328,7 +334,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertEqual(event.body.brand?.images?[1].url, "http://localhost/visa.svg") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -344,14 +350,15 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) // Waiting for configuration to have successfully loaded self.wait(0.5) - self.panUITextField!.insertText("4") - self.panUITextField!.deleteBackward() + let field = self.panACUITextField?.uiTextField + field!.insertText("4") + field!.deleteBackward() XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -361,7 +368,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertNil(event.body.brand) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -376,12 +383,15 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.panUITextField!.insertText("4444333322221111") - self.expiryDateUITextField!.insertText("12/34") - self.cvcUITextField!.insertText("123") + let panField = self.panACUITextField?.uiTextField + panField!.insertText("4444333322221111") + let expiryField = self.expiryDateACUITextField?.uiTextField + expiryField!.insertText("12/34") + let cvcField = self.cvcACUITextField?.uiTextField + cvcField!.insertText("123") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 4) @@ -391,7 +401,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -415,13 +425,14 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { "acceptedCardBrands": ["mastercard"], ] - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) // Waiting for configuration to have successfully loaded self.wait(0.5) - self.panUITextField!.insertText("4444333322221111") + let panField = self.panACUITextField?.uiTextField + panField!.insertText("4444333322221111") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 1) @@ -430,7 +441,7 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { XCTAssertEqual(event.body.type, "brand") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -452,16 +463,17 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCardValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCardValidation(config: config) { success in XCTAssertTrue(success as! Bool) + let panField = self.panACUITextField?.uiTextField - self.panUITextField!.insertText("44443333") - self.triggerTextFieldDelegate(self.panUITextField!) + panField!.insertText("44443333") + self.triggerTextFieldDelegate(panField!) - XCTAssertEqual(self.panUITextField!.text!, "4444 3333") + XCTAssertEqual(panField!.text, "4444 3333") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -482,18 +494,4 @@ class AccessCheckoutReactNativeCardValidationAcceptanceTests: XCTestCase { let exp = XCTestCase().expectation(description: "Waiting for \(timeoutInSeconds)") _ = XCTWaiter.wait(for: [exp], timeout: timeoutInSeconds) } - - private class AccessCheckoutReactNativeTestImplementation: AccessCheckoutReactNative { - private(set) var eventsSent: [RCTEventMock] = [] - - override func sendEvent(withName name: String!, body: Any!) { - let eventMock = RCTEventMock(name, bodyDictionary: body as! NSDictionary) - eventsSent.append(eventMock) - } - - // This is required to get the "testShouldFormatPanWhenPanFormattingEnabled" test pass otherwise it fails with an error we have not been able to resolve - override func supportedEvents() -> [String]! { - return ["some-event-type"] - } - } } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift index b465e2b..c452e79 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests.swift @@ -1,9 +1,10 @@ -import Mockingjay -import React -import XCTest @testable import AccessCheckoutReactNative @testable import AccessCheckoutReactNativeUnitTestsApp +@testable import AccessCheckoutSDK +import Mockingjay +import React +import XCTest class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { private let stubServices = StubServices(baseUrl: "http://localhost") @@ -12,16 +13,16 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { private let storyboard = UIStoryboard(name: "CvcValidationTest", bundle: nil) private var reactNativeViewLocatorMock: ReactNativeViewLocatorMock? private var controller: CvcOnlyValidationTestUIViewController? = nil - private var cvcUITextField: UITextField? = nil - + private var cvcACUITextField: AccessCheckoutUITextField? = nil + override func setUp() { controller = (storyboard.instantiateViewController( withIdentifier: "CvcOnlyValidationTestUIViewController") as! CvcOnlyValidationTestUIViewController) controller!.loadViewIfNeeded() - cvcUITextField = controller!.cvcTextField - reactNativeViewLocatorMock = ReactNativeViewLocatorMock(cvcUITextField: cvcUITextField!) + cvcACUITextField = controller!.cvcTextField + reactNativeViewLocatorMock = ReactNativeViewLocatorMock(cvcView: cvcACUITextField!) } func testShouldReturnAnErrorWhenConfigurationProvidedIsInvalid() { @@ -29,11 +30,11 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { let invalidConfig: NSDictionary = [:] let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvcId() - - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: invalidConfig) { (success) in + + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: invalidConfig) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() } @@ -44,15 +45,15 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { func testShouldReturnAnErrorWhenCvcTextFieldNotFound() { let expectationToFulfill = expectation(description: "Error should be returned") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - - reactNativeViewLocatorMock!.cvcUITextField = nil + + reactNativeViewLocatorMock!.cvcView = nil let expectedError = AccessCheckoutRnIllegalArgumentError.cvcTextFieldNotFound( cvcNativeId: "cvc") - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { _ in XCTFail("validation initialisation should have faild but it didn't") expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTAssertEqual(error as! AccessCheckoutRnIllegalArgumentError, expectedError) expectationToFulfill.fulfill() } @@ -63,11 +64,11 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { func testShouldResolvePromiseWithTrueWhenSuccessfullyInitialised() { let expectationToFulfill = expectation(description: "run test successfully") let accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) - - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { (success) in + + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { success in XCTAssertTrue(success as! Bool) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from initialisation \(String(describing: error))" ) @@ -82,10 +83,11 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { success in XCTAssertEqual(true, (success as! Bool)) - self.cvcUITextField!.insertText("123") + let field = self.cvcACUITextField?.uiTextField + field!.insertText("123") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -95,7 +97,7 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (_, _, error) in + } reject: { _, _, error in XCTFail( "got an error back from validation: \(String(describing: error))" ) @@ -110,12 +112,13 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.cvcUITextField!.insertText("123") - self.cvcUITextField!.deleteBackward() - XCTAssertEqual(self.cvcUITextField!.text, "12") + let field = self.cvcACUITextField?.uiTextField + field!.insertText("123") + field!.deleteBackward() + XCTAssertEqual(field!.text, "12") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 3) @@ -125,7 +128,7 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { XCTAssertFalse(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (a, b, c) in + } reject: { a, b, c in XCTFail( "got an error back from validation \(String(describing: a)) \(String(describing: b)) \(String(describing: c))" ) @@ -140,10 +143,11 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { let accessCheckoutReactNative = AccessCheckoutReactNativeTestImplementation( reactNativeViewLocatorMock!) - accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { (success) in + accessCheckoutReactNative.initialiseCvcOnlyValidation(config: config) { success in XCTAssertTrue(success as! Bool) - self.cvcUITextField!.insertText("123") + let field = self.cvcACUITextField?.uiTextField + field!.insertText("123") XCTAssertEqual(accessCheckoutReactNative.eventsSent.count, 2) @@ -153,7 +157,7 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { XCTAssertTrue(event.body.isValid!) expectationToFulfill.fulfill() - } reject: { (a, b, c) in + } reject: { a, b, c in XCTFail( "got an error back from validation \(String(describing: a)) \(String(describing: b)) \(String(describing: c))" ) @@ -174,18 +178,4 @@ class AccessCheckoutReactNativeCvcOnlyValidationAcceptanceTests: XCTestCase { let exp = XCTestCase().expectation(description: "Waiting for \(timeoutInSeconds)") _ = XCTWaiter.wait(for: [exp], timeout: timeoutInSeconds) } - - private class AccessCheckoutReactNativeTestImplementation: AccessCheckoutReactNative { - private(set) var eventsSent: [RCTEventMock] = [] - - override func sendEvent(withName name: String!, body: Any!) { - let eventMock = RCTEventMock(name, bodyDictionary: body as! NSDictionary) - eventsSent.append(eventMock) - } - - // This is required to get the "testShouldRaiseEventWhenAllFieldsBecomeValid" test pass otherwise it fails with an error we have not been able to resolve - override func supportedEvents() -> [String]! { - return ["some-event-type"] - } - } } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeSessionAcceptanceTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeSessionAcceptanceTests.swift index de0a6ca..9495533 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeSessionAcceptanceTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutReactNativeSessionAcceptanceTests.swift @@ -5,8 +5,35 @@ import XCTest @testable import AccessCheckoutSDK class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { - let accessCheckoutReactNative = AccessCheckoutReactNative() - let stubServices = StubServices(baseUrl: "http://localhost") + private let stubServices = StubServices(baseUrl: "http://localhost") + + private let storyboard = UIStoryboard(name: "SessionGenerationTest", bundle: nil) + private var reactNativeViewLocatorMock: ReactNativeViewLocatorMock? + private var controller: SessionGenerationTestUIViewController? = nil + private var accessCheckoutReactNative: AccessCheckoutReactNative? = nil + + private var panACUITextField: AccessCheckoutUITextField? = nil + private var expiryDateACUITextField: AccessCheckoutUITextField? = nil + private var cvcACUITextField: AccessCheckoutUITextField? = nil + + override func setUp() { + controller = + (storyboard.instantiateViewController( + withIdentifier: "SessionGenerationTestUIViewController") + as! SessionGenerationTestUIViewController) + controller!.loadViewIfNeeded() + + panACUITextField = controller!.panTextField + expiryDateACUITextField = controller!.expiryDateTextField + cvcACUITextField = controller!.cvcTextField + + reactNativeViewLocatorMock = ReactNativeViewLocatorMock( + panView: panACUITextField!, + expiryDateView: expiryDateACUITextField!, + cvcView: cvcACUITextField!) + + accessCheckoutReactNative = AccessCheckoutReactNative(reactNativeViewLocatorMock!) + } func testShouldSupportGeneratingACardSession() { let stubServices = StubServices(baseUrl: "http://localhost") @@ -18,14 +45,18 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let dictionary: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "panValue": "4444333322221111", - "expiryDateValue": "12/30", - "cvcValue": "123", + "panId": "pan", + "expiryDateId": "expiryDate", + "cvcId": "cvc", "sessionTypes": ["card"], "reactNativeSdkVersion": "1.2.3" ] - accessCheckoutReactNative.generateSessions(config: dictionary) { sessions in + panACUITextField!.text = "4444333322221111" + expiryDateACUITextField!.text = "12/34" + cvcACUITextField!.text = "123" + + accessCheckoutReactNative!.generateSessions(config: dictionary) { sessions in let session = (sessions as! [String: String?])["card"] XCTAssertEqual("my-session", session) expectationToFulfill.fulfill() @@ -47,12 +78,12 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let dictionary: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "cvcValue": "123", + "cvcId": "cvc", "sessionTypes": ["cvc"], "reactNativeSdkVersion": "1.2.3" ] - accessCheckoutReactNative.generateSessions(config: dictionary) { sessions in + accessCheckoutReactNative!.generateSessions(config: dictionary) { sessions in let cvcSession = (sessions as! [String: String?])["cvc"] XCTAssertEqual("my-cvc-session", cvcSession) expectationToFulfill.fulfill() @@ -75,21 +106,25 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let dictionary: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "panValue": "4444333322221111", - "expiryDateValue": "12/30", - "cvcValue": "123", + "cvcId": "cvc", + "panId": "pan", + "expiryDateId": "expiryDate", "sessionTypes": ["card", "cvc"], "reactNativeSdkVersion": "1.2.3" ] - accessCheckoutReactNative.generateSessions(config: dictionary) { sessions in + panACUITextField!.text = "4444333322221111" + expiryDateACUITextField!.text = "12/34" + cvcACUITextField!.text = "123" + + accessCheckoutReactNative!.generateSessions(config: dictionary) { sessions in let session = (sessions as! [String: String?])["card"] let cvcSession = (sessions as! [String: String?])["cvc"] XCTAssertEqual("my-session", session) XCTAssertEqual("my-cvc-session", cvcSession) expectationToFulfill.fulfill() - } reject: { _, _, _ in - XCTFail("got an unexpected error back from stubs") + } reject: { _, message, _ in + XCTFail("got an unexpected error back from stubs: " + message!) expectationToFulfill.fulfill() } @@ -106,12 +141,12 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let dictionary: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "cvcValue": "123", + "cvcId": "cvc", "sessionTypes": ["cvc"], - "reactNativeSdkVersion": "1.2.3", + "reactNativeSdkVersion": "1.2.3" ] - accessCheckoutReactNative.generateSessions(config: dictionary) { _ in + accessCheckoutReactNative!.generateSessions(config: dictionary) { _ in XCTAssertEqual("access-checkout-react-native/1.2.3", WpSdkHeader.value) expectationToFulfill.fulfill() @@ -136,15 +171,19 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let dictionary: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "panValue": "4444333322221111", - "expiryDateValue": "12/30", - "cvcValue": "123", + "panId": "pan", + "expiryDateId": "expiryDate", + "cvcId": "cvc", "sessionTypes": ["card"], "reactNativeSdkVersion": "1.2.3" ] - accessCheckoutReactNative.generateSessions(config: dictionary) { _ in - XCTFail("generating sessions should have faild but it didn't") + panACUITextField!.text = "4444333322221111" + expiryDateACUITextField!.text = "12/34" + cvcACUITextField!.text = "123" + + accessCheckoutReactNative!.generateSessions(config: dictionary) { _ in + XCTFail("generating sessions should have failed but it didn't") expectationToFulfill.fulfill() } reject: { _, _, error in let expectedError = AccessCheckoutError.unexpectedApiError( @@ -160,8 +199,8 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let expectationToFulfill = expectation(description: "Error should be returned") let invalidConfig: NSDictionary = [:] - accessCheckoutReactNative.generateSessions(config: invalidConfig) { _ in - XCTFail("generating sessions should have faild but it didn't") + accessCheckoutReactNative!.generateSessions(config: invalidConfig) { _ in + XCTFail("generating sessions should have failed but it didn't") expectationToFulfill.fulfill() } reject: { _, _, error in let expectedError = AccessCheckoutRnIllegalArgumentError.missingBaseUrl() @@ -177,11 +216,11 @@ class AccessCheckoutReactNativeSessionAcceptanceTests: XCTestCase { let invalidConfig: NSDictionary = [ "baseUrl": stubServices.baseUrl, "merchantId": "identity", - "sessionTypes": ["cvc"], + "sessionTypes": ["cvc"] ] - accessCheckoutReactNative.generateSessions(config: invalidConfig) { _ in - XCTFail("generating sessions should have faild but it didn't") + accessCheckoutReactNative!.generateSessions(config: invalidConfig) { _ in + XCTFail("generating sessions should have failed but it didn't") expectationToFulfill.fulfill() } reject: { _, _, error in let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutRnIllegalArgumentErrorUnitTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutRnIllegalArgumentErrorUnitTests.swift index 85b376d..fd1e489 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutRnIllegalArgumentErrorUnitTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/AccessCheckoutRnIllegalArgumentErrorUnitTests.swift @@ -3,7 +3,6 @@ import XCTest @testable import AccessCheckoutReactNative class AccessCheckoutRnIllegalArgumentErrorUnitTests: XCTestCase { - func testLocalizedDescriptionShouldReturnMessage() { let error = AccessCheckoutRnIllegalArgumentError.missingBaseUrl() diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CardValidationTestUIViewController.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CardValidationTestUIViewController.swift index 4446157..1281b0b 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CardValidationTestUIViewController.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CardValidationTestUIViewController.swift @@ -1,7 +1,8 @@ +import AccessCheckoutSDK import UIKit class CardValidationTestUIViewController: UIViewController { - @IBOutlet weak var panTextField: UITextField! - @IBOutlet weak var expiryDateTextField: UITextField! - @IBOutlet weak var cvcTextField: UITextField! + @IBOutlet var panTextField: AccessCheckoutUITextField! + @IBOutlet var expiryDateTextField: AccessCheckoutUITextField! + @IBOutlet var cvcTextField: AccessCheckoutUITextField! } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CvcOnlyValidationTestUIViewController.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CvcOnlyValidationTestUIViewController.swift index 2a36c02..8618a92 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CvcOnlyValidationTestUIViewController.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/CvcOnlyValidationTestUIViewController.swift @@ -1,5 +1,6 @@ +import AccessCheckoutSDK import UIKit class CvcOnlyValidationTestUIViewController: UIViewController { - @IBOutlet weak var cvcTextField: UITextField! + @IBOutlet var cvcTextField: AccessCheckoutUITextField! } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/SessionGenerationTestUIViewController.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/SessionGenerationTestUIViewController.swift new file mode 100644 index 0000000..5fbc1fa --- /dev/null +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/SessionGenerationTestUIViewController.swift @@ -0,0 +1,8 @@ +import AccessCheckoutSDK +import UIKit + +class SessionGenerationTestUIViewController: UIViewController { + @IBOutlet var panTextField: AccessCheckoutUITextField! + @IBOutlet var expiryDateTextField: AccessCheckoutUITextField! + @IBOutlet var cvcTextField: AccessCheckoutUITextField! +} diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/session/GenerateSessionConfigUnitTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/session/GenerateSessionConfigUnitTests.swift index 7c4a6df..37ca748 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/session/GenerateSessionConfigUnitTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/session/GenerateSessionConfigUnitTests.swift @@ -74,11 +74,11 @@ class GenerateSessionUnitTests: XCTestCase { } } - // MARK: Testing errors related to Pan Value + // MARK: Testing errors related to Pan Id - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndPanValueIsAbsent() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndpanIdIsAbsent() { let dictionary = validCardConfiguration() - dictionary.removeObject(forKey: "panValue") + dictionary.removeObject(forKey: "panId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingPan() @@ -87,9 +87,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndPanValueIsAnEmptyString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndpanIdIsAnEmptyString() { let dictionary = validCardConfiguration() - dictionary.setValue("", forKey: "panValue") + dictionary.setValue("", forKey: "panId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingPan() @@ -98,9 +98,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndPanValueIsNotAString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndpanIdIsNotAString() { let dictionary = validCardConfiguration() - dictionary.setValue(1, forKey: "panValue") + dictionary.setValue(1, forKey: "panId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingPan() @@ -109,11 +109,11 @@ class GenerateSessionUnitTests: XCTestCase { } } - // MARK: Testing errors related to Expiry Value + // MARK: Testing errors related to Expiry Date Id - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndExpiryDateValueIsAbsent() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndexpiryDateIdIsAbsent() { let dictionary = validCardConfiguration() - dictionary.removeObject(forKey: "expiryDateValue") + dictionary.removeObject(forKey: "expiryDateId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingExpiryDate() @@ -122,9 +122,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndExpiryDateValueIsAnEmptyString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndexpiryDateIdIsAnEmptyString() { let dictionary = validCardConfiguration() - dictionary.setValue("", forKey: "expiryDateValue") + dictionary.setValue("", forKey: "expiryDateId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingExpiryDate() @@ -133,9 +133,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndExpiryDateValueIsNotAString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndexpiryDateIdIsNotAString() { let dictionary = validCardConfiguration() - dictionary.setValue(1, forKey: "expiryDateValue") + dictionary.setValue(1, forKey: "expiryDateId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingExpiryDate() @@ -144,11 +144,11 @@ class GenerateSessionUnitTests: XCTestCase { } } - // MARK: Testing errors related to Cvc Value + // MARK: Testing errors related to Cvc Id - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndCvcValueIsAbsent() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndcvcIdIsAbsent() { let dictionary = validCardConfiguration() - dictionary.removeObject(forKey: "cvcValue") + dictionary.removeObject(forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -157,9 +157,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndCvcValueIsAnEmptyString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndcvcIdIsAnEmptyString() { let dictionary = validCardConfiguration() - dictionary.setValue("", forKey: "cvcValue") + dictionary.setValue("", forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -168,9 +168,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesContainsCardAndCvcValueIsNotAString() { + func testThatErrorIsRaisedWhenSessionTypesContainsCardAndcvcIdIsNotAString() { let dictionary = validCardConfiguration() - dictionary.setValue(1, forKey: "cvcValue") + dictionary.setValue(1, forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -179,9 +179,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesIsOnlyCvcAndCvcValueIsAbsent() { + func testThatErrorIsRaisedWhenSessionTypesIsOnlyCvcAndcvcIdIsAbsent() { let dictionary = validCvcOnlyConfiguration() - dictionary.removeObject(forKey: "cvcValue") + dictionary.removeObject(forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -190,9 +190,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesIsOnlyCvcAndCvcValueIsAnEmptyString() { + func testThatErrorIsRaisedWhenSessionTypesIsOnlyCvcAndcvcIdIsAnEmptyString() { let dictionary = validCvcOnlyConfiguration() - dictionary.setValue("", forKey: "cvcValue") + dictionary.setValue("", forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -201,9 +201,9 @@ class GenerateSessionUnitTests: XCTestCase { } } - func testThatErrorIsRaisedWhenSessionTypesOnlyCvcAndCvcValueIsNotAString() { + func testThatErrorIsRaisedWhenSessionTypesOnlyCvcAndcvcIdIsNotAString() { let dictionary = validCvcOnlyConfiguration() - dictionary.setValue(1, forKey: "cvcValue") + dictionary.setValue(1, forKey: "cvcId") let expectedError = AccessCheckoutRnIllegalArgumentError.missingCvc() @@ -314,9 +314,9 @@ class GenerateSessionUnitTests: XCTestCase { XCTAssertEqual(config.baseUrl, "some-url") XCTAssertEqual(config.merchantId, "some-merchant-id") - XCTAssertEqual(config.panValue, "some-pan") - XCTAssertEqual(config.expiryDateValue, "some-expiry-date") - XCTAssertEqual(config.cvcValue, "some-cvc") + XCTAssertEqual(config.panId, "some-pan-id") + XCTAssertEqual(config.expiryDateId, "some-expiry-date-id") + XCTAssertEqual(config.cvcId, "some-cvc-id") XCTAssertEqual(config.sessionTypes, [SessionType.card]) XCTAssertEqual(config.reactNativeSdkVersion, "some-version") } @@ -328,7 +328,7 @@ class GenerateSessionUnitTests: XCTestCase { XCTAssertEqual(config.baseUrl, "some-url") XCTAssertEqual(config.merchantId, "some-merchant-id") - XCTAssertEqual(config.cvcValue, "some-cvc") + XCTAssertEqual(config.cvcId, "some-cvc-id") XCTAssertEqual(config.sessionTypes, [SessionType.cvc]) XCTAssertEqual(config.reactNativeSdkVersion, "some-version") } @@ -341,9 +341,9 @@ class GenerateSessionUnitTests: XCTestCase { XCTAssertEqual(config.baseUrl, "some-url") XCTAssertEqual(config.merchantId, "some-merchant-id") - XCTAssertEqual(config.panValue, "some-pan") - XCTAssertEqual(config.expiryDateValue, "some-expiry-date") - XCTAssertEqual(config.cvcValue, "some-cvc") + XCTAssertEqual(config.panId, "some-pan-id") + XCTAssertEqual(config.expiryDateId, "some-expiry-date-id") + XCTAssertEqual(config.cvcId, "some-cvc-id") XCTAssertEqual(config.sessionTypes, [SessionType.card, SessionType.cvc]) XCTAssertEqual(config.reactNativeSdkVersion, "some-version") } @@ -356,9 +356,9 @@ class GenerateSessionUnitTests: XCTestCase { XCTAssertEqual(config.baseUrl, "some-url") XCTAssertEqual(config.merchantId, "some-merchant-id") - XCTAssertEqual(config.panValue, "some-pan") - XCTAssertEqual(config.expiryDateValue, "some-expiry-date") - XCTAssertEqual(config.cvcValue, "some-cvc") + XCTAssertEqual(config.panId, "some-pan-id") + XCTAssertEqual(config.expiryDateId, "some-expiry-date-id") + XCTAssertEqual(config.cvcId, "some-cvc-id") XCTAssertEqual(config.sessionTypes, [SessionType.card, SessionType.cvc]) XCTAssertEqual(config.reactNativeSdkVersion, "some-version") } @@ -367,9 +367,9 @@ class GenerateSessionUnitTests: XCTestCase { let dictionary: NSMutableDictionary = [ "baseUrl": "some-url", "merchantId": "some-merchant-id", - "panValue": "some-pan", - "expiryDateValue": "some-expiry-date", - "cvcValue": "some-cvc", + "panId": "some-pan-id", + "expiryDateId": "some-expiry-date-id", + "cvcId": "some-cvc-id", "sessionTypes": ["card"], "reactNativeSdkVersion": "some-version" ] @@ -380,7 +380,7 @@ class GenerateSessionUnitTests: XCTestCase { let dictionary: NSMutableDictionary = [ "baseUrl": "some-url", "merchantId": "some-merchant-id", - "cvcValue": "some-cvc", + "cvcId": "some-cvc-id", "sessionTypes": ["cvc"], "reactNativeSdkVersion": "some-version" ] diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/utils/AccessCheckoutReactNativeTestImplementation.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/utils/AccessCheckoutReactNativeTestImplementation.swift new file mode 100644 index 0000000..eaa64e5 --- /dev/null +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/utils/AccessCheckoutReactNativeTestImplementation.swift @@ -0,0 +1,20 @@ +import AccessCheckoutSDK +import React +import XCTest + +@testable import AccessCheckoutReactNative +@testable import AccessCheckoutReactNativeUnitTestsApp + +public class AccessCheckoutReactNativeTestImplementation: AccessCheckoutReactNative { + private(set) var eventsSent: [RCTEventMock] = [] + + override public func sendEvent(withName name: String!, body: Any!) { + let eventMock = RCTEventMock(name, bodyDictionary: body as! NSDictionary) + eventsSent.append(eventMock) + } + + // This is required to get the "testShouldRaiseEventWhenAllFieldsBecomeValid" test pass otherwise it fails with an error we have not been able to resolve + override public func supportedEvents() -> [String]! { + return ["some-event-type"] + } +} diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/CvcOnlyValidationDelegateRNUnitTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/CvcOnlyValidationDelegateRNUnitTests.swift index ec18f18..1c78ac3 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/CvcOnlyValidationDelegateRNUnitTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/CvcOnlyValidationDelegateRNUnitTests.swift @@ -4,7 +4,7 @@ import XCTest class CvcOnlyValidationDelegateRNUnitTests: XCTestCase { private let eventEmitter = RCTEventEmitterMock() - + func testShouldEmitEventWhenCvcIsValid() { let delegate = CvcOnlyValidationDelegateRN( eventEmitter: eventEmitter, eventName: "event-name") diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/RCTEventMock.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/RCTEventMock.swift index 464735b..89fb011 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/RCTEventMock.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/RCTEventMock.swift @@ -29,10 +29,10 @@ struct RCTEventMock { var images: [Image]? init(_ dictionary: NSDictionary) { - name = dictionary["name"] as? String + self.name = dictionary["name"] as? String if let imagesDictionary = dictionary["images"] as? [NSDictionary] { - images = [] + self.images = [] for imageDictionary in imagesDictionary { images!.append(Image(imageDictionary)) } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorMock.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorMock.swift index 9e7eee2..7fc80b9 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorMock.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorMock.swift @@ -1,3 +1,4 @@ +import AccessCheckoutSDK import Foundation import React import UIKit @@ -5,33 +6,33 @@ import UIKit @testable import AccessCheckoutReactNative class ReactNativeViewLocatorMock: ReactNativeViewLocator { - var panUITextField: UITextField? - var expiryDateUITextField: UITextField? - var cvcUITextField: UITextField? + var panView: AccessCheckoutUITextField? + var expiryDateView: AccessCheckoutUITextField? + var cvcView: AccessCheckoutUITextField? init( - panUITextField: UITextField, expiryDateUITextField: UITextField, cvcUITextField: UITextField + panView: AccessCheckoutUITextField, + expiryDateView: AccessCheckoutUITextField, + cvcView: AccessCheckoutUITextField ) { - self.panUITextField = panUITextField - self.expiryDateUITextField = expiryDateUITextField - self.cvcUITextField = cvcUITextField + self.panView = panView + self.expiryDateView = expiryDateView + self.cvcView = cvcView } - init(cvcUITextField: UITextField) { - self.cvcUITextField = cvcUITextField - } - - override init() { - + init(cvcView: AccessCheckoutUITextField) { + self.cvcView = cvcView } - override internal func locateUITextField(id: String) -> UITextField? { + override init() {} + + override internal func locateUITextField(id: String) -> AccessCheckoutUITextField? { if id.contains("pan") { - return panUITextField + return self.panView } else if id.contains("expiryDate") { - return expiryDateUITextField + return self.expiryDateView } else if id.contains("cvc") { - return cvcUITextField + return self.cvcView } return nil diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorUnitTests.swift b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorUnitTests.swift index aea9b00..1056257 100644 --- a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorUnitTests.swift +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTests/validation/ReactNativeViewLocatorUnitTests.swift @@ -1,52 +1,48 @@ +@testable import AccessCheckoutReactNative +import AccessCheckoutSDK import React import XCTest -@testable import AccessCheckoutReactNative - class ReactNativeViewLocatorUnitTests: XCTestCase { private let viewLocator = ReactNativeViewLocator() private let controller = UIViewController() - + func testReturnsUITextFieldWhichIsAnImmediateChild() { - let uiTextFieldToBeFound = RCTUITextField() + let uiTextFieldToBeFound = createAccessCheckoutUITextField(nativeID: "some-id") let view = UIView() view.addSubview(UIView()) - view.addSubview(UITextFieldStub(uiTextFieldToBeFound, nativeID: "some-id")) + view.addSubview(uiTextFieldToBeFound) controller.view = view RCTUtilsUIOverride.setPresentedViewController(controller) - - let locatedView = viewLocator.locateUIView(view: RCTPresentedViewController(), id: "some-id") - - let result = locateUITextFieldFromView(uiView: locatedView) + + let result = viewLocator.locateUIView(view: RCTPresentedViewController(), id: "some-id") XCTAssertEqual(result, uiTextFieldToBeFound) } - + func testReturnsUITextFieldWhichIsAChildOfAChild() { - let uiTextFieldToBeFound = RCTUITextField() + let uiTextFieldToBeFound = createAccessCheckoutUITextField(nativeID: "some-id") let view = UIView() view.addSubview(UIView()) view.addSubview(UIView()) view.subviews[1].addSubview(UIView()) - view.subviews[1].addSubview(UITextFieldStub(uiTextFieldToBeFound, nativeID: "some-id")) + view.subviews[1].addSubview(uiTextFieldToBeFound) controller.view = view RCTUtilsUIOverride.setPresentedViewController(controller) - let locatedView = viewLocator.locateUIView(view: RCTPresentedViewController(), id: "some-id") - - let result = locateUITextFieldFromView(uiView: locatedView) + let result = viewLocator.locateUIView(view: RCTPresentedViewController(), id: "some-id") XCTAssertEqual(result, uiTextFieldToBeFound) } - + func testReturnsNilIfControllerIsNil() { let viewLocator = ReactNativeViewLocator() - + let result = viewLocator.locateUITextField(id: "some-id") XCTAssertNil(result) } - + func testReturnsNilIfControllerHasNoUIComponents() { let viewLocator = ReactNativeViewLocator() let controller = UIViewController() @@ -57,7 +53,7 @@ class ReactNativeViewLocatorUnitTests: XCTestCase { XCTAssertNil(result) } - + func testReturnsNilIfTextFieldWithNativeIDNotFound() { let view = UIView() view.addSubview(UIView()) @@ -71,35 +67,10 @@ class ReactNativeViewLocatorUnitTests: XCTestCase { XCTAssertNil(result) } - - private func locateUITextFieldFromView(uiView: UIView?) -> UITextField? { - return (uiView as? RCTSinglelineTextInputView)?.backedTextInputView as? UITextField - } - - private class UITextFieldStub: RCTSinglelineTextInputView { - private let uiTextField: UIView & RCTBackedTextInputViewProtocol - - override var backedTextInputView: UIView & RCTBackedTextInputViewProtocol { - get { - return uiTextField - } - } - - init(_ uiTextField: RCTUITextField, nativeID:String) { - self.uiTextField = uiTextField - - let rctBridge = RCTBridge( - delegate: RCTBridgeDelegateStub(), - launchOptions: [NSHashTable(): ""] - ) - super.init(bridge: rctBridge!) - super.nativeID = nativeID - } - - private class RCTBridgeDelegateStub: NSObject, RCTBridgeDelegate { - func sourceURL(for bridge: RCTBridge!) -> URL! { - return URL(string: "") - } - } + + private func createAccessCheckoutUITextField(nativeID: String) -> UIView { + let textField = AccessCheckoutUITextField() + textField.nativeID = nativeID + return textField } } diff --git a/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTestsApp/SessionGenerationTest.storyboard b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTestsApp/SessionGenerationTest.storyboard new file mode 100644 index 0000000..6e733de --- /dev/null +++ b/access-checkout-react-native-sdk/ios/AccessCheckoutReactNativeUnitTestsApp/SessionGenerationTest.storyboard @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/access-checkout-react-native-sdk/ios/bitrise.yml b/access-checkout-react-native-sdk/ios/bitrise.yml index a1e5208..9beb0c2 100644 --- a/access-checkout-react-native-sdk/ios/bitrise.yml +++ b/access-checkout-react-native-sdk/ios/bitrise.yml @@ -14,10 +14,11 @@ workflows: - cocoapods-install@2: inputs: - source_root_path: "$BITRISE_SOURCE_DIR/access-checkout-react-native-sdk/ios" + - command: update - recreate-user-schemes@1: inputs: - project_path: "$BITRISE_SOURCE_DIR/access-checkout-react-native-sdk/ios/AccessCheckoutReactNative.xcodeproj" - - xcode-test@4: + - xcode-test@5: inputs: - scheme: AccessCheckoutReactNative - destination: "platform=iOS Simulator,name=iPhone 12 Pro,OS=latest" diff --git a/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js b/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js index e619a00..fc6a375 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js +++ b/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js @@ -6,16 +6,8 @@ Object.defineProperty(exports, "__esModule", { exports.default = void 0; var _AccessCheckoutReactNative = require("./AccessCheckoutReactNative"); function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } class AccessCheckout { constructor({ baseUrl, @@ -27,18 +19,18 @@ class AccessCheckout { this.baseUrl = baseUrl; this.merchantId = merchantId; } - generateSessions(cardDetails, sessionTypes) { + generateSessions(sessionGenerationConfig, sessionTypes) { return new Promise((resolve, reject) => { _AccessCheckoutReactNative.AccessCheckoutReactNative.generateSessions({ baseUrl: this.baseUrl, merchantId: this.merchantId, - panValue: cardDetails.pan, - expiryDateValue: cardDetails.expiryDate, - cvcValue: cardDetails.cvc, + panId: sessionGenerationConfig.panId, + expiryDateId: sessionGenerationConfig.expiryDateId, + cvcId: sessionGenerationConfig.cvcId, sessionTypes, reactNativeSdkVersion: this.ReactNativeSdkVersion }) - // eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier + // eslint-disable-next-line @typescript-eslint/no-explicit-any .then(bridgeSessions => { const sessions = {}; if (bridgeSessions.card) { diff --git a/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js.map b/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js.map index 3ebb424..e4f2d27 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js.map +++ b/access-checkout-react-native-sdk/lib/commonjs/AccessCheckout.js.map @@ -1 +1 @@ -{"version":3,"names":["_AccessCheckoutReactNative","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","AccessCheckout","constructor","baseUrl","merchantId","generateSessions","cardDetails","sessionTypes","Promise","resolve","reject","AccessCheckoutReactNative","panValue","pan","expiryDateValue","expiryDate","cvcValue","cvc","reactNativeSdkVersion","ReactNativeSdkVersion","then","bridgeSessions","sessions","card","catch","error","initialiseCardValidation","validationConfig","panId","expiryDateId","cvcId","enablePanFormatting","acceptedCardBrands","initialiseCvcOnlyValidation","exports","default"],"sources":["AccessCheckout.tsx"],"sourcesContent":["import { AccessCheckoutReactNative } from './AccessCheckoutReactNative';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardDetails from './session/CardDetails';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Sessions from './session/Sessions';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardValidationConfig from './validation/CardValidationConfig';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CvcOnlyValidationConfig from './validation/CvcOnlyValidationConfig';\n\nexport default class AccessCheckout {\n private readonly ReactNativeSdkVersion = '2.0.1';\n static readonly CardValidationEventType = 'AccessCheckoutCardValidationEvent';\n static readonly CvcOnlyValidationEventType =\n 'AccessCheckoutCvcOnlyValidationEvent';\n\n baseUrl: string;\n merchantId?: string;\n\n constructor({\n baseUrl,\n merchantId,\n }: {\n baseUrl: string;\n merchantId?: string;\n }) {\n this.baseUrl = baseUrl;\n this.merchantId = merchantId;\n }\n\n generateSessions(\n cardDetails: CardDetails,\n sessionTypes: string[]\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.generateSessions({\n baseUrl: this.baseUrl,\n merchantId: this.merchantId,\n panValue: cardDetails.pan,\n expiryDateValue: cardDetails.expiryDate,\n cvcValue: cardDetails.cvc,\n sessionTypes,\n reactNativeSdkVersion: this.ReactNativeSdkVersion,\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier\n .then((bridgeSessions: any) => {\n const sessions: Sessions = {};\n if (bridgeSessions.card) {\n sessions.card = bridgeSessions.card;\n }\n if (bridgeSessions.cvc) {\n sessions.cvc = bridgeSessions.cvc;\n }\n\n resolve(sessions);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCardValidation(\n validationConfig: CardValidationConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCardValidation({\n baseUrl: this.baseUrl,\n panId: validationConfig.panId,\n expiryDateId: validationConfig.expiryDateId,\n cvcId: validationConfig.cvcId,\n enablePanFormatting: validationConfig.enablePanFormatting,\n acceptedCardBrands: validationConfig.acceptedCardBrands,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCvcOnlyValidation(\n validationConfig: CvcOnlyValidationConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCvcOnlyValidation({\n cvcId: validationConfig.cvcId,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,0BAAA,GAAAC,OAAA;AAAwE,SAAAC,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,GAAA,QAAAR,GAAA,GAAAS,YAAA,CAAAD,GAAA,2BAAAR,GAAA,gBAAAA,GAAA,GAAAU,MAAA,CAAAV,GAAA;AAAA,SAAAS,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAK,IAAA,CAAAP,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAE,SAAA,4DAAAP,IAAA,gBAAAF,MAAA,GAAAU,MAAA,EAAAT,KAAA;AACxE;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAGe,MAAMU,cAAc,CAAC;EASlCC,WAAWA,CAAC;IACVC,OAAO;IACPC;EAIF,CAAC,EAAE;IAAA1B,eAAA,gCAdsC,OAAO;IAAAA,eAAA;IAAAA,eAAA;IAe9C,IAAI,CAACyB,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAC,gBAAgBA,CACdC,WAAwB,EACxBC,YAAsB,EACH;IACnB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACN,gBAAgB,CAAC;QACzCF,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBC,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3BQ,QAAQ,EAAEN,WAAW,CAACO,GAAG;QACzBC,eAAe,EAAER,WAAW,CAACS,UAAU;QACvCC,QAAQ,EAAEV,WAAW,CAACW,GAAG;QACzBV,YAAY;QACZW,qBAAqB,EAAE,IAAI,CAACC;MAC9B,CAAC;MACC;MAAA,CACCC,IAAI,CAAEC,cAAmB,IAAK;QAC7B,MAAMC,QAAkB,GAAG,CAAC,CAAC;QAC7B,IAAID,cAAc,CAACE,IAAI,EAAE;UACvBD,QAAQ,CAACC,IAAI,GAAGF,cAAc,CAACE,IAAI;QACrC;QACA,IAAIF,cAAc,CAACJ,GAAG,EAAE;UACtBK,QAAQ,CAACL,GAAG,GAAGI,cAAc,CAACJ,GAAG;QACnC;QAEAR,OAAO,CAACa,QAAQ,CAAC;MACnB,CAAC;MACD;MAAA,CACCE,KAAK,CAAEC,KAAU,IAAK;QACrBf,MAAM,CAACe,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAC,wBAAwBA,CACtBC,gBAAsC,EACpB;IAClB,OAAO,IAAInB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACe,wBAAwB,CAAC;QACjDvB,OAAO,EAAE,IAAI,CAACA,OAAO;QACrByB,KAAK,EAAED,gBAAgB,CAACC,KAAK;QAC7BC,YAAY,EAAEF,gBAAgB,CAACE,YAAY;QAC3CC,KAAK,EAAEH,gBAAgB,CAACG,KAAK;QAC7BC,mBAAmB,EAAEJ,gBAAgB,CAACI,mBAAmB;QACzDC,kBAAkB,EAAEL,gBAAgB,CAACK;MACvC,CAAC,CAAC,CACCZ,IAAI,CAAC,MAAM;QACVX,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCe,KAAK,CAAEC,KAAU,IAAK;QACrBf,MAAM,CAACe,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAQ,2BAA2BA,CACzBN,gBAAyC,EACvB;IAClB,OAAO,IAAInB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACsB,2BAA2B,CAAC;QACpDH,KAAK,EAAEH,gBAAgB,CAACG;MAC1B,CAAC,CAAC,CACCV,IAAI,CAAC,MAAM;QACVX,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCe,KAAK,CAAEC,KAAU,IAAK;QACrBf,MAAM,CAACe,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;AACF;AAACS,OAAA,CAAAC,OAAA,GAAAlC,cAAA;AAAAvB,eAAA,CA3FoBuB,cAAc,6BAES,mCAAmC;AAAAvB,eAAA,CAF1DuB,cAAc,gCAI/B,sCAAsC"} \ No newline at end of file +{"version":3,"names":["_AccessCheckoutReactNative","require","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","t","i","_toPrimitive","String","r","e","Symbol","toPrimitive","call","TypeError","Number","AccessCheckout","constructor","baseUrl","merchantId","generateSessions","sessionGenerationConfig","sessionTypes","Promise","resolve","reject","AccessCheckoutReactNative","panId","expiryDateId","cvcId","reactNativeSdkVersion","ReactNativeSdkVersion","then","bridgeSessions","sessions","card","cvc","catch","error","initialiseCardValidation","validationConfig","enablePanFormatting","acceptedCardBrands","initialiseCvcOnlyValidation","exports","default"],"sources":["AccessCheckout.tsx"],"sourcesContent":["import { AccessCheckoutReactNative } from './AccessCheckoutReactNative';\nimport type SessionGenerationConfig from './session/SessionGenerationConfig';\nimport type Sessions from './session/Sessions';\n\ninterface InitialiseCardValidationConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n}\ninterface InitialiseCvcOnlyValidationConfig {\n cvcId: string;\n}\nexport default class AccessCheckout {\n private readonly ReactNativeSdkVersion = '2.0.1';\n static readonly CardValidationEventType = 'AccessCheckoutCardValidationEvent';\n static readonly CvcOnlyValidationEventType = 'AccessCheckoutCvcOnlyValidationEvent';\n\n baseUrl: string;\n merchantId?: string;\n\n constructor({ baseUrl, merchantId }: { baseUrl: string; merchantId?: string }) {\n this.baseUrl = baseUrl;\n this.merchantId = merchantId;\n }\n\n generateSessions(sessionGenerationConfig: SessionGenerationConfig, sessionTypes: string[]): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.generateSessions({\n baseUrl: this.baseUrl,\n merchantId: this.merchantId,\n panId: sessionGenerationConfig.panId,\n expiryDateId: sessionGenerationConfig.expiryDateId,\n cvcId: sessionGenerationConfig.cvcId,\n sessionTypes,\n reactNativeSdkVersion: this.ReactNativeSdkVersion,\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .then((bridgeSessions: any) => {\n const sessions: Sessions = {};\n if (bridgeSessions.card) {\n sessions.card = bridgeSessions.card;\n }\n if (bridgeSessions.cvc) {\n sessions.cvc = bridgeSessions.cvc;\n }\n\n resolve(sessions);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCardValidation(validationConfig: InitialiseCardValidationConfig): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCardValidation({\n baseUrl: this.baseUrl,\n panId: validationConfig.panId,\n expiryDateId: validationConfig.expiryDateId,\n cvcId: validationConfig.cvcId,\n enablePanFormatting: validationConfig.enablePanFormatting,\n acceptedCardBrands: validationConfig.acceptedCardBrands,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCvcOnlyValidation(validationConfig: InitialiseCvcOnlyValidationConfig): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCvcOnlyValidation({\n cvcId: validationConfig.cvcId,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,0BAAA,GAAAC,OAAA;AAAwE,SAAAC,gBAAAC,GAAA,EAAAC,GAAA,EAAAC,KAAA,IAAAD,GAAA,GAAAE,cAAA,CAAAF,GAAA,OAAAA,GAAA,IAAAD,GAAA,IAAAI,MAAA,CAAAC,cAAA,CAAAL,GAAA,EAAAC,GAAA,IAAAC,KAAA,EAAAA,KAAA,EAAAI,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAR,GAAA,CAAAC,GAAA,IAAAC,KAAA,WAAAF,GAAA;AAAA,SAAAG,eAAAM,CAAA,QAAAC,CAAA,GAAAC,YAAA,CAAAF,CAAA,uCAAAC,CAAA,GAAAA,CAAA,GAAAE,MAAA,CAAAF,CAAA;AAAA,SAAAC,aAAAF,CAAA,EAAAI,CAAA,2BAAAJ,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAK,CAAA,GAAAL,CAAA,CAAAM,MAAA,CAAAC,WAAA,kBAAAF,CAAA,QAAAJ,CAAA,GAAAI,CAAA,CAAAG,IAAA,CAAAR,CAAA,EAAAI,CAAA,uCAAAH,CAAA,SAAAA,CAAA,YAAAQ,SAAA,yEAAAL,CAAA,GAAAD,MAAA,GAAAO,MAAA,EAAAV,CAAA;AAczD,MAAMW,cAAc,CAAC;EAQlCC,WAAWA,CAAC;IAAEC,OAAO;IAAEC;EAAqD,CAAC,EAAE;IAAAxB,eAAA,gCAPtC,OAAO;IAAAA,eAAA;IAAAA,eAAA;IAQ9C,IAAI,CAACuB,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAC,gBAAgBA,CAACC,uBAAgD,EAAEC,YAAsB,EAAqB;IAC5G,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACN,gBAAgB,CAAC;QACzCF,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBC,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3BQ,KAAK,EAAEN,uBAAuB,CAACM,KAAK;QACpCC,YAAY,EAAEP,uBAAuB,CAACO,YAAY;QAClDC,KAAK,EAAER,uBAAuB,CAACQ,KAAK;QACpCP,YAAY;QACZQ,qBAAqB,EAAE,IAAI,CAACC;MAC9B,CAAC;MACC;MAAA,CACCC,IAAI,CAAEC,cAAmB,IAAK;QAC7B,MAAMC,QAAkB,GAAG,CAAC,CAAC;QAC7B,IAAID,cAAc,CAACE,IAAI,EAAE;UACvBD,QAAQ,CAACC,IAAI,GAAGF,cAAc,CAACE,IAAI;QACrC;QACA,IAAIF,cAAc,CAACG,GAAG,EAAE;UACtBF,QAAQ,CAACE,GAAG,GAAGH,cAAc,CAACG,GAAG;QACnC;QAEAZ,OAAO,CAACU,QAAQ,CAAC;MACnB,CAAC;MACD;MAAA,CACCG,KAAK,CAAEC,KAAU,IAAK;QACrBb,MAAM,CAACa,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAC,wBAAwBA,CAACC,gBAAgD,EAAoB;IAC3F,OAAO,IAAIjB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACa,wBAAwB,CAAC;QACjDrB,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBS,KAAK,EAAEa,gBAAgB,CAACb,KAAK;QAC7BC,YAAY,EAAEY,gBAAgB,CAACZ,YAAY;QAC3CC,KAAK,EAAEW,gBAAgB,CAACX,KAAK;QAC7BY,mBAAmB,EAAED,gBAAgB,CAACC,mBAAmB;QACzDC,kBAAkB,EAAEF,gBAAgB,CAACE;MACvC,CAAC,CAAC,CACCV,IAAI,CAAC,MAAM;QACVR,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCa,KAAK,CAAEC,KAAU,IAAK;QACrBb,MAAM,CAACa,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAK,2BAA2BA,CAACH,gBAAmD,EAAoB;IACjG,OAAO,IAAIjB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCC,oDAAyB,CAACiB,2BAA2B,CAAC;QACpDd,KAAK,EAAEW,gBAAgB,CAACX;MAC1B,CAAC,CAAC,CACCG,IAAI,CAAC,MAAM;QACVR,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCa,KAAK,CAAEC,KAAU,IAAK;QACrBb,MAAM,CAACa,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;AACF;AAACM,OAAA,CAAAC,OAAA,GAAA7B,cAAA;AAAArB,eAAA,CA7EoBqB,cAAc,6BAES,mCAAmC;AAAArB,eAAA,CAF1DqB,cAAc,gCAGY,sCAAsC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js new file mode 100644 index 0000000..838758b --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js @@ -0,0 +1,28 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +class MerchantCardConfig { + constructor({ + panId, + expiryDateId, + cvcId, + validationConfig + }) { + _defineProperty(this, "panId", void 0); + _defineProperty(this, "expiryDateId", void 0); + _defineProperty(this, "cvcId", void 0); + _defineProperty(this, "validationConfig", void 0); + this.panId = panId; + this.expiryDateId = expiryDateId; + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} +exports.default = MerchantCardConfig; +//# sourceMappingURL=MerchantCardConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js.map new file mode 100644 index 0000000..63716f0 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCardConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCardConfig","constructor","panId","expiryDateId","cvcId","validationConfig","_defineProperty","exports","default"],"sources":["MerchantCardConfig.ts"],"sourcesContent":["import type { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig';\n\nexport default class MerchantCardConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n validationConfig?: MerchantCardValidationConfig;\n\n constructor({ panId, expiryDateId, cvcId, validationConfig }: MerchantCardConfig) {\n this.panId = panId;\n this.expiryDateId = expiryDateId;\n this.cvcId = cvcId;\n this.validationConfig = validationConfig;\n }\n}\n"],"mappings":";;;;;;;;;AAEe,MAAMA,kBAAkB,CAAC;EAMtCC,WAAWA,CAAC;IAAEC,KAAK;IAAEC,YAAY;IAAEC,KAAK;IAAEC;EAAqC,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAChF,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;EAC1C;AACF;AAACE,OAAA,CAAAC,OAAA,GAAAR,kBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js new file mode 100644 index 0000000..6abf7fd --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js @@ -0,0 +1,22 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +class MerchantCvcOnlyConfig { + constructor({ + cvcId, + validationConfig + }) { + _defineProperty(this, "cvcId", void 0); + _defineProperty(this, "validationConfig", void 0); + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} +exports.default = MerchantCvcOnlyConfig; +//# sourceMappingURL=MerchantCvcOnlyConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js.map new file mode 100644 index 0000000..f5ade44 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/config/MerchantCvcOnlyConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCvcOnlyConfig","constructor","cvcId","validationConfig","_defineProperty","exports","default"],"sources":["MerchantCvcOnlyConfig.ts"],"sourcesContent":["import type { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig';\n\nexport default class MerchantCvcOnlyConfig {\n cvcId: string;\n validationConfig?: MerchantCvcOnlyValidationConfig;\n\n constructor({ cvcId, validationConfig }: MerchantCvcOnlyConfig) {\n this.cvcId = cvcId;\n this.validationConfig = validationConfig;\n }\n}\n"],"mappings":";;;;;;;;;AAEe,MAAMA,qBAAqB,CAAC;EAIzCC,WAAWA,CAAC;IAAEC,KAAK;IAAEC;EAAwC,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAC9D,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;EAC1C;AACF;AAACE,OAAA,CAAAC,OAAA,GAAAN,qBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js b/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js new file mode 100644 index 0000000..c87af17 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useAccessCheckout = void 0; +var _index = require("../index"); +var _useCardValidation = require("./useCardValidation"); +var _useCvcOnlyValidation = require("./useCvcOnlyValidation"); +const useAccessCheckout = ({ + baseUrl, + checkoutId, + config +}) => { + const accessCheckout = new _index.AccessCheckout({ + baseUrl: baseUrl, + merchantId: checkoutId + }); + + /** + * Implementation note: Decided to use classes to benefit from instance checking. + * If using interfaces or types a "type guard" could have been used. the trade off being having to check for + * a specific property that would be unique to that interface/type which in theory it introduces another point of + * failure if the property was to be renamed and not updated in the type guard. + */ + if (config instanceof _index.CardConfig) { + var _config$validationCon, _config$validationCon2, _config$validationCon3; + const { + initialiseCardValidation + } = (0, _useCardValidation.useCardValidation)({ + accessCheckout, + cardValidationConfig: { + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId, + enablePanFormatting: (_config$validationCon = config.validationConfig) === null || _config$validationCon === void 0 ? void 0 : _config$validationCon.enablePanFormatting, + acceptedCardBrands: (_config$validationCon2 = config.validationConfig) === null || _config$validationCon2 === void 0 ? void 0 : _config$validationCon2.acceptedCardBrands + }, + validationListener: (_config$validationCon3 = config.validationConfig) === null || _config$validationCon3 === void 0 ? void 0 : _config$validationCon3.validationListener + }); + const generateSessions = sessionTypes => accessCheckout.generateSessions({ + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId + }, sessionTypes); + return { + initialiseValidation: initialiseCardValidation, + generateSessions + }; + } else { + var _config$validationCon4; + const { + initialiseCvcOnlyValidation + } = (0, _useCvcOnlyValidation.useCvcOnlyValidation)({ + accessCheckout, + cvcOnlyValidationConfig: { + cvcId: config.cvcId + }, + validationListener: (_config$validationCon4 = config.validationConfig) === null || _config$validationCon4 === void 0 ? void 0 : _config$validationCon4.validationListener + }); + const generateCvcOnlySession = sessionTypes => accessCheckout.generateSessions({ + cvcId: config.cvcId + }, sessionTypes); + return { + initialiseValidation: initialiseCvcOnlyValidation, + generateSessions: generateCvcOnlySession + }; + } +}; +exports.useAccessCheckout = useAccessCheckout; +//# sourceMappingURL=useAccessCheckout.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js.map b/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js.map new file mode 100644 index 0000000..29e76d6 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useAccessCheckout.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_index","require","_useCardValidation","_useCvcOnlyValidation","useAccessCheckout","baseUrl","checkoutId","config","accessCheckout","AccessCheckout","merchantId","CardConfig","_config$validationCon","_config$validationCon2","_config$validationCon3","initialiseCardValidation","useCardValidation","cardValidationConfig","panId","expiryDateId","cvcId","enablePanFormatting","validationConfig","acceptedCardBrands","validationListener","generateSessions","sessionTypes","initialiseValidation","_config$validationCon4","initialiseCvcOnlyValidation","useCvcOnlyValidation","cvcOnlyValidationConfig","generateCvcOnlySession","exports"],"sources":["useAccessCheckout.ts"],"sourcesContent":["import {\n AccessCheckout,\n CardConfig,\n type CardValidationEventListener,\n CvcOnlyConfig,\n CvcOnlyValidationEventListener,\n Sessions,\n} from '../index';\nimport { useCardValidation } from './useCardValidation';\nimport { useCvcOnlyValidation } from './useCvcOnlyValidation';\n\nexport interface UseAccessCheckoutExports {\n initialiseValidation: () => Promise;\n generateSessions: (sessionTypes: string[]) => Promise;\n}\n\nexport interface UseAccessCheckout {\n baseUrl: string;\n checkoutId: string;\n config: CardConfig | CvcOnlyConfig;\n}\n\nexport const useAccessCheckout = ({ baseUrl, checkoutId, config }: UseAccessCheckout): UseAccessCheckoutExports => {\n const accessCheckout = new AccessCheckout({\n baseUrl: baseUrl,\n merchantId: checkoutId,\n });\n\n /**\n * Implementation note: Decided to use classes to benefit from instance checking.\n * If using interfaces or types a \"type guard\" could have been used. the trade off being having to check for\n * a specific property that would be unique to that interface/type which in theory it introduces another point of\n * failure if the property was to be renamed and not updated in the type guard.\n */\n if (config instanceof CardConfig) {\n const { initialiseCardValidation } = useCardValidation({\n accessCheckout,\n cardValidationConfig: {\n panId: config.panId,\n expiryDateId: config.expiryDateId,\n cvcId: config.cvcId,\n enablePanFormatting: config.validationConfig?.enablePanFormatting,\n acceptedCardBrands: config.validationConfig?.acceptedCardBrands,\n },\n validationListener: config.validationConfig?.validationListener as CardValidationEventListener,\n });\n\n const generateSessions = (sessionTypes: string[]) =>\n accessCheckout.generateSessions(\n {\n panId: config.panId,\n expiryDateId: config.expiryDateId,\n cvcId: config.cvcId,\n },\n sessionTypes\n );\n\n return {\n initialiseValidation: initialiseCardValidation,\n generateSessions,\n };\n } else {\n const { initialiseCvcOnlyValidation } = useCvcOnlyValidation({\n accessCheckout,\n cvcOnlyValidationConfig: { cvcId: config.cvcId },\n validationListener: config.validationConfig?.validationListener as CvcOnlyValidationEventListener,\n });\n\n const generateCvcOnlySession = (sessionTypes: string[]) =>\n accessCheckout.generateSessions(\n {\n cvcId: config.cvcId,\n },\n sessionTypes\n );\n\n return {\n initialiseValidation: initialiseCvcOnlyValidation,\n generateSessions: generateCvcOnlySession,\n };\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAQA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,qBAAA,GAAAF,OAAA;AAaO,MAAMG,iBAAiB,GAAGA,CAAC;EAAEC,OAAO;EAAEC,UAAU;EAAEC;AAA0B,CAAC,KAA+B;EACjH,MAAMC,cAAc,GAAG,IAAIC,qBAAc,CAAC;IACxCJ,OAAO,EAAEA,OAAO;IAChBK,UAAU,EAAEJ;EACd,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,MAAM,YAAYI,iBAAU,EAAE;IAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAChC,MAAM;MAAEC;IAAyB,CAAC,GAAG,IAAAC,oCAAiB,EAAC;MACrDR,cAAc;MACdS,oBAAoB,EAAE;QACpBC,KAAK,EAAEX,MAAM,CAACW,KAAK;QACnBC,YAAY,EAAEZ,MAAM,CAACY,YAAY;QACjCC,KAAK,EAAEb,MAAM,CAACa,KAAK;QACnBC,mBAAmB,GAAAT,qBAAA,GAAEL,MAAM,CAACe,gBAAgB,cAAAV,qBAAA,uBAAvBA,qBAAA,CAAyBS,mBAAmB;QACjEE,kBAAkB,GAAAV,sBAAA,GAAEN,MAAM,CAACe,gBAAgB,cAAAT,sBAAA,uBAAvBA,sBAAA,CAAyBU;MAC/C,CAAC;MACDC,kBAAkB,GAAAV,sBAAA,GAAEP,MAAM,CAACe,gBAAgB,cAAAR,sBAAA,uBAAvBA,sBAAA,CAAyBU;IAC/C,CAAC,CAAC;IAEF,MAAMC,gBAAgB,GAAIC,YAAsB,IAC9ClB,cAAc,CAACiB,gBAAgB,CAC7B;MACEP,KAAK,EAAEX,MAAM,CAACW,KAAK;MACnBC,YAAY,EAAEZ,MAAM,CAACY,YAAY;MACjCC,KAAK,EAAEb,MAAM,CAACa;IAChB,CAAC,EACDM,YACF,CAAC;IAEH,OAAO;MACLC,oBAAoB,EAAEZ,wBAAwB;MAC9CU;IACF,CAAC;EACH,CAAC,MAAM;IAAA,IAAAG,sBAAA;IACL,MAAM;MAAEC;IAA4B,CAAC,GAAG,IAAAC,0CAAoB,EAAC;MAC3DtB,cAAc;MACduB,uBAAuB,EAAE;QAAEX,KAAK,EAAEb,MAAM,CAACa;MAAM,CAAC;MAChDI,kBAAkB,GAAAI,sBAAA,GAAErB,MAAM,CAACe,gBAAgB,cAAAM,sBAAA,uBAAvBA,sBAAA,CAAyBJ;IAC/C,CAAC,CAAC;IAEF,MAAMQ,sBAAsB,GAAIN,YAAsB,IACpDlB,cAAc,CAACiB,gBAAgB,CAC7B;MACEL,KAAK,EAAEb,MAAM,CAACa;IAChB,CAAC,EACDM,YACF,CAAC;IAEH,OAAO;MACLC,oBAAoB,EAAEE,2BAA2B;MACjDJ,gBAAgB,EAAEO;IACpB,CAAC;EACH;AACF,CAAC;AAACC,OAAA,CAAA7B,iBAAA,GAAAA,iBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js new file mode 100644 index 0000000..c998f38 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js @@ -0,0 +1,26 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useCardConfig = void 0; +var _MerchantCardValidationConfig = require("../validation/MerchantCardValidationConfig"); +var _MerchantCardConfig = _interopRequireDefault(require("../config/MerchantCardConfig")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +const useCardConfig = props => { + const cardConfig = new _MerchantCardConfig.default({ + panId: props.panId, + expiryDateId: props.expiryDateId, + cvcId: props.cvcId + }); + if (props.validationConfig) { + cardConfig.validationConfig = new _MerchantCardValidationConfig.MerchantCardValidationConfig({ + acceptedCardBrands: props.validationConfig.acceptedCardBrands, + enablePanFormatting: props.validationConfig.enablePanFormatting, + validationListener: props.validationConfig.validationListener + }); + } + return cardConfig; +}; +exports.useCardConfig = useCardConfig; +//# sourceMappingURL=useCardConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js.map new file mode 100644 index 0000000..92639f2 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_MerchantCardValidationConfig","require","_MerchantCardConfig","_interopRequireDefault","obj","__esModule","default","useCardConfig","props","cardConfig","MerchantCardConfig","panId","expiryDateId","cvcId","validationConfig","MerchantCardValidationConfig","acceptedCardBrands","enablePanFormatting","validationListener","exports"],"sources":["useCardConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../validation/CardValidationEventListener';\nimport { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig';\nimport MerchantCardConfig from '../config/MerchantCardConfig';\n\nexport interface CardValidationConfig {\n acceptedCardBrands?: string[];\n enablePanFormatting?: boolean;\n validationListener: CardValidationEventListener;\n}\nexport interface UseCardConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n validationConfig?: CardValidationConfig;\n}\n\nexport const useCardConfig = (props: UseCardConfig): MerchantCardConfig => {\n const cardConfig = new MerchantCardConfig({\n panId: props.panId,\n expiryDateId: props.expiryDateId,\n cvcId: props.cvcId,\n });\n\n if (props.validationConfig) {\n cardConfig.validationConfig = new MerchantCardValidationConfig({\n acceptedCardBrands: props.validationConfig.acceptedCardBrands,\n enablePanFormatting: props.validationConfig.enablePanFormatting,\n validationListener: props.validationConfig.validationListener,\n });\n }\n\n return cardConfig;\n};\n"],"mappings":";;;;;;AACA,IAAAA,6BAAA,GAAAC,OAAA;AACA,IAAAC,mBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAA8D,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAcvD,MAAMG,aAAa,GAAIC,KAAoB,IAAyB;EACzE,MAAMC,UAAU,GAAG,IAAIC,2BAAkB,CAAC;IACxCC,KAAK,EAAEH,KAAK,CAACG,KAAK;IAClBC,YAAY,EAAEJ,KAAK,CAACI,YAAY;IAChCC,KAAK,EAAEL,KAAK,CAACK;EACf,CAAC,CAAC;EAEF,IAAIL,KAAK,CAACM,gBAAgB,EAAE;IAC1BL,UAAU,CAACK,gBAAgB,GAAG,IAAIC,0DAA4B,CAAC;MAC7DC,kBAAkB,EAAER,KAAK,CAACM,gBAAgB,CAACE,kBAAkB;MAC7DC,mBAAmB,EAAET,KAAK,CAACM,gBAAgB,CAACG,mBAAmB;MAC/DC,kBAAkB,EAAEV,KAAK,CAACM,gBAAgB,CAACI;IAC7C,CAAC,CAAC;EACJ;EAEA,OAAOT,UAAU;AACnB,CAAC;AAACU,OAAA,CAAAZ,aAAA,GAAAA,aAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js new file mode 100644 index 0000000..5f23320 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js @@ -0,0 +1,56 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useCardValidation = useCardValidation; +exports.useCardValidationEventListener = useCardValidationEventListener; +var _react = require("react"); +var _reactNative = require("react-native"); +var _AccessCheckout = _interopRequireDefault(require("../AccessCheckout")); +var _AccessCheckoutReactNative = _interopRequireDefault(require("../AccessCheckoutReactNative")); +var _CardValidationEventListener = require("../validation/CardValidationEventListener"); +var _ValidationListenerException = require("../validation/ValidationListenerException"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function useCardValidationEventListener(validationListener) { + (0, _react.useEffect)(() => { + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + const nativeEventListener = (0, _CardValidationEventListener.cardValidationNativeEventListenerOf)(validationListener); + const nativeEventEmitter = new _reactNative.NativeEventEmitter(_AccessCheckoutReactNative.default); + const eventSubscription = nativeEventEmitter.addListener(_AccessCheckout.default.CardValidationEventType, nativeEventListener); + return () => { + eventSubscription.remove(); + }; + }, []); +} +function useCardValidation({ + accessCheckout, + cardValidationConfig, + validationListener +}) { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCardValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCardValidationEventListener(validationListener); + const initialiseCardValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCardValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new _ValidationListenerException.ValidationListenerException(); + } + return accessCheckout.initialiseCardValidation(cardValidationConfig); + }; + return { + initialiseCardValidation + }; +} +//# sourceMappingURL=useCardValidation.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js.map b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js.map new file mode 100644 index 0000000..df1db41 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCardValidation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_react","require","_reactNative","_AccessCheckout","_interopRequireDefault","_AccessCheckoutReactNative","_CardValidationEventListener","_ValidationListenerException","obj","__esModule","default","useCardValidationEventListener","validationListener","useEffect","nativeEventListener","cardValidationNativeEventListenerOf","nativeEventEmitter","NativeEventEmitter","AccessCheckoutReactNative","eventSubscription","addListener","AccessCheckout","CardValidationEventType","remove","useCardValidation","accessCheckout","cardValidationConfig","initialiseCardValidation","ValidationListenerException"],"sources":["useCardValidation.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckout from '../AccessCheckout';\nimport AccessCheckoutReactNative from '../AccessCheckoutReactNative';\nimport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from '../validation/CardValidationEventListener';\nimport { ValidationListenerException } from '../validation/ValidationListenerException';\n\nexport function useCardValidationEventListener(validationListener: CardValidationEventListener) {\n useEffect(() => {\n //Safe-guard in the case where no validation listener was configured we avoid registering the native listener\n if (!validationListener) {\n return;\n }\n\n const nativeEventListener = cardValidationNativeEventListenerOf(validationListener);\n const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative);\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CardValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\ninterface UseCardValidationHook {\n accessCheckout: AccessCheckout;\n cardValidationConfig: {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n };\n validationListener: CardValidationEventListener;\n}\n\nexport function useCardValidation({ accessCheckout, cardValidationConfig, validationListener }: UseCardValidationHook) {\n /*\n Implementation Note: To allow the hook to render and use hooks correctly:\n `useCardValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener\n was provided in order to register the native event.\n */\n useCardValidationEventListener(validationListener);\n\n const initialiseCardValidation = () => {\n /*\n Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional.\n We added a safe-guard that will raise a ValidationListenerException which prevents the\n `initialiseCardValidation` method from being called when no validationConfig is provided.\n This provides the developers with a clear readable error message and enhances their debugging experience.\n */\n if (!validationListener) {\n throw new ValidationListenerException();\n }\n return accessCheckout.initialiseCardValidation(cardValidationConfig);\n };\n\n return { initialiseCardValidation };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,0BAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,4BAAA,GAAAL,OAAA;AAIA,IAAAM,4BAAA,GAAAN,OAAA;AAAwF,SAAAG,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEjF,SAASG,8BAA8BA,CAACC,kBAA+C,EAAE;EAC9F,IAAAC,gBAAS,EAAC,MAAM;IACd;IACA,IAAI,CAACD,kBAAkB,EAAE;MACvB;IACF;IAEA,MAAME,mBAAmB,GAAG,IAAAC,gEAAmC,EAACH,kBAAkB,CAAC;IACnF,MAAMI,kBAAkB,GAAG,IAAIC,+BAAkB,CAACC,kCAAyB,CAAC;IAE5E,MAAMC,iBAAiB,GAAGH,kBAAkB,CAACI,WAAW,CACtDC,uBAAc,CAACC,uBAAuB,EACtCR,mBACF,CAAC;IAED,OAAO,MAAM;MACXK,iBAAiB,CAACI,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAcO,SAASC,iBAAiBA,CAAC;EAAEC,cAAc;EAAEC,oBAAoB;EAAEd;AAA0C,CAAC,EAAE;EACrH;AACF;AACA;AACA;AACA;EACED,8BAA8B,CAACC,kBAAkB,CAAC;EAElD,MAAMe,wBAAwB,GAAGA,CAAA,KAAM;IACrC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACf,kBAAkB,EAAE;MACvB,MAAM,IAAIgB,wDAA2B,CAAC,CAAC;IACzC;IACA,OAAOH,cAAc,CAACE,wBAAwB,CAACD,oBAAoB,CAAC;EACtE,CAAC;EAED,OAAO;IAAEC;EAAyB,CAAC;AACrC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js new file mode 100644 index 0000000..5a71d3d --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js @@ -0,0 +1,24 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.useCvcOnlyConfig = useCvcOnlyConfig; +var _MerchantCvcOnlyConfig = _interopRequireDefault(require("../config/MerchantCvcOnlyConfig")); +var _MerchantCvcOnlyValidationConfig = require("../validation/MerchantCvcOnlyValidationConfig"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function useCvcOnlyConfig({ + cvcId, + validationConfig +}) { + const cardConfig = new _MerchantCvcOnlyConfig.default({ + cvcId + }); + if (validationConfig) { + cardConfig.validationConfig = new _MerchantCvcOnlyValidationConfig.MerchantCvcOnlyValidationConfig({ + validationListener: validationConfig.validationListener + }); + } + return cardConfig; +} +//# sourceMappingURL=useCvcOnlyConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js.map new file mode 100644 index 0000000..b0de93a --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_MerchantCvcOnlyConfig","_interopRequireDefault","require","_MerchantCvcOnlyValidationConfig","obj","__esModule","default","useCvcOnlyConfig","cvcId","validationConfig","cardConfig","MerchantCvcOnlyConfig","MerchantCvcOnlyValidationConfig","validationListener"],"sources":["useCvcOnlyConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../validation/CardValidationEventListener';\nimport MerchantCvcOnlyConfig from '../config/MerchantCvcOnlyConfig';\nimport { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig';\n\nexport interface CvcOnlyValidationConfig {\n validationListener: CardValidationEventListener;\n}\nexport interface UseCvcOnlyConfig {\n cvcId: string;\n validationConfig?: CvcOnlyValidationConfig;\n}\n\nexport function useCvcOnlyConfig({ cvcId, validationConfig }: UseCvcOnlyConfig) {\n const cardConfig = new MerchantCvcOnlyConfig({\n cvcId,\n });\n\n if (validationConfig) {\n cardConfig.validationConfig = new MerchantCvcOnlyValidationConfig({\n validationListener: validationConfig.validationListener,\n });\n }\n\n return cardConfig;\n}\n"],"mappings":";;;;;;AACA,IAAAA,sBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gCAAA,GAAAD,OAAA;AAAgG,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAUzF,SAASG,gBAAgBA,CAAC;EAAEC,KAAK;EAAEC;AAAmC,CAAC,EAAE;EAC9E,MAAMC,UAAU,GAAG,IAAIC,8BAAqB,CAAC;IAC3CH;EACF,CAAC,CAAC;EAEF,IAAIC,gBAAgB,EAAE;IACpBC,UAAU,CAACD,gBAAgB,GAAG,IAAIG,gEAA+B,CAAC;MAChEC,kBAAkB,EAAEJ,gBAAgB,CAACI;IACvC,CAAC,CAAC;EACJ;EAEA,OAAOH,UAAU;AACnB"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js similarity index 50% rename from access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js rename to access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js index a8320cc..9b2464e 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js @@ -3,33 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true }); -exports.useCvcOnlyValidation = useCvcOnlyValidation; -exports.useCvcOnlyValidationEventListener = useCvcOnlyValidationEventListener; +exports.useCvcOnlyValidationEventListener = exports.useCvcOnlyValidation = void 0; var _react = require("react"); var _reactNative = require("react-native"); var _index = _interopRequireWildcard(require("../index")); +var _CvcOnlyValidationEventListener = require("../validation/CvcOnlyValidationEventListener"); +var _ValidationListenerException = require("../validation/ValidationListenerException"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore - -function useCvcOnlyValidationEventListener(merchantListener) { +const useCvcOnlyValidationEventListener = validationListener => { (0, _react.useEffect)(() => { - const nativeEventListener = (0, _index.cvcOnlyValidationNativeEventListenerOf)(merchantListener); + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + const nativeEventListener = (0, _CvcOnlyValidationEventListener.cvcOnlyValidationNativeEventListenerOf)(validationListener); const nativeEventEmitter = new _reactNative.NativeEventEmitter(_index.default); const eventSubscription = nativeEventEmitter.addListener(_index.AccessCheckout.CvcOnlyValidationEventType, nativeEventListener); return () => { eventSubscription.remove(); }; }, []); -} -function useCvcOnlyValidation(accessCheckout, cvcOnlyValidationConfig, merchantListener) { - useCvcOnlyValidationEventListener(merchantListener); +}; +exports.useCvcOnlyValidationEventListener = useCvcOnlyValidationEventListener; +const useCvcOnlyValidation = ({ + accessCheckout, + cvcOnlyValidationConfig, + validationListener +}) => { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCvcOnlyValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCvcOnlyValidationEventListener(validationListener); const initialiseCvcOnlyValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCvcOnlyValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new _ValidationListenerException.ValidationListenerException(); + } return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig); }; return { initialiseCvcOnlyValidation }; -} -//# sourceMappingURL=CvcOnlyValidationHooks.js.map \ No newline at end of file +}; +exports.useCvcOnlyValidation = useCvcOnlyValidation; +//# sourceMappingURL=useCvcOnlyValidation.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js.map b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js.map new file mode 100644 index 0000000..c70faf8 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/hooks/useCvcOnlyValidation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_react","require","_reactNative","_index","_interopRequireWildcard","_CvcOnlyValidationEventListener","_ValidationListenerException","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","useCvcOnlyValidationEventListener","validationListener","useEffect","nativeEventListener","cvcOnlyValidationNativeEventListenerOf","nativeEventEmitter","NativeEventEmitter","AccessCheckoutReactNative","eventSubscription","addListener","AccessCheckout","CvcOnlyValidationEventType","remove","exports","useCvcOnlyValidation","accessCheckout","cvcOnlyValidationConfig","initialiseCvcOnlyValidation","ValidationListenerException"],"sources":["useCvcOnlyValidation.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckoutReactNative, { AccessCheckout, CardValidationEventListener } from '../index';\nimport type { CvcOnlyValidationEventListener } from '../validation/CvcOnlyValidationEventListener';\nimport { cvcOnlyValidationNativeEventListenerOf } from '../validation/CvcOnlyValidationEventListener';\nimport { ValidationListenerException } from '../validation/ValidationListenerException';\n\nexport const useCvcOnlyValidationEventListener = (validationListener: CvcOnlyValidationEventListener) => {\n useEffect(() => {\n //Safe-guard in the case where no validation listener was configured we avoid registering the native listener\n if (!validationListener) {\n return;\n }\n\n const nativeEventListener = cvcOnlyValidationNativeEventListenerOf(validationListener);\n const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative);\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CvcOnlyValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n};\n\ninterface UseCvcOnlyValidationHook {\n accessCheckout: AccessCheckout;\n cvcOnlyValidationConfig: {\n cvcId: string;\n };\n validationListener: CardValidationEventListener;\n}\n\nexport const useCvcOnlyValidation = ({\n accessCheckout,\n cvcOnlyValidationConfig,\n validationListener,\n}: UseCvcOnlyValidationHook) => {\n /*\n Implementation Note: To allow the hook to render and use hooks correctly:\n `useCvcOnlyValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener\n was provided in order to register the native event.\n */\n useCvcOnlyValidationEventListener(validationListener);\n const initialiseCvcOnlyValidation = () => {\n /*\n Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional.\n We added a safe-guard that will raise a ValidationListenerException which prevents the\n `initialiseCvcOnlyValidation` method from being called when no validationConfig is provided.\n This provides the developers with a clear readable error message and enhances their debugging experience.\n */\n if (!validationListener) {\n throw new ValidationListenerException();\n }\n\n return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig);\n };\n\n return { initialiseCvcOnlyValidation };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AAEA,IAAAI,+BAAA,GAAAJ,OAAA;AACA,IAAAK,4BAAA,GAAAL,OAAA;AAAwF,SAAAM,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAEjF,MAAMY,iCAAiC,GAAIC,kBAAkD,IAAK;EACvG,IAAAC,gBAAS,EAAC,MAAM;IACd;IACA,IAAI,CAACD,kBAAkB,EAAE;MACvB;IACF;IAEA,MAAME,mBAAmB,GAAG,IAAAC,sEAAsC,EAACH,kBAAkB,CAAC;IACtF,MAAMI,kBAAkB,GAAG,IAAIC,+BAAkB,CAACC,cAAyB,CAAC;IAE5E,MAAMC,iBAAiB,GAAGH,kBAAkB,CAACI,WAAW,CACtDC,qBAAc,CAACC,0BAA0B,EACzCR,mBACF,CAAC;IAED,OAAO,MAAM;MACXK,iBAAiB,CAACI,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAACC,OAAA,CAAAb,iCAAA,GAAAA,iCAAA;AAUK,MAAMc,oBAAoB,GAAGA,CAAC;EACnCC,cAAc;EACdC,uBAAuB;EACvBf;AACwB,CAAC,KAAK;EAC9B;AACF;AACA;AACA;AACA;EACED,iCAAiC,CAACC,kBAAkB,CAAC;EACrD,MAAMgB,2BAA2B,GAAGA,CAAA,KAAM;IACxC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAAChB,kBAAkB,EAAE;MACvB,MAAM,IAAIiB,wDAA2B,CAAC,CAAC;IACzC;IAEA,OAAOH,cAAc,CAACE,2BAA2B,CAACD,uBAAuB,CAAC;EAC5E,CAAC;EAED,OAAO;IAAEC;EAA4B,CAAC;AACxC,CAAC;AAACJ,OAAA,CAAAC,oBAAA,GAAAA,oBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/index.js b/access-checkout-react-native-sdk/lib/commonjs/index.js index 713c219..31dd4f4 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/index.js +++ b/access-checkout-react-native-sdk/lib/commonjs/index.js @@ -9,6 +9,24 @@ Object.defineProperty(exports, "AccessCheckout", { return _AccessCheckout.default; } }); +Object.defineProperty(exports, "AccessCheckoutTextInput", { + enumerable: true, + get: function () { + return _AccessCheckoutTextInput.AccessCheckoutTextInput; + } +}); +Object.defineProperty(exports, "AccessCheckoutTextInputProps", { + enumerable: true, + get: function () { + return _AccessCheckoutTextInput.AccessCheckoutTextInputProps; + } +}); +Object.defineProperty(exports, "AccessCheckoutTextInputStyle", { + enumerable: true, + get: function () { + return _AccessCheckoutTextInput.AccessCheckoutTextInputStyle; + } +}); Object.defineProperty(exports, "Brand", { enumerable: true, get: function () { @@ -33,16 +51,16 @@ Object.defineProperty(exports, "CVC", { return _SessionType.CVC; } }); -Object.defineProperty(exports, "CardDetails", { +Object.defineProperty(exports, "CardConfig", { enumerable: true, get: function () { - return _CardDetails.default; + return _MerchantCardConfig.default; } }); Object.defineProperty(exports, "CardValidationConfig", { enumerable: true, get: function () { - return _CardValidationConfig.default; + return _useCardConfig.CardValidationConfig; } }); Object.defineProperty(exports, "CardValidationEventListener", { @@ -51,10 +69,16 @@ Object.defineProperty(exports, "CardValidationEventListener", { return _CardValidationEventListener.CardValidationEventListener; } }); +Object.defineProperty(exports, "CvcOnlyConfig", { + enumerable: true, + get: function () { + return _MerchantCvcOnlyConfig.default; + } +}); Object.defineProperty(exports, "CvcOnlyValidationConfig", { enumerable: true, get: function () { - return _CvcOnlyValidationConfig.default; + return _useCvcOnlyConfig.CvcOnlyValidationConfig; } }); Object.defineProperty(exports, "CvcOnlyValidationEventListener", { @@ -63,6 +87,24 @@ Object.defineProperty(exports, "CvcOnlyValidationEventListener", { return _CvcOnlyValidationEventListener.CvcOnlyValidationEventListener; } }); +Object.defineProperty(exports, "MerchantCardValidationConfig", { + enumerable: true, + get: function () { + return _MerchantCardValidationConfig.MerchantCardValidationConfig; + } +}); +Object.defineProperty(exports, "MerchantCvcOnlyValidationConfig", { + enumerable: true, + get: function () { + return _MerchantCvcOnlyValidationConfig.MerchantCvcOnlyValidationConfig; + } +}); +Object.defineProperty(exports, "SessionGenerationConfig", { + enumerable: true, + get: function () { + return _SessionGenerationConfig.default; + } +}); Object.defineProperty(exports, "SessionType", { enumerable: true, get: function () { @@ -75,44 +117,66 @@ Object.defineProperty(exports, "Sessions", { return _Sessions.default; } }); -Object.defineProperty(exports, "cardValidationNativeEventListenerOf", { +Object.defineProperty(exports, "UseAccessCheckout", { + enumerable: true, + get: function () { + return _useAccessCheckout.UseAccessCheckout; + } +}); +Object.defineProperty(exports, "UseAccessCheckoutExports", { + enumerable: true, + get: function () { + return _useAccessCheckout.UseAccessCheckoutExports; + } +}); +Object.defineProperty(exports, "UseCardConfig", { enumerable: true, get: function () { - return _CardValidationEventListener.cardValidationNativeEventListenerOf; + return _useCardConfig.UseCardConfig; } }); -Object.defineProperty(exports, "cvcOnlyValidationNativeEventListenerOf", { +Object.defineProperty(exports, "UseCvcOnlyConfig", { enumerable: true, get: function () { - return _CvcOnlyValidationEventListener.cvcOnlyValidationNativeEventListenerOf; + return _useCvcOnlyConfig.UseCvcOnlyConfig; } }); exports.default = void 0; -Object.defineProperty(exports, "useCardValidation", { +Object.defineProperty(exports, "useAccessCheckout", { + enumerable: true, + get: function () { + return _useAccessCheckout.useAccessCheckout; + } +}); +Object.defineProperty(exports, "useCardConfig", { enumerable: true, get: function () { - return _CardValidationHooks.useCardValidation; + return _useCardConfig.useCardConfig; } }); -Object.defineProperty(exports, "useCvcOnlyValidation", { +Object.defineProperty(exports, "useCvcOnlyConfig", { enumerable: true, get: function () { - return _CvcOnlyValidationHooks.useCvcOnlyValidation; + return _useCvcOnlyConfig.useCvcOnlyConfig; } }); var _AccessCheckoutReactNative = _interopRequireDefault(require("./AccessCheckoutReactNative")); var _AccessCheckout = _interopRequireDefault(require("./AccessCheckout")); -var _CardDetails = _interopRequireDefault(require("./session/CardDetails")); +var _SessionGenerationConfig = _interopRequireDefault(require("./session/SessionGenerationConfig")); var _SessionType = _interopRequireWildcard(require("./session/SessionType")); var _Sessions = _interopRequireDefault(require("./session/Sessions")); -var _CardValidationConfig = _interopRequireDefault(require("./validation/CardValidationConfig")); -var _CvcOnlyValidationConfig = _interopRequireDefault(require("./validation/CvcOnlyValidationConfig")); var _Brand = _interopRequireDefault(require("./validation/Brand")); var _BrandImage = _interopRequireDefault(require("./validation/BrandImage")); +var _MerchantCardConfig = _interopRequireDefault(require("./config/MerchantCardConfig")); +var _MerchantCvcOnlyConfig = _interopRequireDefault(require("./config/MerchantCvcOnlyConfig")); var _CardValidationEventListener = require("./validation/CardValidationEventListener"); var _CvcOnlyValidationEventListener = require("./validation/CvcOnlyValidationEventListener"); -var _CardValidationHooks = require("./validation/CardValidationHooks"); -var _CvcOnlyValidationHooks = require("./validation/CvcOnlyValidationHooks"); +var _MerchantCvcOnlyValidationConfig = require("./validation/MerchantCvcOnlyValidationConfig"); +var _MerchantCardValidationConfig = require("./validation/MerchantCardValidationConfig"); +var _useCardConfig = require("./hooks/useCardConfig"); +var _useCvcOnlyConfig = require("./hooks/useCvcOnlyConfig"); +var _useAccessCheckout = require("./hooks/useAccessCheckout"); +var _AccessCheckoutTextInput = require("./ui/AccessCheckoutTextInput"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } diff --git a/access-checkout-react-native-sdk/lib/commonjs/index.js.map b/access-checkout-react-native-sdk/lib/commonjs/index.js.map index a528917..8b6b1b6 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/index.js.map +++ b/access-checkout-react-native-sdk/lib/commonjs/index.js.map @@ -1 +1 @@ -{"version":3,"names":["_AccessCheckoutReactNative","_interopRequireDefault","require","_AccessCheckout","_CardDetails","_SessionType","_interopRequireWildcard","_Sessions","_CardValidationConfig","_CvcOnlyValidationConfig","_Brand","_BrandImage","_CardValidationEventListener","_CvcOnlyValidationEventListener","_CardValidationHooks","_CvcOnlyValidationHooks","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","_default","exports","AccessCheckoutReactNative"],"sources":["index.tsx"],"sourcesContent":["import AccessCheckoutReactNative from './AccessCheckoutReactNative';\n\nexport default AccessCheckoutReactNative;\n\nexport { default as AccessCheckout } from './AccessCheckout';\n\nexport { default as CardDetails } from './session/CardDetails';\n\nexport { default as SessionType, CARD, CVC } from './session/SessionType';\n\nexport { default as Sessions } from './session/Sessions';\n\nexport { default as CardValidationConfig } from './validation/CardValidationConfig';\n\nexport { default as CvcOnlyValidationConfig } from './validation/CvcOnlyValidationConfig';\n\nexport { default as Brand } from './validation/Brand';\n\nexport { default as BrandImage } from './validation/BrandImage';\n\nexport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from './validation/CardValidationEventListener';\n\nexport {\n CvcOnlyValidationEventListener,\n cvcOnlyValidationNativeEventListenerOf,\n} from './validation/CvcOnlyValidationEventListener';\n\nexport { useCardValidation } from './validation/CardValidationHooks';\nexport { useCvcOnlyValidation } from './validation/CvcOnlyValidationHooks';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,YAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,YAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AAEA,IAAAM,qBAAA,GAAAP,sBAAA,CAAAC,OAAA;AAEA,IAAAO,wBAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEA,IAAAQ,MAAA,GAAAT,sBAAA,CAAAC,OAAA;AAEA,IAAAS,WAAA,GAAAV,sBAAA,CAAAC,OAAA;AAEA,IAAAU,4BAAA,GAAAV,OAAA;AAKA,IAAAW,+BAAA,GAAAX,OAAA;AAKA,IAAAY,oBAAA,GAAAZ,OAAA;AACA,IAAAa,uBAAA,GAAAb,OAAA;AAA2E,SAAAc,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAX,wBAAAW,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAAxB,uBAAAoC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAjB,OAAA,GA7B5DkB,kCAAyB"} \ No newline at end of file +{"version":3,"names":["_AccessCheckoutReactNative","_interopRequireDefault","require","_AccessCheckout","_SessionGenerationConfig","_SessionType","_interopRequireWildcard","_Sessions","_Brand","_BrandImage","_MerchantCardConfig","_MerchantCvcOnlyConfig","_CardValidationEventListener","_CvcOnlyValidationEventListener","_MerchantCvcOnlyValidationConfig","_MerchantCardValidationConfig","_useCardConfig","_useCvcOnlyConfig","_useAccessCheckout","_AccessCheckoutTextInput","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","obj","_default","exports","AccessCheckoutReactNative"],"sources":["index.tsx"],"sourcesContent":["import AccessCheckoutReactNative from './AccessCheckoutReactNative';\n\nexport default AccessCheckoutReactNative;\n\nexport { default as AccessCheckout } from './AccessCheckout';\n\nexport { default as SessionGenerationConfig } from './session/SessionGenerationConfig';\n\nexport { default as SessionType, CARD, CVC } from './session/SessionType';\n\nexport { default as Sessions } from './session/Sessions';\n\nexport { default as Brand } from './validation/Brand';\n\nexport { default as BrandImage } from './validation/BrandImage';\nexport { default as CardConfig } from './config/MerchantCardConfig';\nexport { default as CvcOnlyConfig } from './config/MerchantCvcOnlyConfig';\n\nexport { CardValidationEventListener } from './validation/CardValidationEventListener';\nexport { CvcOnlyValidationEventListener } from './validation/CvcOnlyValidationEventListener';\n\nexport { MerchantCvcOnlyValidationConfig } from './validation/MerchantCvcOnlyValidationConfig';\nexport { MerchantCardValidationConfig } from './validation/MerchantCardValidationConfig';\n\nexport { useCardConfig, UseCardConfig, CardValidationConfig } from './hooks/useCardConfig';\nexport { useCvcOnlyConfig, UseCvcOnlyConfig, CvcOnlyValidationConfig } from './hooks/useCvcOnlyConfig';\n\nexport { useAccessCheckout, UseAccessCheckout, UseAccessCheckoutExports } from './hooks/useAccessCheckout';\n\nexport {\n AccessCheckoutTextInput,\n AccessCheckoutTextInputStyle,\n AccessCheckoutTextInputProps,\n} from './ui/AccessCheckoutTextInput';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,0BAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,eAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,wBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAEA,IAAAG,YAAA,GAAAC,uBAAA,CAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAN,sBAAA,CAAAC,OAAA;AAEA,IAAAM,MAAA,GAAAP,sBAAA,CAAAC,OAAA;AAEA,IAAAO,WAAA,GAAAR,sBAAA,CAAAC,OAAA;AACA,IAAAQ,mBAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,sBAAA,GAAAV,sBAAA,CAAAC,OAAA;AAEA,IAAAU,4BAAA,GAAAV,OAAA;AACA,IAAAW,+BAAA,GAAAX,OAAA;AAEA,IAAAY,gCAAA,GAAAZ,OAAA;AACA,IAAAa,6BAAA,GAAAb,OAAA;AAEA,IAAAc,cAAA,GAAAd,OAAA;AACA,IAAAe,iBAAA,GAAAf,OAAA;AAEA,IAAAgB,kBAAA,GAAAhB,OAAA;AAEA,IAAAiB,wBAAA,GAAAjB,OAAA;AAIsC,SAAAkB,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAf,wBAAAe,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAAA,SAAA5B,uBAAAwC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAhB,UAAA,GAAAgB,GAAA,KAAAf,OAAA,EAAAe,GAAA;AAAA,IAAAC,QAAA,GAAAC,OAAA,CAAAjB,OAAA,GA/BvBkB,kCAAyB"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js b/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js deleted file mode 100644 index a59ae2a..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -//# sourceMappingURL=CardDetails.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js.map b/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js.map deleted file mode 100644 index 391944c..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/session/CardDetails.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"sources":["CardDetails.tsx"],"sourcesContent":["export default interface CardDetails {\n pan?: string;\n expiryDate?: string;\n cvc: string;\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js b/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js new file mode 100644 index 0000000..08c141c --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js @@ -0,0 +1,2 @@ +"use strict"; +//# sourceMappingURL=SessionGenerationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js.map new file mode 100644 index 0000000..2309d75 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/session/SessionGenerationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["SessionGenerationConfig.ts"],"sourcesContent":["export default interface SessionGenerationConfig {\n panId?: string;\n expiryDateId?: string;\n cvcId: string;\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/session/SessionType.js b/access-checkout-react-native-sdk/lib/commonjs/session/SessionType.js index 8471500..3f99c37 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/session/SessionType.js +++ b/access-checkout-react-native-sdk/lib/commonjs/session/SessionType.js @@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", { }); exports.default = exports.CVC = exports.CARD = void 0; function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } class SessionType {} exports.default = SessionType; _defineProperty(SessionType, "CARD", 'CARD'); diff --git a/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js b/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js new file mode 100644 index 0000000..6689475 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js @@ -0,0 +1,76 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.AccessCheckoutTextInput = void 0; +var _react = _interopRequireDefault(require("react")); +var _reactNative = require("react-native"); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Composes `AccessCheckoutTextInput`. + * + * - nativeID: string + * - testID: string + * - style: StyleProp; + * - placeholder: string + * - editable: boolean + */ + +/** + * Note: Not all properties apply styling to both placeholder text and input text. + * textColor: only applies to input text. + * fontFamily: applies to both placeholder text and input text. + * fontSize: applies to both placeholder text and input text. + * fontStyle: applies to both placeholder text and input text. + * fontWeight: applies to both placeholder text and input text. + */ + +/** + * Font Changes apply to placeholder text and input text + * + * ## What + * - Rewrites font support for android + * - Adds font weight support for android <28 only 'normal' and 'bold' supported + * - Adds font weight support as units for android >28 + */ + +const RTCAccessCheckoutTextInput = (0, _reactNative.requireNativeComponent)('AccessCheckoutTextInput'); +const AccessCheckoutTextInput = props => { + const { + nativeID, + testID, + style, + placeholder, + editable + } = props; + const { + color, + fontFamily, + fontSize, + fontStyle, + fontWeight, + ...otherStyles + } = _reactNative.StyleSheet.flatten([style]); + return /*#__PURE__*/_react.default.createElement(_reactNative.View, { + style: [otherStyles] + }, /*#__PURE__*/_react.default.createElement(RTCAccessCheckoutTextInput, { + nativeID: nativeID, + testID: testID, + style: [{ + flex: 1 + }], + placeholder: placeholder, + font: { + fontFamily, + fontSize, + fontWeight, + fontStyle + }, + color: color, + editable: editable + })); +}; +exports.AccessCheckoutTextInput = AccessCheckoutTextInput; +var _default = exports.default = AccessCheckoutTextInput; +//# sourceMappingURL=AccessCheckoutTextInput.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js.map b/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js.map new file mode 100644 index 0000000..a2f3d7c --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/ui/AccessCheckoutTextInput.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","obj","__esModule","default","RTCAccessCheckoutTextInput","requireNativeComponent","AccessCheckoutTextInput","props","nativeID","testID","style","placeholder","editable","color","fontFamily","fontSize","fontStyle","fontWeight","otherStyles","StyleSheet","flatten","createElement","View","flex","font","exports","_default"],"sources":["AccessCheckoutTextInput.tsx"],"sourcesContent":["import React from 'react';\nimport {\n requireNativeComponent,\n type ColorValue,\n type StyleProp,\n StyleSheet,\n type TextStyle,\n View,\n type ViewStyle,\n} from 'react-native';\n\n/**\n * Composes `AccessCheckoutTextInput`.\n *\n * - nativeID: string\n * - testID: string\n * - style: StyleProp;\n * - placeholder: string\n * - editable: boolean\n */\nexport interface AccessCheckoutTextInputProps {\n nativeID: string;\n testID?: string;\n style?: StyleProp;\n placeholder?: string;\n editable?: boolean;\n}\n\n/**\n * Note: Not all properties apply styling to both placeholder text and input text.\n * textColor: only applies to input text.\n * fontFamily: applies to both placeholder text and input text.\n * fontSize: applies to both placeholder text and input text.\n * fontStyle: applies to both placeholder text and input text.\n * fontWeight: applies to both placeholder text and input text.\n */\nexport interface AccessCheckoutTextInputStyle extends ViewStyle {\n color?: ColorValue;\n fontFamily?: string;\n fontSize?: number;\n fontStyle?: 'normal' | 'italic';\n // Specifies font weight. The values 'normal' and 'bold' are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen.\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n}\n\n/**\n * Font Changes apply to placeholder text and input text\n *\n * ## What\n * - Rewrites font support for android\n * - Adds font weight support for android <28 only 'normal' and 'bold' supported\n * - Adds font weight support as units for android >28\n */\ninterface RTCAccessCheckoutTextInputFontProps {\n fontFamily?: string;\n fontSize?: number;\n fontStyle?: 'normal' | 'italic';\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n}\n\ninterface RTCAccessCheckoutTextInputProps {\n nativeID: string;\n testID?: string;\n style?: StyleProp;\n placeholder?: string;\n font?: RTCAccessCheckoutTextInputFontProps;\n editable?: boolean;\n color?: ColorValue;\n}\n\nconst RTCAccessCheckoutTextInput = requireNativeComponent('AccessCheckoutTextInput');\nexport const AccessCheckoutTextInput = (props: AccessCheckoutTextInputProps) => {\n const { nativeID, testID, style, placeholder, editable } = props;\n const { color, fontFamily, fontSize, fontStyle, fontWeight, ...otherStyles } = StyleSheet.flatten([style]);\n return (\n \n \n \n );\n};\n\nexport default AccessCheckoutTextInput;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAQsB,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA,MAAMG,0BAA0B,GAAG,IAAAC,mCAAsB,EAAkC,yBAAyB,CAAC;AAC9G,MAAMC,uBAAuB,GAAIC,KAAmC,IAAK;EAC9E,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGL,KAAK;EAChE,MAAM;IAAEM,KAAK;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,UAAU;IAAE,GAAGC;EAAY,CAAC,GAAGC,uBAAU,CAACC,OAAO,CAAC,CAACV,KAAK,CAAC,CAAC;EAC1G,oBACEb,MAAA,CAAAM,OAAA,CAAAkB,aAAA,CAACrB,YAAA,CAAAsB,IAAI;IAACZ,KAAK,EAAE,CAACQ,WAAW;EAAE,gBACzBrB,MAAA,CAAAM,OAAA,CAAAkB,aAAA,CAACjB,0BAA0B;IACzBI,QAAQ,EAAEA,QAAS;IACnBC,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAE,CAAC;MAAEa,IAAI,EAAE;IAAE,CAAC,CAAE;IACrBZ,WAAW,EAAEA,WAAY;IACzBa,IAAI,EAAE;MACJV,UAAU;MACVC,QAAQ;MACRE,UAAU;MACVD;IACF,CAAE;IACFH,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA;EAAS,CACpB,CACG,CAAC;AAEX,CAAC;AAACa,OAAA,CAAAnB,uBAAA,GAAAA,uBAAA;AAAA,IAAAoB,QAAA,GAAAD,OAAA,CAAAtB,OAAA,GAEaG,uBAAuB"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/Brand.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/Brand.js.map index ced2712..76a7487 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/Brand.js.map +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/Brand.js.map @@ -1 +1 @@ -{"version":3,"names":[],"sources":["Brand.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport BrandImage from './BrandImage';\n\nexport default interface Brand {\n name: string;\n images: BrandImage[];\n}\n"],"mappings":""} \ No newline at end of file +{"version":3,"names":[],"sources":["Brand.ts"],"sourcesContent":["import type BrandImage from './BrandImage';\n\nexport default interface Brand {\n name: string;\n images: BrandImage[];\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js deleted file mode 100644 index ea70c73..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -class CardValidationConfig { - constructor({ - panId, - expiryDateId, - cvcId, - enablePanFormatting, - acceptedCardBrands - }) { - _defineProperty(this, "panId", void 0); - _defineProperty(this, "expiryDateId", void 0); - _defineProperty(this, "cvcId", void 0); - _defineProperty(this, "enablePanFormatting", false); - _defineProperty(this, "acceptedCardBrands", []); - this.panId = panId; - this.expiryDateId = expiryDateId; - this.cvcId = cvcId; - this.enablePanFormatting = enablePanFormatting ? enablePanFormatting : false; - this.acceptedCardBrands = acceptedCardBrands ? acceptedCardBrands : []; - } -} -exports.default = CardValidationConfig; -//# sourceMappingURL=CardValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js.map deleted file mode 100644 index 9d29774..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationConfig.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["CardValidationConfig","constructor","panId","expiryDateId","cvcId","enablePanFormatting","acceptedCardBrands","_defineProperty","exports","default"],"sources":["CardValidationConfig.ts"],"sourcesContent":["export default class CardValidationConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting = false;\n acceptedCardBrands: string[] = [];\n\n constructor({\n panId,\n expiryDateId,\n cvcId,\n enablePanFormatting,\n acceptedCardBrands,\n }: {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n }) {\n this.panId = panId;\n this.expiryDateId = expiryDateId;\n this.cvcId = cvcId;\n this.enablePanFormatting = enablePanFormatting\n ? enablePanFormatting\n : false;\n this.acceptedCardBrands = acceptedCardBrands ? acceptedCardBrands : [];\n }\n}\n"],"mappings":";;;;;;;;;AAAe,MAAMA,oBAAoB,CAAC;EAOxCC,WAAWA,CAAC;IACVC,KAAK;IACLC,YAAY;IACZC,KAAK;IACLC,mBAAmB;IACnBC;EAOF,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,8BAfmB,KAAK;IAAAA,eAAA,6BACI,EAAE;IAe/B,IAAI,CAACL,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,mBAAmB,GAAGA,mBAAmB,GAC1CA,mBAAmB,GACnB,KAAK;IACT,IAAI,CAACC,kBAAkB,GAAGA,kBAAkB,GAAGA,kBAAkB,GAAG,EAAE;EACxE;AACF;AAACE,OAAA,CAAAC,OAAA,GAAAT,oBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationEventListener.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationEventListener.js.map index f561726..e8c76d6 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationEventListener.js.map +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationEventListener.js.map @@ -1 +1 @@ -{"version":3,"names":["cardValidationNativeEventListenerOf","delegate","event","type","onCardBrandChanged","value","onPanValidChanged","isValid","onExpiryDateValidChanged","onCvcValidChanged","onValidationSuccess"],"sources":["CardValidationEventListener.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Brand from './Brand';\n\nexport interface CardValidationEventListener {\n onCardBrandChanged?(brand?: Brand): void;\n\n onPanValidChanged?(isValid: boolean): void;\n\n onExpiryDateValidChanged?(isValid: boolean): void;\n\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cardValidationNativeEventListenerOf(\n delegate: CardValidationEventListener\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'brand' && delegate.onCardBrandChanged) {\n if (event.value === null) {\n delegate.onCardBrandChanged();\n } else {\n delegate.onCardBrandChanged(event.value as Brand);\n }\n }\n\n if (event.type === 'pan' && delegate.onPanValidChanged) {\n delegate.onPanValidChanged(event.isValid);\n }\n\n if (event.type === 'expiryDate' && delegate.onExpiryDateValidChanged) {\n delegate.onExpiryDateValidChanged(event.isValid);\n }\n\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":";;;;;;AAAA;AACA;;AAeO,SAASA,mCAAmCA,CACjDC,QAAqC,EACrC;EACA;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,IAAIF,QAAQ,CAACG,kBAAkB,EAAE;MACzD,IAAIF,KAAK,CAACG,KAAK,KAAK,IAAI,EAAE;QACxBJ,QAAQ,CAACG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,MAAM;QACLH,QAAQ,CAACG,kBAAkB,CAACF,KAAK,CAACG,KAAc,CAAC;MACnD;IACF;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,iBAAiB,EAAE;MACtDL,QAAQ,CAACK,iBAAiB,CAACJ,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,YAAY,IAAIF,QAAQ,CAACO,wBAAwB,EAAE;MACpEP,QAAQ,CAACO,wBAAwB,CAACN,KAAK,CAACK,OAAO,CAAC;IAClD;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACQ,iBAAiB,EAAE;MACtDR,QAAQ,CAACQ,iBAAiB,CAACP,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACS,mBAAmB,EAAE;MACxDT,QAAQ,CAACS,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file +{"version":3,"names":["cardValidationNativeEventListenerOf","delegate","event","type","onCardBrandChanged","value","onPanValidChanged","isValid","onExpiryDateValidChanged","onCvcValidChanged","onValidationSuccess"],"sources":["CardValidationEventListener.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Brand from './Brand';\n\nexport interface CardValidationEventListener {\n onCardBrandChanged?(brand?: Brand): void;\n\n onPanValidChanged?(isValid: boolean): void;\n\n onExpiryDateValidChanged?(isValid: boolean): void;\n\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cardValidationNativeEventListenerOf(delegate: CardValidationEventListener) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'brand' && delegate.onCardBrandChanged) {\n if (event.value === null) {\n delegate.onCardBrandChanged();\n } else {\n delegate.onCardBrandChanged(event.value as Brand);\n }\n }\n\n if (event.type === 'pan' && delegate.onPanValidChanged) {\n delegate.onPanValidChanged(event.isValid);\n }\n\n if (event.type === 'expiryDate' && delegate.onExpiryDateValidChanged) {\n delegate.onExpiryDateValidChanged(event.isValid);\n }\n\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":";;;;;;AAAA;AACA;;AAeO,SAASA,mCAAmCA,CAACC,QAAqC,EAAE;EACzF;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,IAAIF,QAAQ,CAACG,kBAAkB,EAAE;MACzD,IAAIF,KAAK,CAACG,KAAK,KAAK,IAAI,EAAE;QACxBJ,QAAQ,CAACG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,MAAM;QACLH,QAAQ,CAACG,kBAAkB,CAACF,KAAK,CAACG,KAAc,CAAC;MACnD;IACF;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,iBAAiB,EAAE;MACtDL,QAAQ,CAACK,iBAAiB,CAACJ,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,YAAY,IAAIF,QAAQ,CAACO,wBAAwB,EAAE;MACpEP,QAAQ,CAACO,wBAAwB,CAACN,KAAK,CAACK,OAAO,CAAC;IAClD;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACQ,iBAAiB,EAAE;MACtDR,QAAQ,CAACQ,iBAAiB,CAACP,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACS,mBAAmB,EAAE;MACxDT,QAAQ,CAACS,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js deleted file mode 100644 index d7d8ae3..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.useCardValidation = useCardValidation; -exports.useCardValidationEventListener = useCardValidationEventListener; -var _react = require("react"); -var _reactNative = require("react-native"); -var _AccessCheckout = _interopRequireDefault(require("../AccessCheckout")); -var _AccessCheckoutReactNative = _interopRequireDefault(require("../AccessCheckoutReactNative")); -var _CardValidationEventListener = require("./CardValidationEventListener"); -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore - -function useCardValidationEventListener(merchantListener) { - (0, _react.useEffect)(() => { - const nativeEventListener = (0, _CardValidationEventListener.cardValidationNativeEventListenerOf)(merchantListener); - const nativeEventEmitter = new _reactNative.NativeEventEmitter(_AccessCheckoutReactNative.default); - const eventSubscription = nativeEventEmitter.addListener(_AccessCheckout.default.CardValidationEventType, nativeEventListener); - return () => { - eventSubscription.remove(); - }; - }, []); -} -function useCardValidation(accessCheckout, cardValidationConfig, merchantListener) { - useCardValidationEventListener(merchantListener); - const initialiseCardValidation = () => { - return accessCheckout.initialiseCardValidation(cardValidationConfig); - }; - return { - initialiseCardValidation - }; -} -//# sourceMappingURL=CardValidationHooks.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js.map deleted file mode 100644 index 9b4785e..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CardValidationHooks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_react","require","_reactNative","_AccessCheckout","_interopRequireDefault","_AccessCheckoutReactNative","_CardValidationEventListener","obj","__esModule","default","useCardValidationEventListener","merchantListener","useEffect","nativeEventListener","cardValidationNativeEventListenerOf","nativeEventEmitter","NativeEventEmitter","AccessCheckoutReactNative","eventSubscription","addListener","AccessCheckout","CardValidationEventType","remove","useCardValidation","accessCheckout","cardValidationConfig","initialiseCardValidation"],"sources":["CardValidationHooks.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckout from '../AccessCheckout';\nimport AccessCheckoutReactNative from '../AccessCheckoutReactNative';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardValidationConfig from './CardValidationConfig';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from './CardValidationEventListener';\n\nexport function useCardValidationEventListener(\n merchantListener: CardValidationEventListener\n) {\n useEffect(() => {\n const nativeEventListener =\n cardValidationNativeEventListenerOf(merchantListener);\n const nativeEventEmitter = new NativeEventEmitter(\n AccessCheckoutReactNative\n );\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CardValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\nexport function useCardValidation(\n accessCheckout: AccessCheckout,\n cardValidationConfig: CardValidationConfig,\n merchantListener: CardValidationEventListener\n) {\n useCardValidationEventListener(merchantListener);\n\n const initialiseCardValidation = () => {\n return accessCheckout.initialiseCardValidation(cardValidationConfig);\n };\n\n return { initialiseCardValidation };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,0BAAA,GAAAD,sBAAA,CAAAH,OAAA;AAMA,IAAAK,4BAAA,GAAAL,OAAA;AAGuC,SAAAG,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AARvC;AACA;;AAEA;AACA;;AAMO,SAASG,8BAA8BA,CAC5CC,gBAA6C,EAC7C;EACA,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,mBAAmB,GACvB,IAAAC,gEAAmC,EAACH,gBAAgB,CAAC;IACvD,MAAMI,kBAAkB,GAAG,IAAIC,+BAAkB,CAC/CC,kCACF,CAAC;IAED,MAAMC,iBAAiB,GAAGH,kBAAkB,CAACI,WAAW,CACtDC,uBAAc,CAACC,uBAAuB,EACtCR,mBACF,CAAC;IAED,OAAO,MAAM;MACXK,iBAAiB,CAACI,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAEO,SAASC,iBAAiBA,CAC/BC,cAA8B,EAC9BC,oBAA0C,EAC1Cd,gBAA6C,EAC7C;EACAD,8BAA8B,CAACC,gBAAgB,CAAC;EAEhD,MAAMe,wBAAwB,GAAGA,CAAA,KAAM;IACrC,OAAOF,cAAc,CAACE,wBAAwB,CAACD,oBAAoB,CAAC;EACtE,CAAC;EAED,OAAO;IAAEC;EAAyB,CAAC;AACrC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js b/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js deleted file mode 100644 index 2419ccf..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -class CvcOnlyValidationConfig { - constructor({ - cvcId - }) { - _defineProperty(this, "cvcId", void 0); - this.cvcId = cvcId; - } -} -exports.default = CvcOnlyValidationConfig; -//# sourceMappingURL=CvcOnlyValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js.map deleted file mode 100644 index 3ad0863..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationConfig.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["CvcOnlyValidationConfig","constructor","cvcId","_defineProperty","exports","default"],"sources":["CvcOnlyValidationConfig.ts"],"sourcesContent":["export default class CvcOnlyValidationConfig {\n cvcId: string;\n\n constructor({ cvcId }: { cvcId: string }) {\n this.cvcId = cvcId;\n }\n}\n"],"mappings":";;;;;;;;;AAAe,MAAMA,uBAAuB,CAAC;EAG3CC,WAAWA,CAAC;IAAEC;EAAyB,CAAC,EAAE;IAAAC,eAAA;IACxC,IAAI,CAACD,KAAK,GAAGA,KAAK;EACpB;AACF;AAACE,OAAA,CAAAC,OAAA,GAAAL,uBAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationEventListener.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationEventListener.js.map index c8d2e33..01917ff 100644 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationEventListener.js.map +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationEventListener.js.map @@ -1 +1 @@ -{"version":3,"names":["cvcOnlyValidationNativeEventListenerOf","delegate","event","type","onCvcValidChanged","isValid","onValidationSuccess"],"sources":["CvcOnlyValidationEventListener.ts"],"sourcesContent":["export interface CvcOnlyValidationEventListener {\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cvcOnlyValidationNativeEventListenerOf(\n delegate: CvcOnlyValidationEventListener\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":";;;;;;AAMO,SAASA,sCAAsCA,CACpDC,QAAwC,EACxC;EACA;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACG,iBAAiB,EAAE;MACtDH,QAAQ,CAACG,iBAAiB,CAACF,KAAK,CAACG,OAAO,CAAC;IAC3C;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,mBAAmB,EAAE;MACxDL,QAAQ,CAACK,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file +{"version":3,"names":["cvcOnlyValidationNativeEventListenerOf","delegate","event","type","onCvcValidChanged","isValid","onValidationSuccess"],"sources":["CvcOnlyValidationEventListener.ts"],"sourcesContent":["export interface CvcOnlyValidationEventListener {\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cvcOnlyValidationNativeEventListenerOf(delegate: CvcOnlyValidationEventListener) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":";;;;;;AAMO,SAASA,sCAAsCA,CAACC,QAAwC,EAAE;EAC/F;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACG,iBAAiB,EAAE;MACtDH,QAAQ,CAACG,iBAAiB,CAACF,KAAK,CAACG,OAAO,CAAC;IAC3C;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,mBAAmB,EAAE;MACxDL,QAAQ,CAACK,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js.map deleted file mode 100644 index 564524f..0000000 --- a/access-checkout-react-native-sdk/lib/commonjs/validation/CvcOnlyValidationHooks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["_react","require","_reactNative","_index","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","useCvcOnlyValidationEventListener","merchantListener","useEffect","nativeEventListener","cvcOnlyValidationNativeEventListenerOf","nativeEventEmitter","NativeEventEmitter","AccessCheckoutReactNative","eventSubscription","addListener","AccessCheckout","CvcOnlyValidationEventType","remove","useCvcOnlyValidation","accessCheckout","cvcOnlyValidationConfig","initialiseCvcOnlyValidation"],"sources":["CvcOnlyValidationHooks.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckoutReactNative, {\n AccessCheckout,\n CvcOnlyValidationConfig,\n cvcOnlyValidationNativeEventListenerOf,\n} from '../index';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { CvcOnlyValidationEventListener } from './CvcOnlyValidationEventListener';\n\nexport function useCvcOnlyValidationEventListener(\n merchantListener: CvcOnlyValidationEventListener\n) {\n useEffect(() => {\n const nativeEventListener =\n cvcOnlyValidationNativeEventListenerOf(merchantListener);\n const nativeEventEmitter = new NativeEventEmitter(\n AccessCheckoutReactNative\n );\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CvcOnlyValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\nexport function useCvcOnlyValidation(\n accessCheckout: AccessCheckout,\n cvcOnlyValidationConfig: CvcOnlyValidationConfig,\n merchantListener: CvcOnlyValidationEventListener\n) {\n useCvcOnlyValidationEventListener(merchantListener);\n\n const initialiseCvcOnlyValidation = () => {\n return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig);\n };\n\n return { initialiseCvcOnlyValidation };\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAC,uBAAA,CAAAH,OAAA;AAIkB,SAAAI,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAF,wBAAAE,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,IAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAc,CAAA,SAAAI,CAAA,GAAAR,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAI,CAAA,KAAAA,CAAA,CAAAX,GAAA,IAAAW,CAAA,CAAAC,GAAA,IAAAR,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAI,CAAA,IAAAV,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAgB,GAAA,CAAAnB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAClB;AACA;;AAGO,SAASY,iCAAiCA,CAC/CC,gBAAgD,EAChD;EACA,IAAAC,gBAAS,EAAC,MAAM;IACd,MAAMC,mBAAmB,GACvB,IAAAC,6CAAsC,EAACH,gBAAgB,CAAC;IAC1D,MAAMI,kBAAkB,GAAG,IAAIC,+BAAkB,CAC/CC,cACF,CAAC;IAED,MAAMC,iBAAiB,GAAGH,kBAAkB,CAACI,WAAW,CACtDC,qBAAc,CAACC,0BAA0B,EACzCR,mBACF,CAAC;IAED,OAAO,MAAM;MACXK,iBAAiB,CAACI,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAEO,SAASC,oBAAoBA,CAClCC,cAA8B,EAC9BC,uBAAgD,EAChDd,gBAAgD,EAChD;EACAD,iCAAiC,CAACC,gBAAgB,CAAC;EAEnD,MAAMe,2BAA2B,GAAGA,CAAA,KAAM;IACxC,OAAOF,cAAc,CAACE,2BAA2B,CAACD,uBAAuB,CAAC;EAC5E,CAAC;EAED,OAAO;IAAEC;EAA4B,CAAC;AACxC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js new file mode 100644 index 0000000..a73a4c3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js @@ -0,0 +1,25 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MerchantCardValidationConfig = void 0; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +class MerchantCardValidationConfig { + constructor({ + validationListener, + enablePanFormatting = false, + acceptedCardBrands = [] + }) { + _defineProperty(this, "enablePanFormatting", void 0); + _defineProperty(this, "acceptedCardBrands", void 0); + _defineProperty(this, "validationListener", void 0); + this.enablePanFormatting = enablePanFormatting; + this.validationListener = validationListener; + this.acceptedCardBrands = acceptedCardBrands; + } +} +exports.MerchantCardValidationConfig = MerchantCardValidationConfig; +//# sourceMappingURL=MerchantCardValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js.map new file mode 100644 index 0000000..960e6d0 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCardValidationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCardValidationConfig","constructor","validationListener","enablePanFormatting","acceptedCardBrands","_defineProperty","exports"],"sources":["MerchantCardValidationConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../index';\n\nexport class MerchantCardValidationConfig {\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n validationListener?: CardValidationEventListener;\n\n constructor({\n validationListener,\n enablePanFormatting = false,\n acceptedCardBrands = [],\n }: MerchantCardValidationConfig) {\n this.enablePanFormatting = enablePanFormatting;\n this.validationListener = validationListener;\n this.acceptedCardBrands = acceptedCardBrands;\n }\n}\n"],"mappings":";;;;;;;;;AAEO,MAAMA,4BAA4B,CAAC;EAKxCC,WAAWA,CAAC;IACVC,kBAAkB;IAClBC,mBAAmB,GAAG,KAAK;IAC3BC,kBAAkB,GAAG;EACO,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAC/B,IAAI,CAACF,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAI,CAACD,kBAAkB,GAAGA,kBAAkB;IAC5C,IAAI,CAACE,kBAAkB,GAAGA,kBAAkB;EAC9C;AACF;AAACE,OAAA,CAAAN,4BAAA,GAAAA,4BAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js new file mode 100644 index 0000000..2dc751d --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js @@ -0,0 +1,19 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.MerchantCvcOnlyValidationConfig = void 0; +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +class MerchantCvcOnlyValidationConfig { + constructor({ + validationListener + }) { + _defineProperty(this, "validationListener", void 0); + this.validationListener = validationListener; + } +} +exports.MerchantCvcOnlyValidationConfig = MerchantCvcOnlyValidationConfig; +//# sourceMappingURL=MerchantCvcOnlyValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js.map new file mode 100644 index 0000000..bfd22c8 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/MerchantCvcOnlyValidationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCvcOnlyValidationConfig","constructor","validationListener","_defineProperty","exports"],"sources":["MerchantCvcOnlyValidationConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../index';\n\nexport class MerchantCvcOnlyValidationConfig {\n validationListener?: CardValidationEventListener;\n\n constructor({ validationListener }: MerchantCvcOnlyValidationConfig) {\n this.validationListener = validationListener;\n }\n}\n"],"mappings":";;;;;;;;;AAEO,MAAMA,+BAA+B,CAAC;EAG3CC,WAAWA,CAAC;IAAEC;EAAoD,CAAC,EAAE;IAAAC,eAAA;IACnE,IAAI,CAACD,kBAAkB,GAAGA,kBAAkB;EAC9C;AACF;AAACE,OAAA,CAAAJ,+BAAA,GAAAA,+BAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js b/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js new file mode 100644 index 0000000..d0a87e3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ValidationListenerException = void 0; +class ValidationListenerException extends Error { + constructor() { + super(); + this.name = 'ValidationListenerError'; + this.message = `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.`; + } +} +exports.ValidationListenerException = ValidationListenerException; +//# sourceMappingURL=ValidationListenerException.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js.map b/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js.map new file mode 100644 index 0000000..70ba54d --- /dev/null +++ b/access-checkout-react-native-sdk/lib/commonjs/validation/ValidationListenerException.js.map @@ -0,0 +1 @@ +{"version":3,"names":["ValidationListenerException","Error","constructor","name","message","exports"],"sources":["ValidationListenerException.ts"],"sourcesContent":["export class ValidationListenerException extends Error {\n constructor() {\n super();\n this.name = 'ValidationListenerError';\n this.message = `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.`;\n }\n}\n"],"mappings":";;;;;;AAAO,MAAMA,2BAA2B,SAASC,KAAK,CAAC;EACrDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,IAAI,GAAG,yBAAyB;IACrC,IAAI,CAACC,OAAO,GAAI,6IAA4I;EAC9J;AACF;AAACC,OAAA,CAAAL,2BAAA,GAAAA,2BAAA"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/AccessCheckout.js b/access-checkout-react-native-sdk/lib/module/AccessCheckout.js index 4c35852..f321247 100644 --- a/access-checkout-react-native-sdk/lib/module/AccessCheckout.js +++ b/access-checkout-react-native-sdk/lib/module/AccessCheckout.js @@ -1,15 +1,7 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } import { AccessCheckoutReactNative } from './AccessCheckoutReactNative'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore export default class AccessCheckout { constructor({ baseUrl, @@ -21,18 +13,18 @@ export default class AccessCheckout { this.baseUrl = baseUrl; this.merchantId = merchantId; } - generateSessions(cardDetails, sessionTypes) { + generateSessions(sessionGenerationConfig, sessionTypes) { return new Promise((resolve, reject) => { AccessCheckoutReactNative.generateSessions({ baseUrl: this.baseUrl, merchantId: this.merchantId, - panValue: cardDetails.pan, - expiryDateValue: cardDetails.expiryDate, - cvcValue: cardDetails.cvc, + panId: sessionGenerationConfig.panId, + expiryDateId: sessionGenerationConfig.expiryDateId, + cvcId: sessionGenerationConfig.cvcId, sessionTypes, reactNativeSdkVersion: this.ReactNativeSdkVersion }) - // eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier + // eslint-disable-next-line @typescript-eslint/no-explicit-any .then(bridgeSessions => { const sessions = {}; if (bridgeSessions.card) { diff --git a/access-checkout-react-native-sdk/lib/module/AccessCheckout.js.map b/access-checkout-react-native-sdk/lib/module/AccessCheckout.js.map index 58d47d2..92c8e0b 100644 --- a/access-checkout-react-native-sdk/lib/module/AccessCheckout.js.map +++ b/access-checkout-react-native-sdk/lib/module/AccessCheckout.js.map @@ -1 +1 @@ -{"version":3,"names":["AccessCheckoutReactNative","AccessCheckout","constructor","baseUrl","merchantId","_defineProperty","generateSessions","cardDetails","sessionTypes","Promise","resolve","reject","panValue","pan","expiryDateValue","expiryDate","cvcValue","cvc","reactNativeSdkVersion","ReactNativeSdkVersion","then","bridgeSessions","sessions","card","catch","error","initialiseCardValidation","validationConfig","panId","expiryDateId","cvcId","enablePanFormatting","acceptedCardBrands","initialiseCvcOnlyValidation"],"sources":["AccessCheckout.tsx"],"sourcesContent":["import { AccessCheckoutReactNative } from './AccessCheckoutReactNative';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardDetails from './session/CardDetails';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Sessions from './session/Sessions';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardValidationConfig from './validation/CardValidationConfig';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CvcOnlyValidationConfig from './validation/CvcOnlyValidationConfig';\n\nexport default class AccessCheckout {\n private readonly ReactNativeSdkVersion = '2.0.1';\n static readonly CardValidationEventType = 'AccessCheckoutCardValidationEvent';\n static readonly CvcOnlyValidationEventType =\n 'AccessCheckoutCvcOnlyValidationEvent';\n\n baseUrl: string;\n merchantId?: string;\n\n constructor({\n baseUrl,\n merchantId,\n }: {\n baseUrl: string;\n merchantId?: string;\n }) {\n this.baseUrl = baseUrl;\n this.merchantId = merchantId;\n }\n\n generateSessions(\n cardDetails: CardDetails,\n sessionTypes: string[]\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.generateSessions({\n baseUrl: this.baseUrl,\n merchantId: this.merchantId,\n panValue: cardDetails.pan,\n expiryDateValue: cardDetails.expiryDate,\n cvcValue: cardDetails.cvc,\n sessionTypes,\n reactNativeSdkVersion: this.ReactNativeSdkVersion,\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier\n .then((bridgeSessions: any) => {\n const sessions: Sessions = {};\n if (bridgeSessions.card) {\n sessions.card = bridgeSessions.card;\n }\n if (bridgeSessions.cvc) {\n sessions.cvc = bridgeSessions.cvc;\n }\n\n resolve(sessions);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCardValidation(\n validationConfig: CardValidationConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCardValidation({\n baseUrl: this.baseUrl,\n panId: validationConfig.panId,\n expiryDateId: validationConfig.expiryDateId,\n cvcId: validationConfig.cvcId,\n enablePanFormatting: validationConfig.enablePanFormatting,\n acceptedCardBrands: validationConfig.acceptedCardBrands,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCvcOnlyValidation(\n validationConfig: CvcOnlyValidationConfig\n ): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCvcOnlyValidation({\n cvcId: validationConfig.cvcId,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n}\n"],"mappings":";;;AAAA,SAASA,yBAAyB,QAAQ,6BAA6B;AACvE;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA;AAGA,eAAe,MAAMC,cAAc,CAAC;EASlCC,WAAWA,CAAC;IACVC,OAAO;IACPC;EAIF,CAAC,EAAE;IAAAC,eAAA,gCAdsC,OAAO;IAAAA,eAAA;IAAAA,eAAA;IAe9C,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAE,gBAAgBA,CACdC,WAAwB,EACxBC,YAAsB,EACH;IACnB,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAACM,gBAAgB,CAAC;QACzCH,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBC,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3BQ,QAAQ,EAAEL,WAAW,CAACM,GAAG;QACzBC,eAAe,EAAEP,WAAW,CAACQ,UAAU;QACvCC,QAAQ,EAAET,WAAW,CAACU,GAAG;QACzBT,YAAY;QACZU,qBAAqB,EAAE,IAAI,CAACC;MAC9B,CAAC;MACC;MAAA,CACCC,IAAI,CAAEC,cAAmB,IAAK;QAC7B,MAAMC,QAAkB,GAAG,CAAC,CAAC;QAC7B,IAAID,cAAc,CAACE,IAAI,EAAE;UACvBD,QAAQ,CAACC,IAAI,GAAGF,cAAc,CAACE,IAAI;QACrC;QACA,IAAIF,cAAc,CAACJ,GAAG,EAAE;UACtBK,QAAQ,CAACL,GAAG,GAAGI,cAAc,CAACJ,GAAG;QACnC;QAEAP,OAAO,CAACY,QAAQ,CAAC;MACnB,CAAC;MACD;MAAA,CACCE,KAAK,CAAEC,KAAU,IAAK;QACrBd,MAAM,CAACc,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAC,wBAAwBA,CACtBC,gBAAsC,EACpB;IAClB,OAAO,IAAIlB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAAC0B,wBAAwB,CAAC;QACjDvB,OAAO,EAAE,IAAI,CAACA,OAAO;QACrByB,KAAK,EAAED,gBAAgB,CAACC,KAAK;QAC7BC,YAAY,EAAEF,gBAAgB,CAACE,YAAY;QAC3CC,KAAK,EAAEH,gBAAgB,CAACG,KAAK;QAC7BC,mBAAmB,EAAEJ,gBAAgB,CAACI,mBAAmB;QACzDC,kBAAkB,EAAEL,gBAAgB,CAACK;MACvC,CAAC,CAAC,CACCZ,IAAI,CAAC,MAAM;QACVV,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCc,KAAK,CAAEC,KAAU,IAAK;QACrBd,MAAM,CAACc,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAQ,2BAA2BA,CACzBN,gBAAyC,EACvB;IAClB,OAAO,IAAIlB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAACiC,2BAA2B,CAAC;QACpDH,KAAK,EAAEH,gBAAgB,CAACG;MAC1B,CAAC,CAAC,CACCV,IAAI,CAAC,MAAM;QACVV,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCc,KAAK,CAAEC,KAAU,IAAK;QACrBd,MAAM,CAACc,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;AACF;AAACpB,eAAA,CA3FoBJ,cAAc,6BAES,mCAAmC;AAAAI,eAAA,CAF1DJ,cAAc,gCAI/B,sCAAsC"} \ No newline at end of file +{"version":3,"names":["AccessCheckoutReactNative","AccessCheckout","constructor","baseUrl","merchantId","_defineProperty","generateSessions","sessionGenerationConfig","sessionTypes","Promise","resolve","reject","panId","expiryDateId","cvcId","reactNativeSdkVersion","ReactNativeSdkVersion","then","bridgeSessions","sessions","card","cvc","catch","error","initialiseCardValidation","validationConfig","enablePanFormatting","acceptedCardBrands","initialiseCvcOnlyValidation"],"sources":["AccessCheckout.tsx"],"sourcesContent":["import { AccessCheckoutReactNative } from './AccessCheckoutReactNative';\nimport type SessionGenerationConfig from './session/SessionGenerationConfig';\nimport type Sessions from './session/Sessions';\n\ninterface InitialiseCardValidationConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n}\ninterface InitialiseCvcOnlyValidationConfig {\n cvcId: string;\n}\nexport default class AccessCheckout {\n private readonly ReactNativeSdkVersion = '2.0.1';\n static readonly CardValidationEventType = 'AccessCheckoutCardValidationEvent';\n static readonly CvcOnlyValidationEventType = 'AccessCheckoutCvcOnlyValidationEvent';\n\n baseUrl: string;\n merchantId?: string;\n\n constructor({ baseUrl, merchantId }: { baseUrl: string; merchantId?: string }) {\n this.baseUrl = baseUrl;\n this.merchantId = merchantId;\n }\n\n generateSessions(sessionGenerationConfig: SessionGenerationConfig, sessionTypes: string[]): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.generateSessions({\n baseUrl: this.baseUrl,\n merchantId: this.merchantId,\n panId: sessionGenerationConfig.panId,\n expiryDateId: sessionGenerationConfig.expiryDateId,\n cvcId: sessionGenerationConfig.cvcId,\n sessionTypes,\n reactNativeSdkVersion: this.ReactNativeSdkVersion,\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .then((bridgeSessions: any) => {\n const sessions: Sessions = {};\n if (bridgeSessions.card) {\n sessions.card = bridgeSessions.card;\n }\n if (bridgeSessions.cvc) {\n sessions.cvc = bridgeSessions.cvc;\n }\n\n resolve(sessions);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCardValidation(validationConfig: InitialiseCardValidationConfig): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCardValidation({\n baseUrl: this.baseUrl,\n panId: validationConfig.panId,\n expiryDateId: validationConfig.expiryDateId,\n cvcId: validationConfig.cvcId,\n enablePanFormatting: validationConfig.enablePanFormatting,\n acceptedCardBrands: validationConfig.acceptedCardBrands,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n\n initialiseCvcOnlyValidation(validationConfig: InitialiseCvcOnlyValidationConfig): Promise {\n return new Promise((resolve, reject) => {\n AccessCheckoutReactNative.initialiseCvcOnlyValidation({\n cvcId: validationConfig.cvcId,\n })\n .then(() => {\n resolve(true);\n })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .catch((error: any) => {\n reject(error);\n });\n });\n }\n}\n"],"mappings":";;;AAAA,SAASA,yBAAyB,QAAQ,6BAA6B;AAcvE,eAAe,MAAMC,cAAc,CAAC;EAQlCC,WAAWA,CAAC;IAAEC,OAAO;IAAEC;EAAqD,CAAC,EAAE;IAAAC,eAAA,gCAPtC,OAAO;IAAAA,eAAA;IAAAA,eAAA;IAQ9C,IAAI,CAACF,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,UAAU,GAAGA,UAAU;EAC9B;EAEAE,gBAAgBA,CAACC,uBAAgD,EAAEC,YAAsB,EAAqB;IAC5G,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAACM,gBAAgB,CAAC;QACzCH,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBC,UAAU,EAAE,IAAI,CAACA,UAAU;QAC3BQ,KAAK,EAAEL,uBAAuB,CAACK,KAAK;QACpCC,YAAY,EAAEN,uBAAuB,CAACM,YAAY;QAClDC,KAAK,EAAEP,uBAAuB,CAACO,KAAK;QACpCN,YAAY;QACZO,qBAAqB,EAAE,IAAI,CAACC;MAC9B,CAAC;MACC;MAAA,CACCC,IAAI,CAAEC,cAAmB,IAAK;QAC7B,MAAMC,QAAkB,GAAG,CAAC,CAAC;QAC7B,IAAID,cAAc,CAACE,IAAI,EAAE;UACvBD,QAAQ,CAACC,IAAI,GAAGF,cAAc,CAACE,IAAI;QACrC;QACA,IAAIF,cAAc,CAACG,GAAG,EAAE;UACtBF,QAAQ,CAACE,GAAG,GAAGH,cAAc,CAACG,GAAG;QACnC;QAEAX,OAAO,CAACS,QAAQ,CAAC;MACnB,CAAC;MACD;MAAA,CACCG,KAAK,CAAEC,KAAU,IAAK;QACrBZ,MAAM,CAACY,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAC,wBAAwBA,CAACC,gBAAgD,EAAoB;IAC3F,OAAO,IAAIhB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAACwB,wBAAwB,CAAC;QACjDrB,OAAO,EAAE,IAAI,CAACA,OAAO;QACrBS,KAAK,EAAEa,gBAAgB,CAACb,KAAK;QAC7BC,YAAY,EAAEY,gBAAgB,CAACZ,YAAY;QAC3CC,KAAK,EAAEW,gBAAgB,CAACX,KAAK;QAC7BY,mBAAmB,EAAED,gBAAgB,CAACC,mBAAmB;QACzDC,kBAAkB,EAAEF,gBAAgB,CAACE;MACvC,CAAC,CAAC,CACCV,IAAI,CAAC,MAAM;QACVP,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCY,KAAK,CAAEC,KAAU,IAAK;QACrBZ,MAAM,CAACY,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;EAEAK,2BAA2BA,CAACH,gBAAmD,EAAoB;IACjG,OAAO,IAAIhB,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;MACtCX,yBAAyB,CAAC4B,2BAA2B,CAAC;QACpDd,KAAK,EAAEW,gBAAgB,CAACX;MAC1B,CAAC,CAAC,CACCG,IAAI,CAAC,MAAM;QACVP,OAAO,CAAC,IAAI,CAAC;MACf,CAAC;MACD;MAAA,CACCY,KAAK,CAAEC,KAAU,IAAK;QACrBZ,MAAM,CAACY,KAAK,CAAC;MACf,CAAC,CAAC;IACN,CAAC,CAAC;EACJ;AACF;AAAClB,eAAA,CA7EoBJ,cAAc,6BAES,mCAAmC;AAAAI,eAAA,CAF1DJ,cAAc,gCAGY,sCAAsC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js b/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js new file mode 100644 index 0000000..e2bc8d9 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js @@ -0,0 +1,21 @@ +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +export default class MerchantCardConfig { + constructor({ + panId, + expiryDateId, + cvcId, + validationConfig + }) { + _defineProperty(this, "panId", void 0); + _defineProperty(this, "expiryDateId", void 0); + _defineProperty(this, "cvcId", void 0); + _defineProperty(this, "validationConfig", void 0); + this.panId = panId; + this.expiryDateId = expiryDateId; + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} +//# sourceMappingURL=MerchantCardConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js.map b/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js.map new file mode 100644 index 0000000..5ff9320 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/config/MerchantCardConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCardConfig","constructor","panId","expiryDateId","cvcId","validationConfig","_defineProperty"],"sources":["MerchantCardConfig.ts"],"sourcesContent":["import type { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig';\n\nexport default class MerchantCardConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n validationConfig?: MerchantCardValidationConfig;\n\n constructor({ panId, expiryDateId, cvcId, validationConfig }: MerchantCardConfig) {\n this.panId = panId;\n this.expiryDateId = expiryDateId;\n this.cvcId = cvcId;\n this.validationConfig = validationConfig;\n }\n}\n"],"mappings":";;;AAEA,eAAe,MAAMA,kBAAkB,CAAC;EAMtCC,WAAWA,CAAC;IAAEC,KAAK;IAAEC,YAAY;IAAEC,KAAK;IAAEC;EAAqC,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAChF,IAAI,CAACJ,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;EAC1C;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js b/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js new file mode 100644 index 0000000..d521098 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js @@ -0,0 +1,15 @@ +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +export default class MerchantCvcOnlyConfig { + constructor({ + cvcId, + validationConfig + }) { + _defineProperty(this, "cvcId", void 0); + _defineProperty(this, "validationConfig", void 0); + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} +//# sourceMappingURL=MerchantCvcOnlyConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js.map b/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js.map new file mode 100644 index 0000000..a56dcf3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/config/MerchantCvcOnlyConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCvcOnlyConfig","constructor","cvcId","validationConfig","_defineProperty"],"sources":["MerchantCvcOnlyConfig.ts"],"sourcesContent":["import type { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig';\n\nexport default class MerchantCvcOnlyConfig {\n cvcId: string;\n validationConfig?: MerchantCvcOnlyValidationConfig;\n\n constructor({ cvcId, validationConfig }: MerchantCvcOnlyConfig) {\n this.cvcId = cvcId;\n this.validationConfig = validationConfig;\n }\n}\n"],"mappings":";;;AAEA,eAAe,MAAMA,qBAAqB,CAAC;EAIzCC,WAAWA,CAAC;IAAEC,KAAK;IAAEC;EAAwC,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAC9D,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,gBAAgB,GAAGA,gBAAgB;EAC1C;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js b/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js new file mode 100644 index 0000000..7e44cfa --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js @@ -0,0 +1,64 @@ +import { AccessCheckout, CardConfig } from '../index'; +import { useCardValidation } from './useCardValidation'; +import { useCvcOnlyValidation } from './useCvcOnlyValidation'; +export const useAccessCheckout = ({ + baseUrl, + checkoutId, + config +}) => { + const accessCheckout = new AccessCheckout({ + baseUrl: baseUrl, + merchantId: checkoutId + }); + + /** + * Implementation note: Decided to use classes to benefit from instance checking. + * If using interfaces or types a "type guard" could have been used. the trade off being having to check for + * a specific property that would be unique to that interface/type which in theory it introduces another point of + * failure if the property was to be renamed and not updated in the type guard. + */ + if (config instanceof CardConfig) { + var _config$validationCon, _config$validationCon2, _config$validationCon3; + const { + initialiseCardValidation + } = useCardValidation({ + accessCheckout, + cardValidationConfig: { + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId, + enablePanFormatting: (_config$validationCon = config.validationConfig) === null || _config$validationCon === void 0 ? void 0 : _config$validationCon.enablePanFormatting, + acceptedCardBrands: (_config$validationCon2 = config.validationConfig) === null || _config$validationCon2 === void 0 ? void 0 : _config$validationCon2.acceptedCardBrands + }, + validationListener: (_config$validationCon3 = config.validationConfig) === null || _config$validationCon3 === void 0 ? void 0 : _config$validationCon3.validationListener + }); + const generateSessions = sessionTypes => accessCheckout.generateSessions({ + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId + }, sessionTypes); + return { + initialiseValidation: initialiseCardValidation, + generateSessions + }; + } else { + var _config$validationCon4; + const { + initialiseCvcOnlyValidation + } = useCvcOnlyValidation({ + accessCheckout, + cvcOnlyValidationConfig: { + cvcId: config.cvcId + }, + validationListener: (_config$validationCon4 = config.validationConfig) === null || _config$validationCon4 === void 0 ? void 0 : _config$validationCon4.validationListener + }); + const generateCvcOnlySession = sessionTypes => accessCheckout.generateSessions({ + cvcId: config.cvcId + }, sessionTypes); + return { + initialiseValidation: initialiseCvcOnlyValidation, + generateSessions: generateCvcOnlySession + }; + } +}; +//# sourceMappingURL=useAccessCheckout.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js.map b/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js.map new file mode 100644 index 0000000..50e3990 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useAccessCheckout.js.map @@ -0,0 +1 @@ +{"version":3,"names":["AccessCheckout","CardConfig","useCardValidation","useCvcOnlyValidation","useAccessCheckout","baseUrl","checkoutId","config","accessCheckout","merchantId","_config$validationCon","_config$validationCon2","_config$validationCon3","initialiseCardValidation","cardValidationConfig","panId","expiryDateId","cvcId","enablePanFormatting","validationConfig","acceptedCardBrands","validationListener","generateSessions","sessionTypes","initialiseValidation","_config$validationCon4","initialiseCvcOnlyValidation","cvcOnlyValidationConfig","generateCvcOnlySession"],"sources":["useAccessCheckout.ts"],"sourcesContent":["import {\n AccessCheckout,\n CardConfig,\n type CardValidationEventListener,\n CvcOnlyConfig,\n CvcOnlyValidationEventListener,\n Sessions,\n} from '../index';\nimport { useCardValidation } from './useCardValidation';\nimport { useCvcOnlyValidation } from './useCvcOnlyValidation';\n\nexport interface UseAccessCheckoutExports {\n initialiseValidation: () => Promise;\n generateSessions: (sessionTypes: string[]) => Promise;\n}\n\nexport interface UseAccessCheckout {\n baseUrl: string;\n checkoutId: string;\n config: CardConfig | CvcOnlyConfig;\n}\n\nexport const useAccessCheckout = ({ baseUrl, checkoutId, config }: UseAccessCheckout): UseAccessCheckoutExports => {\n const accessCheckout = new AccessCheckout({\n baseUrl: baseUrl,\n merchantId: checkoutId,\n });\n\n /**\n * Implementation note: Decided to use classes to benefit from instance checking.\n * If using interfaces or types a \"type guard\" could have been used. the trade off being having to check for\n * a specific property that would be unique to that interface/type which in theory it introduces another point of\n * failure if the property was to be renamed and not updated in the type guard.\n */\n if (config instanceof CardConfig) {\n const { initialiseCardValidation } = useCardValidation({\n accessCheckout,\n cardValidationConfig: {\n panId: config.panId,\n expiryDateId: config.expiryDateId,\n cvcId: config.cvcId,\n enablePanFormatting: config.validationConfig?.enablePanFormatting,\n acceptedCardBrands: config.validationConfig?.acceptedCardBrands,\n },\n validationListener: config.validationConfig?.validationListener as CardValidationEventListener,\n });\n\n const generateSessions = (sessionTypes: string[]) =>\n accessCheckout.generateSessions(\n {\n panId: config.panId,\n expiryDateId: config.expiryDateId,\n cvcId: config.cvcId,\n },\n sessionTypes\n );\n\n return {\n initialiseValidation: initialiseCardValidation,\n generateSessions,\n };\n } else {\n const { initialiseCvcOnlyValidation } = useCvcOnlyValidation({\n accessCheckout,\n cvcOnlyValidationConfig: { cvcId: config.cvcId },\n validationListener: config.validationConfig?.validationListener as CvcOnlyValidationEventListener,\n });\n\n const generateCvcOnlySession = (sessionTypes: string[]) =>\n accessCheckout.generateSessions(\n {\n cvcId: config.cvcId,\n },\n sessionTypes\n );\n\n return {\n initialiseValidation: initialiseCvcOnlyValidation,\n generateSessions: generateCvcOnlySession,\n };\n }\n};\n"],"mappings":"AAAA,SACEA,cAAc,EACdC,UAAU,QAKL,UAAU;AACjB,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,oBAAoB,QAAQ,wBAAwB;AAa7D,OAAO,MAAMC,iBAAiB,GAAGA,CAAC;EAAEC,OAAO;EAAEC,UAAU;EAAEC;AAA0B,CAAC,KAA+B;EACjH,MAAMC,cAAc,GAAG,IAAIR,cAAc,CAAC;IACxCK,OAAO,EAAEA,OAAO;IAChBI,UAAU,EAAEH;EACd,CAAC,CAAC;;EAEF;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,MAAM,YAAYN,UAAU,EAAE;IAAA,IAAAS,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAChC,MAAM;MAAEC;IAAyB,CAAC,GAAGX,iBAAiB,CAAC;MACrDM,cAAc;MACdM,oBAAoB,EAAE;QACpBC,KAAK,EAAER,MAAM,CAACQ,KAAK;QACnBC,YAAY,EAAET,MAAM,CAACS,YAAY;QACjCC,KAAK,EAAEV,MAAM,CAACU,KAAK;QACnBC,mBAAmB,GAAAR,qBAAA,GAAEH,MAAM,CAACY,gBAAgB,cAAAT,qBAAA,uBAAvBA,qBAAA,CAAyBQ,mBAAmB;QACjEE,kBAAkB,GAAAT,sBAAA,GAAEJ,MAAM,CAACY,gBAAgB,cAAAR,sBAAA,uBAAvBA,sBAAA,CAAyBS;MAC/C,CAAC;MACDC,kBAAkB,GAAAT,sBAAA,GAAEL,MAAM,CAACY,gBAAgB,cAAAP,sBAAA,uBAAvBA,sBAAA,CAAyBS;IAC/C,CAAC,CAAC;IAEF,MAAMC,gBAAgB,GAAIC,YAAsB,IAC9Cf,cAAc,CAACc,gBAAgB,CAC7B;MACEP,KAAK,EAAER,MAAM,CAACQ,KAAK;MACnBC,YAAY,EAAET,MAAM,CAACS,YAAY;MACjCC,KAAK,EAAEV,MAAM,CAACU;IAChB,CAAC,EACDM,YACF,CAAC;IAEH,OAAO;MACLC,oBAAoB,EAAEX,wBAAwB;MAC9CS;IACF,CAAC;EACH,CAAC,MAAM;IAAA,IAAAG,sBAAA;IACL,MAAM;MAAEC;IAA4B,CAAC,GAAGvB,oBAAoB,CAAC;MAC3DK,cAAc;MACdmB,uBAAuB,EAAE;QAAEV,KAAK,EAAEV,MAAM,CAACU;MAAM,CAAC;MAChDI,kBAAkB,GAAAI,sBAAA,GAAElB,MAAM,CAACY,gBAAgB,cAAAM,sBAAA,uBAAvBA,sBAAA,CAAyBJ;IAC/C,CAAC,CAAC;IAEF,MAAMO,sBAAsB,GAAIL,YAAsB,IACpDf,cAAc,CAACc,gBAAgB,CAC7B;MACEL,KAAK,EAAEV,MAAM,CAACU;IAChB,CAAC,EACDM,YACF,CAAC;IAEH,OAAO;MACLC,oBAAoB,EAAEE,2BAA2B;MACjDJ,gBAAgB,EAAEM;IACpB,CAAC;EACH;AACF,CAAC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js b/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js new file mode 100644 index 0000000..c11d860 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js @@ -0,0 +1,18 @@ +import { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig'; +import MerchantCardConfig from '../config/MerchantCardConfig'; +export const useCardConfig = props => { + const cardConfig = new MerchantCardConfig({ + panId: props.panId, + expiryDateId: props.expiryDateId, + cvcId: props.cvcId + }); + if (props.validationConfig) { + cardConfig.validationConfig = new MerchantCardValidationConfig({ + acceptedCardBrands: props.validationConfig.acceptedCardBrands, + enablePanFormatting: props.validationConfig.enablePanFormatting, + validationListener: props.validationConfig.validationListener + }); + } + return cardConfig; +}; +//# sourceMappingURL=useCardConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js.map b/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js.map new file mode 100644 index 0000000..9bc4aed --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCardConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCardValidationConfig","MerchantCardConfig","useCardConfig","props","cardConfig","panId","expiryDateId","cvcId","validationConfig","acceptedCardBrands","enablePanFormatting","validationListener"],"sources":["useCardConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../validation/CardValidationEventListener';\nimport { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig';\nimport MerchantCardConfig from '../config/MerchantCardConfig';\n\nexport interface CardValidationConfig {\n acceptedCardBrands?: string[];\n enablePanFormatting?: boolean;\n validationListener: CardValidationEventListener;\n}\nexport interface UseCardConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n validationConfig?: CardValidationConfig;\n}\n\nexport const useCardConfig = (props: UseCardConfig): MerchantCardConfig => {\n const cardConfig = new MerchantCardConfig({\n panId: props.panId,\n expiryDateId: props.expiryDateId,\n cvcId: props.cvcId,\n });\n\n if (props.validationConfig) {\n cardConfig.validationConfig = new MerchantCardValidationConfig({\n acceptedCardBrands: props.validationConfig.acceptedCardBrands,\n enablePanFormatting: props.validationConfig.enablePanFormatting,\n validationListener: props.validationConfig.validationListener,\n });\n }\n\n return cardConfig;\n};\n"],"mappings":"AACA,SAASA,4BAA4B,QAAQ,4CAA4C;AACzF,OAAOC,kBAAkB,MAAM,8BAA8B;AAc7D,OAAO,MAAMC,aAAa,GAAIC,KAAoB,IAAyB;EACzE,MAAMC,UAAU,GAAG,IAAIH,kBAAkB,CAAC;IACxCI,KAAK,EAAEF,KAAK,CAACE,KAAK;IAClBC,YAAY,EAAEH,KAAK,CAACG,YAAY;IAChCC,KAAK,EAAEJ,KAAK,CAACI;EACf,CAAC,CAAC;EAEF,IAAIJ,KAAK,CAACK,gBAAgB,EAAE;IAC1BJ,UAAU,CAACI,gBAAgB,GAAG,IAAIR,4BAA4B,CAAC;MAC7DS,kBAAkB,EAAEN,KAAK,CAACK,gBAAgB,CAACC,kBAAkB;MAC7DC,mBAAmB,EAAEP,KAAK,CAACK,gBAAgB,CAACE,mBAAmB;MAC/DC,kBAAkB,EAAER,KAAK,CAACK,gBAAgB,CAACG;IAC7C,CAAC,CAAC;EACJ;EAEA,OAAOP,UAAU;AACnB,CAAC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js b/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js new file mode 100644 index 0000000..e35bed8 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js @@ -0,0 +1,48 @@ +import { useEffect } from 'react'; +import { NativeEventEmitter } from 'react-native'; +import AccessCheckout from '../AccessCheckout'; +import AccessCheckoutReactNative from '../AccessCheckoutReactNative'; +import { cardValidationNativeEventListenerOf } from '../validation/CardValidationEventListener'; +import { ValidationListenerException } from '../validation/ValidationListenerException'; +export function useCardValidationEventListener(validationListener) { + useEffect(() => { + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + const nativeEventListener = cardValidationNativeEventListenerOf(validationListener); + const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); + const eventSubscription = nativeEventEmitter.addListener(AccessCheckout.CardValidationEventType, nativeEventListener); + return () => { + eventSubscription.remove(); + }; + }, []); +} +export function useCardValidation({ + accessCheckout, + cardValidationConfig, + validationListener +}) { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCardValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCardValidationEventListener(validationListener); + const initialiseCardValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCardValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new ValidationListenerException(); + } + return accessCheckout.initialiseCardValidation(cardValidationConfig); + }; + return { + initialiseCardValidation + }; +} +//# sourceMappingURL=useCardValidation.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js.map b/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js.map new file mode 100644 index 0000000..58f61dd --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCardValidation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["useEffect","NativeEventEmitter","AccessCheckout","AccessCheckoutReactNative","cardValidationNativeEventListenerOf","ValidationListenerException","useCardValidationEventListener","validationListener","nativeEventListener","nativeEventEmitter","eventSubscription","addListener","CardValidationEventType","remove","useCardValidation","accessCheckout","cardValidationConfig","initialiseCardValidation"],"sources":["useCardValidation.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckout from '../AccessCheckout';\nimport AccessCheckoutReactNative from '../AccessCheckoutReactNative';\nimport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from '../validation/CardValidationEventListener';\nimport { ValidationListenerException } from '../validation/ValidationListenerException';\n\nexport function useCardValidationEventListener(validationListener: CardValidationEventListener) {\n useEffect(() => {\n //Safe-guard in the case where no validation listener was configured we avoid registering the native listener\n if (!validationListener) {\n return;\n }\n\n const nativeEventListener = cardValidationNativeEventListenerOf(validationListener);\n const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative);\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CardValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\ninterface UseCardValidationHook {\n accessCheckout: AccessCheckout;\n cardValidationConfig: {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n };\n validationListener: CardValidationEventListener;\n}\n\nexport function useCardValidation({ accessCheckout, cardValidationConfig, validationListener }: UseCardValidationHook) {\n /*\n Implementation Note: To allow the hook to render and use hooks correctly:\n `useCardValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener\n was provided in order to register the native event.\n */\n useCardValidationEventListener(validationListener);\n\n const initialiseCardValidation = () => {\n /*\n Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional.\n We added a safe-guard that will raise a ValidationListenerException which prevents the\n `initialiseCardValidation` method from being called when no validationConfig is provided.\n This provides the developers with a clear readable error message and enhances their debugging experience.\n */\n if (!validationListener) {\n throw new ValidationListenerException();\n }\n return accessCheckout.initialiseCardValidation(cardValidationConfig);\n };\n\n return { initialiseCardValidation };\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,kBAAkB,QAAQ,cAAc;AACjD,OAAOC,cAAc,MAAM,mBAAmB;AAC9C,OAAOC,yBAAyB,MAAM,8BAA8B;AACpE,SAEEC,mCAAmC,QAC9B,2CAA2C;AAClD,SAASC,2BAA2B,QAAQ,2CAA2C;AAEvF,OAAO,SAASC,8BAA8BA,CAACC,kBAA+C,EAAE;EAC9FP,SAAS,CAAC,MAAM;IACd;IACA,IAAI,CAACO,kBAAkB,EAAE;MACvB;IACF;IAEA,MAAMC,mBAAmB,GAAGJ,mCAAmC,CAACG,kBAAkB,CAAC;IACnF,MAAME,kBAAkB,GAAG,IAAIR,kBAAkB,CAACE,yBAAyB,CAAC;IAE5E,MAAMO,iBAAiB,GAAGD,kBAAkB,CAACE,WAAW,CACtDT,cAAc,CAACU,uBAAuB,EACtCJ,mBACF,CAAC;IAED,OAAO,MAAM;MACXE,iBAAiB,CAACG,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAcA,OAAO,SAASC,iBAAiBA,CAAC;EAAEC,cAAc;EAAEC,oBAAoB;EAAET;AAA0C,CAAC,EAAE;EACrH;AACF;AACA;AACA;AACA;EACED,8BAA8B,CAACC,kBAAkB,CAAC;EAElD,MAAMU,wBAAwB,GAAGA,CAAA,KAAM;IACrC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACV,kBAAkB,EAAE;MACvB,MAAM,IAAIF,2BAA2B,CAAC,CAAC;IACzC;IACA,OAAOU,cAAc,CAACE,wBAAwB,CAACD,oBAAoB,CAAC;EACtE,CAAC;EAED,OAAO;IAAEC;EAAyB,CAAC;AACrC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js new file mode 100644 index 0000000..35f9f58 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js @@ -0,0 +1,17 @@ +import MerchantCvcOnlyConfig from '../config/MerchantCvcOnlyConfig'; +import { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig'; +export function useCvcOnlyConfig({ + cvcId, + validationConfig +}) { + const cardConfig = new MerchantCvcOnlyConfig({ + cvcId + }); + if (validationConfig) { + cardConfig.validationConfig = new MerchantCvcOnlyValidationConfig({ + validationListener: validationConfig.validationListener + }); + } + return cardConfig; +} +//# sourceMappingURL=useCvcOnlyConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js.map b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js.map new file mode 100644 index 0000000..897f175 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCvcOnlyConfig","MerchantCvcOnlyValidationConfig","useCvcOnlyConfig","cvcId","validationConfig","cardConfig","validationListener"],"sources":["useCvcOnlyConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../validation/CardValidationEventListener';\nimport MerchantCvcOnlyConfig from '../config/MerchantCvcOnlyConfig';\nimport { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig';\n\nexport interface CvcOnlyValidationConfig {\n validationListener: CardValidationEventListener;\n}\nexport interface UseCvcOnlyConfig {\n cvcId: string;\n validationConfig?: CvcOnlyValidationConfig;\n}\n\nexport function useCvcOnlyConfig({ cvcId, validationConfig }: UseCvcOnlyConfig) {\n const cardConfig = new MerchantCvcOnlyConfig({\n cvcId,\n });\n\n if (validationConfig) {\n cardConfig.validationConfig = new MerchantCvcOnlyValidationConfig({\n validationListener: validationConfig.validationListener,\n });\n }\n\n return cardConfig;\n}\n"],"mappings":"AACA,OAAOA,qBAAqB,MAAM,iCAAiC;AACnE,SAASC,+BAA+B,QAAQ,+CAA+C;AAU/F,OAAO,SAASC,gBAAgBA,CAAC;EAAEC,KAAK;EAAEC;AAAmC,CAAC,EAAE;EAC9E,MAAMC,UAAU,GAAG,IAAIL,qBAAqB,CAAC;IAC3CG;EACF,CAAC,CAAC;EAEF,IAAIC,gBAAgB,EAAE;IACpBC,UAAU,CAACD,gBAAgB,GAAG,IAAIH,+BAA+B,CAAC;MAChEK,kBAAkB,EAAEF,gBAAgB,CAACE;IACvC,CAAC,CAAC;EACJ;EAEA,OAAOD,UAAU;AACnB"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js new file mode 100644 index 0000000..0ea95e3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js @@ -0,0 +1,47 @@ +import { useEffect } from 'react'; +import { NativeEventEmitter } from 'react-native'; +import AccessCheckoutReactNative, { AccessCheckout } from '../index'; +import { cvcOnlyValidationNativeEventListenerOf } from '../validation/CvcOnlyValidationEventListener'; +import { ValidationListenerException } from '../validation/ValidationListenerException'; +export const useCvcOnlyValidationEventListener = validationListener => { + useEffect(() => { + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + const nativeEventListener = cvcOnlyValidationNativeEventListenerOf(validationListener); + const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); + const eventSubscription = nativeEventEmitter.addListener(AccessCheckout.CvcOnlyValidationEventType, nativeEventListener); + return () => { + eventSubscription.remove(); + }; + }, []); +}; +export const useCvcOnlyValidation = ({ + accessCheckout, + cvcOnlyValidationConfig, + validationListener +}) => { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCvcOnlyValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCvcOnlyValidationEventListener(validationListener); + const initialiseCvcOnlyValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCvcOnlyValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new ValidationListenerException(); + } + return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig); + }; + return { + initialiseCvcOnlyValidation + }; +}; +//# sourceMappingURL=useCvcOnlyValidation.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js.map b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js.map new file mode 100644 index 0000000..f9a3d31 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/hooks/useCvcOnlyValidation.js.map @@ -0,0 +1 @@ +{"version":3,"names":["useEffect","NativeEventEmitter","AccessCheckoutReactNative","AccessCheckout","cvcOnlyValidationNativeEventListenerOf","ValidationListenerException","useCvcOnlyValidationEventListener","validationListener","nativeEventListener","nativeEventEmitter","eventSubscription","addListener","CvcOnlyValidationEventType","remove","useCvcOnlyValidation","accessCheckout","cvcOnlyValidationConfig","initialiseCvcOnlyValidation"],"sources":["useCvcOnlyValidation.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckoutReactNative, { AccessCheckout, CardValidationEventListener } from '../index';\nimport type { CvcOnlyValidationEventListener } from '../validation/CvcOnlyValidationEventListener';\nimport { cvcOnlyValidationNativeEventListenerOf } from '../validation/CvcOnlyValidationEventListener';\nimport { ValidationListenerException } from '../validation/ValidationListenerException';\n\nexport const useCvcOnlyValidationEventListener = (validationListener: CvcOnlyValidationEventListener) => {\n useEffect(() => {\n //Safe-guard in the case where no validation listener was configured we avoid registering the native listener\n if (!validationListener) {\n return;\n }\n\n const nativeEventListener = cvcOnlyValidationNativeEventListenerOf(validationListener);\n const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative);\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CvcOnlyValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n};\n\ninterface UseCvcOnlyValidationHook {\n accessCheckout: AccessCheckout;\n cvcOnlyValidationConfig: {\n cvcId: string;\n };\n validationListener: CardValidationEventListener;\n}\n\nexport const useCvcOnlyValidation = ({\n accessCheckout,\n cvcOnlyValidationConfig,\n validationListener,\n}: UseCvcOnlyValidationHook) => {\n /*\n Implementation Note: To allow the hook to render and use hooks correctly:\n `useCvcOnlyValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener\n was provided in order to register the native event.\n */\n useCvcOnlyValidationEventListener(validationListener);\n const initialiseCvcOnlyValidation = () => {\n /*\n Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional.\n We added a safe-guard that will raise a ValidationListenerException which prevents the\n `initialiseCvcOnlyValidation` method from being called when no validationConfig is provided.\n This provides the developers with a clear readable error message and enhances their debugging experience.\n */\n if (!validationListener) {\n throw new ValidationListenerException();\n }\n\n return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig);\n };\n\n return { initialiseCvcOnlyValidation };\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,kBAAkB,QAAQ,cAAc;AACjD,OAAOC,yBAAyB,IAAIC,cAAc,QAAqC,UAAU;AAEjG,SAASC,sCAAsC,QAAQ,8CAA8C;AACrG,SAASC,2BAA2B,QAAQ,2CAA2C;AAEvF,OAAO,MAAMC,iCAAiC,GAAIC,kBAAkD,IAAK;EACvGP,SAAS,CAAC,MAAM;IACd;IACA,IAAI,CAACO,kBAAkB,EAAE;MACvB;IACF;IAEA,MAAMC,mBAAmB,GAAGJ,sCAAsC,CAACG,kBAAkB,CAAC;IACtF,MAAME,kBAAkB,GAAG,IAAIR,kBAAkB,CAACC,yBAAyB,CAAC;IAE5E,MAAMQ,iBAAiB,GAAGD,kBAAkB,CAACE,WAAW,CACtDR,cAAc,CAACS,0BAA0B,EACzCJ,mBACF,CAAC;IAED,OAAO,MAAM;MACXE,iBAAiB,CAACG,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR,CAAC;AAUD,OAAO,MAAMC,oBAAoB,GAAGA,CAAC;EACnCC,cAAc;EACdC,uBAAuB;EACvBT;AACwB,CAAC,KAAK;EAC9B;AACF;AACA;AACA;AACA;EACED,iCAAiC,CAACC,kBAAkB,CAAC;EACrD,MAAMU,2BAA2B,GAAGA,CAAA,KAAM;IACxC;AACJ;AACA;AACA;AACA;AACA;IACI,IAAI,CAACV,kBAAkB,EAAE;MACvB,MAAM,IAAIF,2BAA2B,CAAC,CAAC;IACzC;IAEA,OAAOU,cAAc,CAACE,2BAA2B,CAACD,uBAAuB,CAAC;EAC5E,CAAC;EAED,OAAO;IAAEC;EAA4B,CAAC;AACxC,CAAC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/index.js b/access-checkout-react-native-sdk/lib/module/index.js index a3c8056..9a20825 100644 --- a/access-checkout-react-native-sdk/lib/module/index.js +++ b/access-checkout-react-native-sdk/lib/module/index.js @@ -1,15 +1,19 @@ import AccessCheckoutReactNative from './AccessCheckoutReactNative'; export default AccessCheckoutReactNative; export { default as AccessCheckout } from './AccessCheckout'; -export { default as CardDetails } from './session/CardDetails'; +export { default as SessionGenerationConfig } from './session/SessionGenerationConfig'; export { default as SessionType, CARD, CVC } from './session/SessionType'; export { default as Sessions } from './session/Sessions'; -export { default as CardValidationConfig } from './validation/CardValidationConfig'; -export { default as CvcOnlyValidationConfig } from './validation/CvcOnlyValidationConfig'; export { default as Brand } from './validation/Brand'; export { default as BrandImage } from './validation/BrandImage'; -export { CardValidationEventListener, cardValidationNativeEventListenerOf } from './validation/CardValidationEventListener'; -export { CvcOnlyValidationEventListener, cvcOnlyValidationNativeEventListenerOf } from './validation/CvcOnlyValidationEventListener'; -export { useCardValidation } from './validation/CardValidationHooks'; -export { useCvcOnlyValidation } from './validation/CvcOnlyValidationHooks'; +export { default as CardConfig } from './config/MerchantCardConfig'; +export { default as CvcOnlyConfig } from './config/MerchantCvcOnlyConfig'; +export { CardValidationEventListener } from './validation/CardValidationEventListener'; +export { CvcOnlyValidationEventListener } from './validation/CvcOnlyValidationEventListener'; +export { MerchantCvcOnlyValidationConfig } from './validation/MerchantCvcOnlyValidationConfig'; +export { MerchantCardValidationConfig } from './validation/MerchantCardValidationConfig'; +export { useCardConfig, UseCardConfig, CardValidationConfig } from './hooks/useCardConfig'; +export { useCvcOnlyConfig, UseCvcOnlyConfig, CvcOnlyValidationConfig } from './hooks/useCvcOnlyConfig'; +export { useAccessCheckout, UseAccessCheckout, UseAccessCheckoutExports } from './hooks/useAccessCheckout'; +export { AccessCheckoutTextInput, AccessCheckoutTextInputStyle, AccessCheckoutTextInputProps } from './ui/AccessCheckoutTextInput'; //# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/index.js.map b/access-checkout-react-native-sdk/lib/module/index.js.map index 382b820..b0a434d 100644 --- a/access-checkout-react-native-sdk/lib/module/index.js.map +++ b/access-checkout-react-native-sdk/lib/module/index.js.map @@ -1 +1 @@ -{"version":3,"names":["AccessCheckoutReactNative","default","AccessCheckout","CardDetails","SessionType","CARD","CVC","Sessions","CardValidationConfig","CvcOnlyValidationConfig","Brand","BrandImage","CardValidationEventListener","cardValidationNativeEventListenerOf","CvcOnlyValidationEventListener","cvcOnlyValidationNativeEventListenerOf","useCardValidation","useCvcOnlyValidation"],"sources":["index.tsx"],"sourcesContent":["import AccessCheckoutReactNative from './AccessCheckoutReactNative';\n\nexport default AccessCheckoutReactNative;\n\nexport { default as AccessCheckout } from './AccessCheckout';\n\nexport { default as CardDetails } from './session/CardDetails';\n\nexport { default as SessionType, CARD, CVC } from './session/SessionType';\n\nexport { default as Sessions } from './session/Sessions';\n\nexport { default as CardValidationConfig } from './validation/CardValidationConfig';\n\nexport { default as CvcOnlyValidationConfig } from './validation/CvcOnlyValidationConfig';\n\nexport { default as Brand } from './validation/Brand';\n\nexport { default as BrandImage } from './validation/BrandImage';\n\nexport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from './validation/CardValidationEventListener';\n\nexport {\n CvcOnlyValidationEventListener,\n cvcOnlyValidationNativeEventListenerOf,\n} from './validation/CvcOnlyValidationEventListener';\n\nexport { useCardValidation } from './validation/CardValidationHooks';\nexport { useCvcOnlyValidation } from './validation/CvcOnlyValidationHooks';\n"],"mappings":"AAAA,OAAOA,yBAAyB,MAAM,6BAA6B;AAEnE,eAAeA,yBAAyB;AAExC,SAASC,OAAO,IAAIC,cAAc,QAAQ,kBAAkB;AAE5D,SAASD,OAAO,IAAIE,WAAW,QAAQ,uBAAuB;AAE9D,SAASF,OAAO,IAAIG,WAAW,EAAEC,IAAI,EAAEC,GAAG,QAAQ,uBAAuB;AAEzE,SAASL,OAAO,IAAIM,QAAQ,QAAQ,oBAAoB;AAExD,SAASN,OAAO,IAAIO,oBAAoB,QAAQ,mCAAmC;AAEnF,SAASP,OAAO,IAAIQ,uBAAuB,QAAQ,sCAAsC;AAEzF,SAASR,OAAO,IAAIS,KAAK,QAAQ,oBAAoB;AAErD,SAAST,OAAO,IAAIU,UAAU,QAAQ,yBAAyB;AAE/D,SACEC,2BAA2B,EAC3BC,mCAAmC,QAC9B,0CAA0C;AAEjD,SACEC,8BAA8B,EAC9BC,sCAAsC,QACjC,6CAA6C;AAEpD,SAASC,iBAAiB,QAAQ,kCAAkC;AACpE,SAASC,oBAAoB,QAAQ,qCAAqC"} \ No newline at end of file +{"version":3,"names":["AccessCheckoutReactNative","default","AccessCheckout","SessionGenerationConfig","SessionType","CARD","CVC","Sessions","Brand","BrandImage","CardConfig","CvcOnlyConfig","CardValidationEventListener","CvcOnlyValidationEventListener","MerchantCvcOnlyValidationConfig","MerchantCardValidationConfig","useCardConfig","UseCardConfig","CardValidationConfig","useCvcOnlyConfig","UseCvcOnlyConfig","CvcOnlyValidationConfig","useAccessCheckout","UseAccessCheckout","UseAccessCheckoutExports","AccessCheckoutTextInput","AccessCheckoutTextInputStyle","AccessCheckoutTextInputProps"],"sources":["index.tsx"],"sourcesContent":["import AccessCheckoutReactNative from './AccessCheckoutReactNative';\n\nexport default AccessCheckoutReactNative;\n\nexport { default as AccessCheckout } from './AccessCheckout';\n\nexport { default as SessionGenerationConfig } from './session/SessionGenerationConfig';\n\nexport { default as SessionType, CARD, CVC } from './session/SessionType';\n\nexport { default as Sessions } from './session/Sessions';\n\nexport { default as Brand } from './validation/Brand';\n\nexport { default as BrandImage } from './validation/BrandImage';\nexport { default as CardConfig } from './config/MerchantCardConfig';\nexport { default as CvcOnlyConfig } from './config/MerchantCvcOnlyConfig';\n\nexport { CardValidationEventListener } from './validation/CardValidationEventListener';\nexport { CvcOnlyValidationEventListener } from './validation/CvcOnlyValidationEventListener';\n\nexport { MerchantCvcOnlyValidationConfig } from './validation/MerchantCvcOnlyValidationConfig';\nexport { MerchantCardValidationConfig } from './validation/MerchantCardValidationConfig';\n\nexport { useCardConfig, UseCardConfig, CardValidationConfig } from './hooks/useCardConfig';\nexport { useCvcOnlyConfig, UseCvcOnlyConfig, CvcOnlyValidationConfig } from './hooks/useCvcOnlyConfig';\n\nexport { useAccessCheckout, UseAccessCheckout, UseAccessCheckoutExports } from './hooks/useAccessCheckout';\n\nexport {\n AccessCheckoutTextInput,\n AccessCheckoutTextInputStyle,\n AccessCheckoutTextInputProps,\n} from './ui/AccessCheckoutTextInput';\n"],"mappings":"AAAA,OAAOA,yBAAyB,MAAM,6BAA6B;AAEnE,eAAeA,yBAAyB;AAExC,SAASC,OAAO,IAAIC,cAAc,QAAQ,kBAAkB;AAE5D,SAASD,OAAO,IAAIE,uBAAuB,QAAQ,mCAAmC;AAEtF,SAASF,OAAO,IAAIG,WAAW,EAAEC,IAAI,EAAEC,GAAG,QAAQ,uBAAuB;AAEzE,SAASL,OAAO,IAAIM,QAAQ,QAAQ,oBAAoB;AAExD,SAASN,OAAO,IAAIO,KAAK,QAAQ,oBAAoB;AAErD,SAASP,OAAO,IAAIQ,UAAU,QAAQ,yBAAyB;AAC/D,SAASR,OAAO,IAAIS,UAAU,QAAQ,6BAA6B;AACnE,SAAST,OAAO,IAAIU,aAAa,QAAQ,gCAAgC;AAEzE,SAASC,2BAA2B,QAAQ,0CAA0C;AACtF,SAASC,8BAA8B,QAAQ,6CAA6C;AAE5F,SAASC,+BAA+B,QAAQ,8CAA8C;AAC9F,SAASC,4BAA4B,QAAQ,2CAA2C;AAExF,SAASC,aAAa,EAAEC,aAAa,EAAEC,oBAAoB,QAAQ,uBAAuB;AAC1F,SAASC,gBAAgB,EAAEC,gBAAgB,EAAEC,uBAAuB,QAAQ,0BAA0B;AAEtG,SAASC,iBAAiB,EAAEC,iBAAiB,EAAEC,wBAAwB,QAAQ,2BAA2B;AAE1G,SACEC,uBAAuB,EACvBC,4BAA4B,EAC5BC,4BAA4B,QACvB,8BAA8B"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/session/CardDetails.js b/access-checkout-react-native-sdk/lib/module/session/CardDetails.js deleted file mode 100644 index 5ae9048..0000000 --- a/access-checkout-react-native-sdk/lib/module/session/CardDetails.js +++ /dev/null @@ -1,2 +0,0 @@ - -//# sourceMappingURL=CardDetails.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/session/CardDetails.js.map b/access-checkout-react-native-sdk/lib/module/session/CardDetails.js.map deleted file mode 100644 index 391944c..0000000 --- a/access-checkout-react-native-sdk/lib/module/session/CardDetails.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":[],"sources":["CardDetails.tsx"],"sourcesContent":["export default interface CardDetails {\n pan?: string;\n expiryDate?: string;\n cvc: string;\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js b/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js new file mode 100644 index 0000000..3c54131 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js @@ -0,0 +1,2 @@ + +//# sourceMappingURL=SessionGenerationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js.map b/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js.map new file mode 100644 index 0000000..2309d75 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/session/SessionGenerationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":[],"sources":["SessionGenerationConfig.ts"],"sourcesContent":["export default interface SessionGenerationConfig {\n panId?: string;\n expiryDateId?: string;\n cvcId: string;\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/session/SessionType.js b/access-checkout-react-native-sdk/lib/module/session/SessionType.js index 38e9cfe..9abba90 100644 --- a/access-checkout-react-native-sdk/lib/module/session/SessionType.js +++ b/access-checkout-react-native-sdk/lib/module/session/SessionType.js @@ -1,6 +1,6 @@ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } export default class SessionType {} _defineProperty(SessionType, "CARD", 'CARD'); _defineProperty(SessionType, "CVC", 'CVC'); diff --git a/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js b/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js new file mode 100644 index 0000000..0f69df2 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js @@ -0,0 +1,69 @@ +import React from 'react'; +import { requireNativeComponent, StyleSheet, View } from 'react-native'; + +/** + * Composes `AccessCheckoutTextInput`. + * + * - nativeID: string + * - testID: string + * - style: StyleProp; + * - placeholder: string + * - editable: boolean + */ + +/** + * Note: Not all properties apply styling to both placeholder text and input text. + * textColor: only applies to input text. + * fontFamily: applies to both placeholder text and input text. + * fontSize: applies to both placeholder text and input text. + * fontStyle: applies to both placeholder text and input text. + * fontWeight: applies to both placeholder text and input text. + */ + +/** + * Font Changes apply to placeholder text and input text + * + * ## What + * - Rewrites font support for android + * - Adds font weight support for android <28 only 'normal' and 'bold' supported + * - Adds font weight support as units for android >28 + */ + +const RTCAccessCheckoutTextInput = requireNativeComponent('AccessCheckoutTextInput'); +export const AccessCheckoutTextInput = props => { + const { + nativeID, + testID, + style, + placeholder, + editable + } = props; + const { + color, + fontFamily, + fontSize, + fontStyle, + fontWeight, + ...otherStyles + } = StyleSheet.flatten([style]); + return /*#__PURE__*/React.createElement(View, { + style: [otherStyles] + }, /*#__PURE__*/React.createElement(RTCAccessCheckoutTextInput, { + nativeID: nativeID, + testID: testID, + style: [{ + flex: 1 + }], + placeholder: placeholder, + font: { + fontFamily, + fontSize, + fontWeight, + fontStyle + }, + color: color, + editable: editable + })); +}; +export default AccessCheckoutTextInput; +//# sourceMappingURL=AccessCheckoutTextInput.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js.map b/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js.map new file mode 100644 index 0000000..cda308f --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/ui/AccessCheckoutTextInput.js.map @@ -0,0 +1 @@ +{"version":3,"names":["React","requireNativeComponent","StyleSheet","View","RTCAccessCheckoutTextInput","AccessCheckoutTextInput","props","nativeID","testID","style","placeholder","editable","color","fontFamily","fontSize","fontStyle","fontWeight","otherStyles","flatten","createElement","flex","font"],"sources":["AccessCheckoutTextInput.tsx"],"sourcesContent":["import React from 'react';\nimport {\n requireNativeComponent,\n type ColorValue,\n type StyleProp,\n StyleSheet,\n type TextStyle,\n View,\n type ViewStyle,\n} from 'react-native';\n\n/**\n * Composes `AccessCheckoutTextInput`.\n *\n * - nativeID: string\n * - testID: string\n * - style: StyleProp;\n * - placeholder: string\n * - editable: boolean\n */\nexport interface AccessCheckoutTextInputProps {\n nativeID: string;\n testID?: string;\n style?: StyleProp;\n placeholder?: string;\n editable?: boolean;\n}\n\n/**\n * Note: Not all properties apply styling to both placeholder text and input text.\n * textColor: only applies to input text.\n * fontFamily: applies to both placeholder text and input text.\n * fontSize: applies to both placeholder text and input text.\n * fontStyle: applies to both placeholder text and input text.\n * fontWeight: applies to both placeholder text and input text.\n */\nexport interface AccessCheckoutTextInputStyle extends ViewStyle {\n color?: ColorValue;\n fontFamily?: string;\n fontSize?: number;\n fontStyle?: 'normal' | 'italic';\n // Specifies font weight. The values 'normal' and 'bold' are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen.\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n}\n\n/**\n * Font Changes apply to placeholder text and input text\n *\n * ## What\n * - Rewrites font support for android\n * - Adds font weight support for android <28 only 'normal' and 'bold' supported\n * - Adds font weight support as units for android >28\n */\ninterface RTCAccessCheckoutTextInputFontProps {\n fontFamily?: string;\n fontSize?: number;\n fontStyle?: 'normal' | 'italic';\n fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';\n}\n\ninterface RTCAccessCheckoutTextInputProps {\n nativeID: string;\n testID?: string;\n style?: StyleProp;\n placeholder?: string;\n font?: RTCAccessCheckoutTextInputFontProps;\n editable?: boolean;\n color?: ColorValue;\n}\n\nconst RTCAccessCheckoutTextInput = requireNativeComponent('AccessCheckoutTextInput');\nexport const AccessCheckoutTextInput = (props: AccessCheckoutTextInputProps) => {\n const { nativeID, testID, style, placeholder, editable } = props;\n const { color, fontFamily, fontSize, fontStyle, fontWeight, ...otherStyles } = StyleSheet.flatten([style]);\n return (\n \n \n \n );\n};\n\nexport default AccessCheckoutTextInput;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACEC,sBAAsB,EAGtBC,UAAU,EAEVC,IAAI,QAEC,cAAc;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkBA,MAAMC,0BAA0B,GAAGH,sBAAsB,CAAkC,yBAAyB,CAAC;AACrH,OAAO,MAAMI,uBAAuB,GAAIC,KAAmC,IAAK;EAC9E,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAS,CAAC,GAAGL,KAAK;EAChE,MAAM;IAAEM,KAAK;IAAEC,UAAU;IAAEC,QAAQ;IAAEC,SAAS;IAAEC,UAAU;IAAE,GAAGC;EAAY,CAAC,GAAGf,UAAU,CAACgB,OAAO,CAAC,CAACT,KAAK,CAAC,CAAC;EAC1G,oBACET,KAAA,CAAAmB,aAAA,CAAChB,IAAI;IAACM,KAAK,EAAE,CAACQ,WAAW;EAAE,gBACzBjB,KAAA,CAAAmB,aAAA,CAACf,0BAA0B;IACzBG,QAAQ,EAAEA,QAAS;IACnBC,MAAM,EAAEA,MAAO;IACfC,KAAK,EAAE,CAAC;MAAEW,IAAI,EAAE;IAAE,CAAC,CAAE;IACrBV,WAAW,EAAEA,WAAY;IACzBW,IAAI,EAAE;MACJR,UAAU;MACVC,QAAQ;MACRE,UAAU;MACVD;IACF,CAAE;IACFH,KAAK,EAAEA,KAAM;IACbD,QAAQ,EAAEA;EAAS,CACpB,CACG,CAAC;AAEX,CAAC;AAED,eAAeN,uBAAuB"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/Brand.js.map b/access-checkout-react-native-sdk/lib/module/validation/Brand.js.map index ced2712..76a7487 100644 --- a/access-checkout-react-native-sdk/lib/module/validation/Brand.js.map +++ b/access-checkout-react-native-sdk/lib/module/validation/Brand.js.map @@ -1 +1 @@ -{"version":3,"names":[],"sources":["Brand.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport BrandImage from './BrandImage';\n\nexport default interface Brand {\n name: string;\n images: BrandImage[];\n}\n"],"mappings":""} \ No newline at end of file +{"version":3,"names":[],"sources":["Brand.ts"],"sourcesContent":["import type BrandImage from './BrandImage';\n\nexport default interface Brand {\n name: string;\n images: BrandImage[];\n}\n"],"mappings":""} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js b/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js deleted file mode 100644 index 6501bed..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js +++ /dev/null @@ -1,24 +0,0 @@ -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -export default class CardValidationConfig { - constructor({ - panId, - expiryDateId, - cvcId, - enablePanFormatting, - acceptedCardBrands - }) { - _defineProperty(this, "panId", void 0); - _defineProperty(this, "expiryDateId", void 0); - _defineProperty(this, "cvcId", void 0); - _defineProperty(this, "enablePanFormatting", false); - _defineProperty(this, "acceptedCardBrands", []); - this.panId = panId; - this.expiryDateId = expiryDateId; - this.cvcId = cvcId; - this.enablePanFormatting = enablePanFormatting ? enablePanFormatting : false; - this.acceptedCardBrands = acceptedCardBrands ? acceptedCardBrands : []; - } -} -//# sourceMappingURL=CardValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js.map b/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js.map deleted file mode 100644 index 3677c14..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CardValidationConfig.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["CardValidationConfig","constructor","panId","expiryDateId","cvcId","enablePanFormatting","acceptedCardBrands","_defineProperty"],"sources":["CardValidationConfig.ts"],"sourcesContent":["export default class CardValidationConfig {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting = false;\n acceptedCardBrands: string[] = [];\n\n constructor({\n panId,\n expiryDateId,\n cvcId,\n enablePanFormatting,\n acceptedCardBrands,\n }: {\n panId: string;\n expiryDateId: string;\n cvcId: string;\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n }) {\n this.panId = panId;\n this.expiryDateId = expiryDateId;\n this.cvcId = cvcId;\n this.enablePanFormatting = enablePanFormatting\n ? enablePanFormatting\n : false;\n this.acceptedCardBrands = acceptedCardBrands ? acceptedCardBrands : [];\n }\n}\n"],"mappings":";;;AAAA,eAAe,MAAMA,oBAAoB,CAAC;EAOxCC,WAAWA,CAAC;IACVC,KAAK;IACLC,YAAY;IACZC,KAAK;IACLC,mBAAmB;IACnBC;EAOF,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,8BAfmB,KAAK;IAAAA,eAAA,6BACI,EAAE;IAe/B,IAAI,CAACL,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,mBAAmB,GAAGA,mBAAmB,GAC1CA,mBAAmB,GACnB,KAAK;IACT,IAAI,CAACC,kBAAkB,GAAGA,kBAAkB,GAAGA,kBAAkB,GAAG,EAAE;EACxE;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CardValidationEventListener.js.map b/access-checkout-react-native-sdk/lib/module/validation/CardValidationEventListener.js.map index 11be270..9e34d01 100644 --- a/access-checkout-react-native-sdk/lib/module/validation/CardValidationEventListener.js.map +++ b/access-checkout-react-native-sdk/lib/module/validation/CardValidationEventListener.js.map @@ -1 +1 @@ -{"version":3,"names":["cardValidationNativeEventListenerOf","delegate","event","type","onCardBrandChanged","value","onPanValidChanged","isValid","onExpiryDateValidChanged","onCvcValidChanged","onValidationSuccess"],"sources":["CardValidationEventListener.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Brand from './Brand';\n\nexport interface CardValidationEventListener {\n onCardBrandChanged?(brand?: Brand): void;\n\n onPanValidChanged?(isValid: boolean): void;\n\n onExpiryDateValidChanged?(isValid: boolean): void;\n\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cardValidationNativeEventListenerOf(\n delegate: CardValidationEventListener\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'brand' && delegate.onCardBrandChanged) {\n if (event.value === null) {\n delegate.onCardBrandChanged();\n } else {\n delegate.onCardBrandChanged(event.value as Brand);\n }\n }\n\n if (event.type === 'pan' && delegate.onPanValidChanged) {\n delegate.onPanValidChanged(event.isValid);\n }\n\n if (event.type === 'expiryDate' && delegate.onExpiryDateValidChanged) {\n delegate.onExpiryDateValidChanged(event.isValid);\n }\n\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":"AAAA;AACA;;AAeA,OAAO,SAASA,mCAAmCA,CACjDC,QAAqC,EACrC;EACA;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,IAAIF,QAAQ,CAACG,kBAAkB,EAAE;MACzD,IAAIF,KAAK,CAACG,KAAK,KAAK,IAAI,EAAE;QACxBJ,QAAQ,CAACG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,MAAM;QACLH,QAAQ,CAACG,kBAAkB,CAACF,KAAK,CAACG,KAAc,CAAC;MACnD;IACF;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,iBAAiB,EAAE;MACtDL,QAAQ,CAACK,iBAAiB,CAACJ,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,YAAY,IAAIF,QAAQ,CAACO,wBAAwB,EAAE;MACpEP,QAAQ,CAACO,wBAAwB,CAACN,KAAK,CAACK,OAAO,CAAC;IAClD;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACQ,iBAAiB,EAAE;MACtDR,QAAQ,CAACQ,iBAAiB,CAACP,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACS,mBAAmB,EAAE;MACxDT,QAAQ,CAACS,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file +{"version":3,"names":["cardValidationNativeEventListenerOf","delegate","event","type","onCardBrandChanged","value","onPanValidChanged","isValid","onExpiryDateValidChanged","onCvcValidChanged","onValidationSuccess"],"sources":["CardValidationEventListener.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport Brand from './Brand';\n\nexport interface CardValidationEventListener {\n onCardBrandChanged?(brand?: Brand): void;\n\n onPanValidChanged?(isValid: boolean): void;\n\n onExpiryDateValidChanged?(isValid: boolean): void;\n\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cardValidationNativeEventListenerOf(delegate: CardValidationEventListener) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'brand' && delegate.onCardBrandChanged) {\n if (event.value === null) {\n delegate.onCardBrandChanged();\n } else {\n delegate.onCardBrandChanged(event.value as Brand);\n }\n }\n\n if (event.type === 'pan' && delegate.onPanValidChanged) {\n delegate.onPanValidChanged(event.isValid);\n }\n\n if (event.type === 'expiryDate' && delegate.onExpiryDateValidChanged) {\n delegate.onExpiryDateValidChanged(event.isValid);\n }\n\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":"AAAA;AACA;;AAeA,OAAO,SAASA,mCAAmCA,CAACC,QAAqC,EAAE;EACzF;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,OAAO,IAAIF,QAAQ,CAACG,kBAAkB,EAAE;MACzD,IAAIF,KAAK,CAACG,KAAK,KAAK,IAAI,EAAE;QACxBJ,QAAQ,CAACG,kBAAkB,CAAC,CAAC;MAC/B,CAAC,MAAM;QACLH,QAAQ,CAACG,kBAAkB,CAACF,KAAK,CAACG,KAAc,CAAC;MACnD;IACF;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,iBAAiB,EAAE;MACtDL,QAAQ,CAACK,iBAAiB,CAACJ,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,YAAY,IAAIF,QAAQ,CAACO,wBAAwB,EAAE;MACpEP,QAAQ,CAACO,wBAAwB,CAACN,KAAK,CAACK,OAAO,CAAC;IAClD;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACQ,iBAAiB,EAAE;MACtDR,QAAQ,CAACQ,iBAAiB,CAACP,KAAK,CAACK,OAAO,CAAC;IAC3C;IAEA,IAAIL,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACS,mBAAmB,EAAE;MACxDT,QAAQ,CAACS,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js b/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js deleted file mode 100644 index 93cdd8b..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js +++ /dev/null @@ -1,29 +0,0 @@ -import { useEffect } from 'react'; -import { NativeEventEmitter } from 'react-native'; -import AccessCheckout from '../AccessCheckout'; -import AccessCheckoutReactNative from '../AccessCheckoutReactNative'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { cardValidationNativeEventListenerOf } from './CardValidationEventListener'; -export function useCardValidationEventListener(merchantListener) { - useEffect(() => { - const nativeEventListener = cardValidationNativeEventListenerOf(merchantListener); - const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); - const eventSubscription = nativeEventEmitter.addListener(AccessCheckout.CardValidationEventType, nativeEventListener); - return () => { - eventSubscription.remove(); - }; - }, []); -} -export function useCardValidation(accessCheckout, cardValidationConfig, merchantListener) { - useCardValidationEventListener(merchantListener); - const initialiseCardValidation = () => { - return accessCheckout.initialiseCardValidation(cardValidationConfig); - }; - return { - initialiseCardValidation - }; -} -//# sourceMappingURL=CardValidationHooks.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js.map b/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js.map deleted file mode 100644 index 29ec2de..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CardValidationHooks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["useEffect","NativeEventEmitter","AccessCheckout","AccessCheckoutReactNative","cardValidationNativeEventListenerOf","useCardValidationEventListener","merchantListener","nativeEventListener","nativeEventEmitter","eventSubscription","addListener","CardValidationEventType","remove","useCardValidation","accessCheckout","cardValidationConfig","initialiseCardValidation"],"sources":["CardValidationHooks.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckout from '../AccessCheckout';\nimport AccessCheckoutReactNative from '../AccessCheckoutReactNative';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CardValidationConfig from './CardValidationConfig';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport {\n CardValidationEventListener,\n cardValidationNativeEventListenerOf,\n} from './CardValidationEventListener';\n\nexport function useCardValidationEventListener(\n merchantListener: CardValidationEventListener\n) {\n useEffect(() => {\n const nativeEventListener =\n cardValidationNativeEventListenerOf(merchantListener);\n const nativeEventEmitter = new NativeEventEmitter(\n AccessCheckoutReactNative\n );\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CardValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\nexport function useCardValidation(\n accessCheckout: AccessCheckout,\n cardValidationConfig: CardValidationConfig,\n merchantListener: CardValidationEventListener\n) {\n useCardValidationEventListener(merchantListener);\n\n const initialiseCardValidation = () => {\n return accessCheckout.initialiseCardValidation(cardValidationConfig);\n };\n\n return { initialiseCardValidation };\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,kBAAkB,QAAQ,cAAc;AACjD,OAAOC,cAAc,MAAM,mBAAmB;AAC9C,OAAOC,yBAAyB,MAAM,8BAA8B;AACpE;AACA;AAEA;AACA;AACA,SAEEC,mCAAmC,QAC9B,+BAA+B;AAEtC,OAAO,SAASC,8BAA8BA,CAC5CC,gBAA6C,EAC7C;EACAN,SAAS,CAAC,MAAM;IACd,MAAMO,mBAAmB,GACvBH,mCAAmC,CAACE,gBAAgB,CAAC;IACvD,MAAME,kBAAkB,GAAG,IAAIP,kBAAkB,CAC/CE,yBACF,CAAC;IAED,MAAMM,iBAAiB,GAAGD,kBAAkB,CAACE,WAAW,CACtDR,cAAc,CAACS,uBAAuB,EACtCJ,mBACF,CAAC;IAED,OAAO,MAAM;MACXE,iBAAiB,CAACG,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAEA,OAAO,SAASC,iBAAiBA,CAC/BC,cAA8B,EAC9BC,oBAA0C,EAC1CT,gBAA6C,EAC7C;EACAD,8BAA8B,CAACC,gBAAgB,CAAC;EAEhD,MAAMU,wBAAwB,GAAGA,CAAA,KAAM;IACrC,OAAOF,cAAc,CAACE,wBAAwB,CAACD,oBAAoB,CAAC;EACtE,CAAC;EAED,OAAO;IAAEC;EAAyB,CAAC;AACrC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js deleted file mode 100644 index caebf2e..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js +++ /dev/null @@ -1,12 +0,0 @@ -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -export default class CvcOnlyValidationConfig { - constructor({ - cvcId - }) { - _defineProperty(this, "cvcId", void 0); - this.cvcId = cvcId; - } -} -//# sourceMappingURL=CvcOnlyValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js.map b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js.map deleted file mode 100644 index e087324..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationConfig.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["CvcOnlyValidationConfig","constructor","cvcId","_defineProperty"],"sources":["CvcOnlyValidationConfig.ts"],"sourcesContent":["export default class CvcOnlyValidationConfig {\n cvcId: string;\n\n constructor({ cvcId }: { cvcId: string }) {\n this.cvcId = cvcId;\n }\n}\n"],"mappings":";;;AAAA,eAAe,MAAMA,uBAAuB,CAAC;EAG3CC,WAAWA,CAAC;IAAEC;EAAyB,CAAC,EAAE;IAAAC,eAAA;IACxC,IAAI,CAACD,KAAK,GAAGA,KAAK;EACpB;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationEventListener.js.map b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationEventListener.js.map index 3237c7d..22a388d 100644 --- a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationEventListener.js.map +++ b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationEventListener.js.map @@ -1 +1 @@ -{"version":3,"names":["cvcOnlyValidationNativeEventListenerOf","delegate","event","type","onCvcValidChanged","isValid","onValidationSuccess"],"sources":["CvcOnlyValidationEventListener.ts"],"sourcesContent":["export interface CvcOnlyValidationEventListener {\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cvcOnlyValidationNativeEventListenerOf(\n delegate: CvcOnlyValidationEventListener\n) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":"AAMA,OAAO,SAASA,sCAAsCA,CACpDC,QAAwC,EACxC;EACA;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACG,iBAAiB,EAAE;MACtDH,QAAQ,CAACG,iBAAiB,CAACF,KAAK,CAACG,OAAO,CAAC;IAC3C;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,mBAAmB,EAAE;MACxDL,QAAQ,CAACK,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file +{"version":3,"names":["cvcOnlyValidationNativeEventListenerOf","delegate","event","type","onCvcValidChanged","isValid","onValidationSuccess"],"sources":["CvcOnlyValidationEventListener.ts"],"sourcesContent":["export interface CvcOnlyValidationEventListener {\n onCvcValidChanged?(isValid: boolean): void;\n\n onValidationSuccess?(): void;\n}\n\nexport function cvcOnlyValidationNativeEventListenerOf(delegate: CvcOnlyValidationEventListener) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return function (event: any) {\n if (event.type === 'cvc' && delegate.onCvcValidChanged) {\n delegate.onCvcValidChanged(event.isValid);\n }\n\n if (event.type === 'all' && delegate.onValidationSuccess) {\n delegate.onValidationSuccess();\n }\n };\n}\n"],"mappings":"AAMA,OAAO,SAASA,sCAAsCA,CAACC,QAAwC,EAAE;EAC/F;EACA,OAAO,UAAUC,KAAU,EAAE;IAC3B,IAAIA,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACG,iBAAiB,EAAE;MACtDH,QAAQ,CAACG,iBAAiB,CAACF,KAAK,CAACG,OAAO,CAAC;IAC3C;IAEA,IAAIH,KAAK,CAACC,IAAI,KAAK,KAAK,IAAIF,QAAQ,CAACK,mBAAmB,EAAE;MACxDL,QAAQ,CAACK,mBAAmB,CAAC,CAAC;IAChC;EACF,CAAC;AACH"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js deleted file mode 100644 index 5a3c119..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js +++ /dev/null @@ -1,25 +0,0 @@ -import { useEffect } from 'react'; -import { NativeEventEmitter } from 'react-native'; -import AccessCheckoutReactNative, { AccessCheckout, cvcOnlyValidationNativeEventListenerOf } from '../index'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -export function useCvcOnlyValidationEventListener(merchantListener) { - useEffect(() => { - const nativeEventListener = cvcOnlyValidationNativeEventListenerOf(merchantListener); - const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); - const eventSubscription = nativeEventEmitter.addListener(AccessCheckout.CvcOnlyValidationEventType, nativeEventListener); - return () => { - eventSubscription.remove(); - }; - }, []); -} -export function useCvcOnlyValidation(accessCheckout, cvcOnlyValidationConfig, merchantListener) { - useCvcOnlyValidationEventListener(merchantListener); - const initialiseCvcOnlyValidation = () => { - return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig); - }; - return { - initialiseCvcOnlyValidation - }; -} -//# sourceMappingURL=CvcOnlyValidationHooks.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js.map b/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js.map deleted file mode 100644 index e72ee38..0000000 --- a/access-checkout-react-native-sdk/lib/module/validation/CvcOnlyValidationHooks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"names":["useEffect","NativeEventEmitter","AccessCheckoutReactNative","AccessCheckout","cvcOnlyValidationNativeEventListenerOf","useCvcOnlyValidationEventListener","merchantListener","nativeEventListener","nativeEventEmitter","eventSubscription","addListener","CvcOnlyValidationEventType","remove","useCvcOnlyValidation","accessCheckout","cvcOnlyValidationConfig","initialiseCvcOnlyValidation"],"sources":["CvcOnlyValidationHooks.ts"],"sourcesContent":["import { useEffect } from 'react';\nimport { NativeEventEmitter } from 'react-native';\nimport AccessCheckoutReactNative, {\n AccessCheckout,\n CvcOnlyValidationConfig,\n cvcOnlyValidationNativeEventListenerOf,\n} from '../index';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport { CvcOnlyValidationEventListener } from './CvcOnlyValidationEventListener';\n\nexport function useCvcOnlyValidationEventListener(\n merchantListener: CvcOnlyValidationEventListener\n) {\n useEffect(() => {\n const nativeEventListener =\n cvcOnlyValidationNativeEventListenerOf(merchantListener);\n const nativeEventEmitter = new NativeEventEmitter(\n AccessCheckoutReactNative\n );\n\n const eventSubscription = nativeEventEmitter.addListener(\n AccessCheckout.CvcOnlyValidationEventType,\n nativeEventListener\n );\n\n return () => {\n eventSubscription.remove();\n };\n }, []);\n}\n\nexport function useCvcOnlyValidation(\n accessCheckout: AccessCheckout,\n cvcOnlyValidationConfig: CvcOnlyValidationConfig,\n merchantListener: CvcOnlyValidationEventListener\n) {\n useCvcOnlyValidationEventListener(merchantListener);\n\n const initialiseCvcOnlyValidation = () => {\n return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig);\n };\n\n return { initialiseCvcOnlyValidation };\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,kBAAkB,QAAQ,cAAc;AACjD,OAAOC,yBAAyB,IAC9BC,cAAc,EAEdC,sCAAsC,QACjC,UAAU;AACjB;AACA;AAGA,OAAO,SAASC,iCAAiCA,CAC/CC,gBAAgD,EAChD;EACAN,SAAS,CAAC,MAAM;IACd,MAAMO,mBAAmB,GACvBH,sCAAsC,CAACE,gBAAgB,CAAC;IAC1D,MAAME,kBAAkB,GAAG,IAAIP,kBAAkB,CAC/CC,yBACF,CAAC;IAED,MAAMO,iBAAiB,GAAGD,kBAAkB,CAACE,WAAW,CACtDP,cAAc,CAACQ,0BAA0B,EACzCJ,mBACF,CAAC;IAED,OAAO,MAAM;MACXE,iBAAiB,CAACG,MAAM,CAAC,CAAC;IAC5B,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;AACR;AAEA,OAAO,SAASC,oBAAoBA,CAClCC,cAA8B,EAC9BC,uBAAgD,EAChDT,gBAAgD,EAChD;EACAD,iCAAiC,CAACC,gBAAgB,CAAC;EAEnD,MAAMU,2BAA2B,GAAGA,CAAA,KAAM;IACxC,OAAOF,cAAc,CAACE,2BAA2B,CAACD,uBAAuB,CAAC;EAC5E,CAAC;EAED,OAAO;IAAEC;EAA4B,CAAC;AACxC"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js b/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js new file mode 100644 index 0000000..7948cd3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js @@ -0,0 +1,18 @@ +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +export class MerchantCardValidationConfig { + constructor({ + validationListener, + enablePanFormatting = false, + acceptedCardBrands = [] + }) { + _defineProperty(this, "enablePanFormatting", void 0); + _defineProperty(this, "acceptedCardBrands", void 0); + _defineProperty(this, "validationListener", void 0); + this.enablePanFormatting = enablePanFormatting; + this.validationListener = validationListener; + this.acceptedCardBrands = acceptedCardBrands; + } +} +//# sourceMappingURL=MerchantCardValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js.map b/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js.map new file mode 100644 index 0000000..f5a04df --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/MerchantCardValidationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCardValidationConfig","constructor","validationListener","enablePanFormatting","acceptedCardBrands","_defineProperty"],"sources":["MerchantCardValidationConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../index';\n\nexport class MerchantCardValidationConfig {\n enablePanFormatting?: boolean;\n acceptedCardBrands?: string[];\n validationListener?: CardValidationEventListener;\n\n constructor({\n validationListener,\n enablePanFormatting = false,\n acceptedCardBrands = [],\n }: MerchantCardValidationConfig) {\n this.enablePanFormatting = enablePanFormatting;\n this.validationListener = validationListener;\n this.acceptedCardBrands = acceptedCardBrands;\n }\n}\n"],"mappings":";;;AAEA,OAAO,MAAMA,4BAA4B,CAAC;EAKxCC,WAAWA,CAAC;IACVC,kBAAkB;IAClBC,mBAAmB,GAAG,KAAK;IAC3BC,kBAAkB,GAAG;EACO,CAAC,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAC/B,IAAI,CAACF,mBAAmB,GAAGA,mBAAmB;IAC9C,IAAI,CAACD,kBAAkB,GAAGA,kBAAkB;IAC5C,IAAI,CAACE,kBAAkB,GAAGA,kBAAkB;EAC9C;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js b/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js new file mode 100644 index 0000000..2819665 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js @@ -0,0 +1,12 @@ +function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } +function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); } +function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } +export class MerchantCvcOnlyValidationConfig { + constructor({ + validationListener + }) { + _defineProperty(this, "validationListener", void 0); + this.validationListener = validationListener; + } +} +//# sourceMappingURL=MerchantCvcOnlyValidationConfig.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js.map b/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js.map new file mode 100644 index 0000000..1678192 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/MerchantCvcOnlyValidationConfig.js.map @@ -0,0 +1 @@ +{"version":3,"names":["MerchantCvcOnlyValidationConfig","constructor","validationListener","_defineProperty"],"sources":["MerchantCvcOnlyValidationConfig.ts"],"sourcesContent":["import type { CardValidationEventListener } from '../index';\n\nexport class MerchantCvcOnlyValidationConfig {\n validationListener?: CardValidationEventListener;\n\n constructor({ validationListener }: MerchantCvcOnlyValidationConfig) {\n this.validationListener = validationListener;\n }\n}\n"],"mappings":";;;AAEA,OAAO,MAAMA,+BAA+B,CAAC;EAG3CC,WAAWA,CAAC;IAAEC;EAAoD,CAAC,EAAE;IAAAC,eAAA;IACnE,IAAI,CAACD,kBAAkB,GAAGA,kBAAkB;EAC9C;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js b/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js new file mode 100644 index 0000000..77bfa23 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js @@ -0,0 +1,8 @@ +export class ValidationListenerException extends Error { + constructor() { + super(); + this.name = 'ValidationListenerError'; + this.message = `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.`; + } +} +//# sourceMappingURL=ValidationListenerException.js.map \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js.map b/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js.map new file mode 100644 index 0000000..8c14608 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/module/validation/ValidationListenerException.js.map @@ -0,0 +1 @@ +{"version":3,"names":["ValidationListenerException","Error","constructor","name","message"],"sources":["ValidationListenerException.ts"],"sourcesContent":["export class ValidationListenerException extends Error {\n constructor() {\n super();\n this.name = 'ValidationListenerError';\n this.message = `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.`;\n }\n}\n"],"mappings":"AAAA,OAAO,MAAMA,2BAA2B,SAASC,KAAK,CAAC;EACrDC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,IAAI,GAAG,yBAAyB;IACrC,IAAI,CAACC,OAAO,GAAI,6IAA4I;EAC9J;AACF"} \ No newline at end of file diff --git a/access-checkout-react-native-sdk/lib/typescript/AccessCheckout.d.ts b/access-checkout-react-native-sdk/lib/typescript/AccessCheckout.d.ts index aad9025..8c91e3e 100644 --- a/access-checkout-react-native-sdk/lib/typescript/AccessCheckout.d.ts +++ b/access-checkout-react-native-sdk/lib/typescript/AccessCheckout.d.ts @@ -1,18 +1,27 @@ -import CardDetails from './session/CardDetails'; -import Sessions from './session/Sessions'; -import CardValidationConfig from './validation/CardValidationConfig'; -import CvcOnlyValidationConfig from './validation/CvcOnlyValidationConfig'; +import type SessionGenerationConfig from './session/SessionGenerationConfig'; +import type Sessions from './session/Sessions'; +interface InitialiseCardValidationConfig { + panId: string; + expiryDateId: string; + cvcId: string; + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; +} +interface InitialiseCvcOnlyValidationConfig { + cvcId: string; +} export default class AccessCheckout { private readonly ReactNativeSdkVersion; static readonly CardValidationEventType = "AccessCheckoutCardValidationEvent"; static readonly CvcOnlyValidationEventType = "AccessCheckoutCvcOnlyValidationEvent"; baseUrl: string; merchantId?: string; - constructor({ baseUrl, merchantId, }: { + constructor({ baseUrl, merchantId }: { baseUrl: string; merchantId?: string; }); - generateSessions(cardDetails: CardDetails, sessionTypes: string[]): Promise; - initialiseCardValidation(validationConfig: CardValidationConfig): Promise; - initialiseCvcOnlyValidation(validationConfig: CvcOnlyValidationConfig): Promise; + generateSessions(sessionGenerationConfig: SessionGenerationConfig, sessionTypes: string[]): Promise; + initialiseCardValidation(validationConfig: InitialiseCardValidationConfig): Promise; + initialiseCvcOnlyValidation(validationConfig: InitialiseCvcOnlyValidationConfig): Promise; } +export {}; diff --git a/access-checkout-react-native-sdk/lib/typescript/config/MerchantCardConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/config/MerchantCardConfig.d.ts new file mode 100644 index 0000000..c075444 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/config/MerchantCardConfig.d.ts @@ -0,0 +1,8 @@ +import type { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig'; +export default class MerchantCardConfig { + panId: string; + expiryDateId: string; + cvcId: string; + validationConfig?: MerchantCardValidationConfig; + constructor({ panId, expiryDateId, cvcId, validationConfig }: MerchantCardConfig); +} diff --git a/access-checkout-react-native-sdk/lib/typescript/config/MerchantCvcOnlyConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/config/MerchantCvcOnlyConfig.d.ts new file mode 100644 index 0000000..c102cfe --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/config/MerchantCvcOnlyConfig.d.ts @@ -0,0 +1,6 @@ +import type { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig'; +export default class MerchantCvcOnlyConfig { + cvcId: string; + validationConfig?: MerchantCvcOnlyValidationConfig; + constructor({ cvcId, validationConfig }: MerchantCvcOnlyConfig); +} diff --git a/access-checkout-react-native-sdk/lib/typescript/hooks/useAccessCheckout.d.ts b/access-checkout-react-native-sdk/lib/typescript/hooks/useAccessCheckout.d.ts new file mode 100644 index 0000000..9bc1c3e --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/hooks/useAccessCheckout.d.ts @@ -0,0 +1,11 @@ +import { CardConfig, CvcOnlyConfig, Sessions } from '../index'; +export interface UseAccessCheckoutExports { + initialiseValidation: () => Promise; + generateSessions: (sessionTypes: string[]) => Promise; +} +export interface UseAccessCheckout { + baseUrl: string; + checkoutId: string; + config: CardConfig | CvcOnlyConfig; +} +export declare const useAccessCheckout: ({ baseUrl, checkoutId, config }: UseAccessCheckout) => UseAccessCheckoutExports; diff --git a/access-checkout-react-native-sdk/lib/typescript/hooks/useCardConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/hooks/useCardConfig.d.ts new file mode 100644 index 0000000..cee96af --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/hooks/useCardConfig.d.ts @@ -0,0 +1,14 @@ +import type { CardValidationEventListener } from '../validation/CardValidationEventListener'; +import MerchantCardConfig from '../config/MerchantCardConfig'; +export interface CardValidationConfig { + acceptedCardBrands?: string[]; + enablePanFormatting?: boolean; + validationListener: CardValidationEventListener; +} +export interface UseCardConfig { + panId: string; + expiryDateId: string; + cvcId: string; + validationConfig?: CardValidationConfig; +} +export declare const useCardConfig: (props: UseCardConfig) => MerchantCardConfig; diff --git a/access-checkout-react-native-sdk/lib/typescript/hooks/useCardValidation.d.ts b/access-checkout-react-native-sdk/lib/typescript/hooks/useCardValidation.d.ts new file mode 100644 index 0000000..5adcb86 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/hooks/useCardValidation.d.ts @@ -0,0 +1,18 @@ +import AccessCheckout from '../AccessCheckout'; +import { CardValidationEventListener } from '../validation/CardValidationEventListener'; +export declare function useCardValidationEventListener(validationListener: CardValidationEventListener): void; +interface UseCardValidationHook { + accessCheckout: AccessCheckout; + cardValidationConfig: { + panId: string; + expiryDateId: string; + cvcId: string; + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; + }; + validationListener: CardValidationEventListener; +} +export declare function useCardValidation({ accessCheckout, cardValidationConfig, validationListener }: UseCardValidationHook): { + initialiseCardValidation: () => Promise; +}; +export {}; diff --git a/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyConfig.d.ts new file mode 100644 index 0000000..f493fe0 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyConfig.d.ts @@ -0,0 +1,10 @@ +import type { CardValidationEventListener } from '../validation/CardValidationEventListener'; +import MerchantCvcOnlyConfig from '../config/MerchantCvcOnlyConfig'; +export interface CvcOnlyValidationConfig { + validationListener: CardValidationEventListener; +} +export interface UseCvcOnlyConfig { + cvcId: string; + validationConfig?: CvcOnlyValidationConfig; +} +export declare function useCvcOnlyConfig({ cvcId, validationConfig }: UseCvcOnlyConfig): MerchantCvcOnlyConfig; diff --git a/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyValidation.d.ts b/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyValidation.d.ts new file mode 100644 index 0000000..323b831 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/hooks/useCvcOnlyValidation.d.ts @@ -0,0 +1,14 @@ +import { AccessCheckout, CardValidationEventListener } from '../index'; +import type { CvcOnlyValidationEventListener } from '../validation/CvcOnlyValidationEventListener'; +export declare const useCvcOnlyValidationEventListener: (validationListener: CvcOnlyValidationEventListener) => void; +interface UseCvcOnlyValidationHook { + accessCheckout: AccessCheckout; + cvcOnlyValidationConfig: { + cvcId: string; + }; + validationListener: CardValidationEventListener; +} +export declare const useCvcOnlyValidation: ({ accessCheckout, cvcOnlyValidationConfig, validationListener, }: UseCvcOnlyValidationHook) => { + initialiseCvcOnlyValidation: () => Promise; +}; +export {}; diff --git a/access-checkout-react-native-sdk/lib/typescript/index.d.ts b/access-checkout-react-native-sdk/lib/typescript/index.d.ts index 2f40af9..a693057 100644 --- a/access-checkout-react-native-sdk/lib/typescript/index.d.ts +++ b/access-checkout-react-native-sdk/lib/typescript/index.d.ts @@ -1,14 +1,18 @@ import AccessCheckoutReactNative from './AccessCheckoutReactNative'; export default AccessCheckoutReactNative; export { default as AccessCheckout } from './AccessCheckout'; -export { default as CardDetails } from './session/CardDetails'; +export { default as SessionGenerationConfig } from './session/SessionGenerationConfig'; export { default as SessionType, CARD, CVC } from './session/SessionType'; export { default as Sessions } from './session/Sessions'; -export { default as CardValidationConfig } from './validation/CardValidationConfig'; -export { default as CvcOnlyValidationConfig } from './validation/CvcOnlyValidationConfig'; export { default as Brand } from './validation/Brand'; export { default as BrandImage } from './validation/BrandImage'; -export { CardValidationEventListener, cardValidationNativeEventListenerOf, } from './validation/CardValidationEventListener'; -export { CvcOnlyValidationEventListener, cvcOnlyValidationNativeEventListenerOf, } from './validation/CvcOnlyValidationEventListener'; -export { useCardValidation } from './validation/CardValidationHooks'; -export { useCvcOnlyValidation } from './validation/CvcOnlyValidationHooks'; +export { default as CardConfig } from './config/MerchantCardConfig'; +export { default as CvcOnlyConfig } from './config/MerchantCvcOnlyConfig'; +export { CardValidationEventListener } from './validation/CardValidationEventListener'; +export { CvcOnlyValidationEventListener } from './validation/CvcOnlyValidationEventListener'; +export { MerchantCvcOnlyValidationConfig } from './validation/MerchantCvcOnlyValidationConfig'; +export { MerchantCardValidationConfig } from './validation/MerchantCardValidationConfig'; +export { useCardConfig, UseCardConfig, CardValidationConfig } from './hooks/useCardConfig'; +export { useCvcOnlyConfig, UseCvcOnlyConfig, CvcOnlyValidationConfig } from './hooks/useCvcOnlyConfig'; +export { useAccessCheckout, UseAccessCheckout, UseAccessCheckoutExports } from './hooks/useAccessCheckout'; +export { AccessCheckoutTextInput, AccessCheckoutTextInputStyle, AccessCheckoutTextInputProps, } from './ui/AccessCheckoutTextInput'; diff --git a/access-checkout-react-native-sdk/lib/typescript/session/CardDetails.d.ts b/access-checkout-react-native-sdk/lib/typescript/session/CardDetails.d.ts deleted file mode 100644 index 2096b9c..0000000 --- a/access-checkout-react-native-sdk/lib/typescript/session/CardDetails.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default interface CardDetails { - pan?: string; - expiryDate?: string; - cvc: string; -} diff --git a/access-checkout-react-native-sdk/lib/typescript/session/SessionGenerationConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/session/SessionGenerationConfig.d.ts new file mode 100644 index 0000000..4609624 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/session/SessionGenerationConfig.d.ts @@ -0,0 +1,5 @@ +export default interface SessionGenerationConfig { + panId?: string; + expiryDateId?: string; + cvcId: string; +} diff --git a/access-checkout-react-native-sdk/lib/typescript/ui/AccessCheckoutTextInput.d.ts b/access-checkout-react-native-sdk/lib/typescript/ui/AccessCheckoutTextInput.d.ts new file mode 100644 index 0000000..e4f6183 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/ui/AccessCheckoutTextInput.d.ts @@ -0,0 +1,35 @@ +import React from 'react'; +import { type ColorValue, type StyleProp, type ViewStyle } from 'react-native'; +/** + * Composes `AccessCheckoutTextInput`. + * + * - nativeID: string + * - testID: string + * - style: StyleProp; + * - placeholder: string + * - editable: boolean + */ +export interface AccessCheckoutTextInputProps { + nativeID: string; + testID?: string; + style?: StyleProp; + placeholder?: string; + editable?: boolean; +} +/** + * Note: Not all properties apply styling to both placeholder text and input text. + * textColor: only applies to input text. + * fontFamily: applies to both placeholder text and input text. + * fontSize: applies to both placeholder text and input text. + * fontStyle: applies to both placeholder text and input text. + * fontWeight: applies to both placeholder text and input text. + */ +export interface AccessCheckoutTextInputStyle extends ViewStyle { + color?: ColorValue; + fontFamily?: string; + fontSize?: number; + fontStyle?: 'normal' | 'italic'; + fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; +} +export declare const AccessCheckoutTextInput: (props: AccessCheckoutTextInputProps) => React.JSX.Element; +export default AccessCheckoutTextInput; diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/Brand.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/Brand.d.ts index b9242cc..3132af5 100644 --- a/access-checkout-react-native-sdk/lib/typescript/validation/Brand.d.ts +++ b/access-checkout-react-native-sdk/lib/typescript/validation/Brand.d.ts @@ -1,4 +1,4 @@ -import BrandImage from './BrandImage'; +import type BrandImage from './BrandImage'; export default interface Brand { name: string; images: BrandImage[]; diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationConfig.d.ts deleted file mode 100644 index c01a565..0000000 --- a/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationConfig.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -export default class CardValidationConfig { - panId: string; - expiryDateId: string; - cvcId: string; - enablePanFormatting: boolean; - acceptedCardBrands: string[]; - constructor({ panId, expiryDateId, cvcId, enablePanFormatting, acceptedCardBrands, }: { - panId: string; - expiryDateId: string; - cvcId: string; - enablePanFormatting?: boolean; - acceptedCardBrands?: string[]; - }); -} diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationHooks.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationHooks.d.ts deleted file mode 100644 index 31fa1cd..0000000 --- a/access-checkout-react-native-sdk/lib/typescript/validation/CardValidationHooks.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -import AccessCheckout from '../AccessCheckout'; -import CardValidationConfig from './CardValidationConfig'; -import { CardValidationEventListener } from './CardValidationEventListener'; -export declare function useCardValidationEventListener(merchantListener: CardValidationEventListener): void; -export declare function useCardValidation(accessCheckout: AccessCheckout, cardValidationConfig: CardValidationConfig, merchantListener: CardValidationEventListener): { - initialiseCardValidation: () => Promise; -}; diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationConfig.d.ts deleted file mode 100644 index c72b959..0000000 --- a/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationConfig.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -export default class CvcOnlyValidationConfig { - cvcId: string; - constructor({ cvcId }: { - cvcId: string; - }); -} diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationHooks.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationHooks.d.ts deleted file mode 100644 index e6975e1..0000000 --- a/access-checkout-react-native-sdk/lib/typescript/validation/CvcOnlyValidationHooks.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { AccessCheckout, CvcOnlyValidationConfig } from '../index'; -import { CvcOnlyValidationEventListener } from './CvcOnlyValidationEventListener'; -export declare function useCvcOnlyValidationEventListener(merchantListener: CvcOnlyValidationEventListener): void; -export declare function useCvcOnlyValidation(accessCheckout: AccessCheckout, cvcOnlyValidationConfig: CvcOnlyValidationConfig, merchantListener: CvcOnlyValidationEventListener): { - initialiseCvcOnlyValidation: () => Promise; -}; diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCardValidationConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCardValidationConfig.d.ts new file mode 100644 index 0000000..27673f3 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCardValidationConfig.d.ts @@ -0,0 +1,7 @@ +import type { CardValidationEventListener } from '../index'; +export declare class MerchantCardValidationConfig { + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; + validationListener?: CardValidationEventListener; + constructor({ validationListener, enablePanFormatting, acceptedCardBrands, }: MerchantCardValidationConfig); +} diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCvcOnlyValidationConfig.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCvcOnlyValidationConfig.d.ts new file mode 100644 index 0000000..104f106 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/validation/MerchantCvcOnlyValidationConfig.d.ts @@ -0,0 +1,5 @@ +import type { CardValidationEventListener } from '../index'; +export declare class MerchantCvcOnlyValidationConfig { + validationListener?: CardValidationEventListener; + constructor({ validationListener }: MerchantCvcOnlyValidationConfig); +} diff --git a/access-checkout-react-native-sdk/lib/typescript/validation/ValidationListenerException.d.ts b/access-checkout-react-native-sdk/lib/typescript/validation/ValidationListenerException.d.ts new file mode 100644 index 0000000..9acb2d5 --- /dev/null +++ b/access-checkout-react-native-sdk/lib/typescript/validation/ValidationListenerException.d.ts @@ -0,0 +1,3 @@ +export declare class ValidationListenerException extends Error { + constructor(); +} diff --git a/access-checkout-react-native-sdk/package-lock.json b/access-checkout-react-native-sdk/package-lock.json index b61cdba..fcc6afd 100644 --- a/access-checkout-react-native-sdk/package-lock.json +++ b/access-checkout-react-native-sdk/package-lock.json @@ -12,6 +12,7 @@ "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/preset-typescript": "^7.16.5", + "@testing-library/react-native": "^12.4.3", "@types/jest": "^27.0.3", "@types/react": "^18.0.24", "@types/react-native": "^0.72.6", @@ -28,6 +29,7 @@ "react": "^18.1.0", "react-native": "^0.70.0", "react-native-builder-bob": "^0.18.2", + "react-test-renderer": "18.1.0", "ts-jest": "^29.1.1", "typescript": "4.8.4" }, @@ -36,6 +38,15 @@ "react-native": ">=0.70.0" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -50,105 +61,43 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", - "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -164,12 +113,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "dependencies": { - "@babel/types": "^7.23.3", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -203,14 +152,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -219,17 +168,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -259,9 +208,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -443,9 +392,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" @@ -461,9 +410,9 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -484,23 +433,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -511,72 +460,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -618,9 +505,9 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -929,12 +816,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", - "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1046,12 +933,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1092,9 +979,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", - "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", + "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.20", @@ -1142,9 +1029,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", - "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1173,9 +1060,9 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", - "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, "dependencies": { "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -1190,16 +1077,15 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", - "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", @@ -1275,9 +1161,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", - "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1307,9 +1193,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", - "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1339,12 +1225,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", - "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1371,9 +1258,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", - "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1402,9 +1289,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", - "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1531,9 +1418,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", - "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1547,9 +1434,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", - "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1563,9 +1450,9 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", - "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, "dependencies": { "@babel/compat-data": "^7.23.3", @@ -1598,9 +1485,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", - "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1614,9 +1501,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", - "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1662,9 +1549,9 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", - "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -1695,12 +1582,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz", - "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1710,16 +1597,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz", - "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" }, "engines": { "node": ">=6.9.0" @@ -1729,12 +1616,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz", - "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.0" + "@babel/plugin-transform-react-jsx": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1774,13 +1661,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz", - "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -1821,16 +1708,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz", - "integrity": "sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz", + "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", "semver": "^6.3.1" }, "engines": { @@ -1917,14 +1804,15 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz", - "integrity": "sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1997,18 +1885,18 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", - "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", + "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -2029,25 +1917,25 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.7", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.3", - "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.3", - "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -2055,15 +1943,15 @@ "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", - "@babel/plugin-transform-numeric-separator": "^7.23.3", - "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.3", - "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", @@ -2077,9 +1965,9 @@ "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", "core-js-compat": "^3.31.0", "semver": "^6.3.1" }, @@ -2091,14 +1979,14 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.16.0.tgz", - "integrity": "sha512-e5NE1EoPMpoHFkyFkMSj2h9tu7OolARcUHki8mnBv4NiFK9so+UrhbvT9mV99tMJOUEx8BOj67T6dXvGcTeYeQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", + "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-flow-strip-types": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2122,17 +2010,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz", - "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-react-jsx": "^7.16.0", - "@babel/plugin-transform-react-jsx-development": "^7.16.0", - "@babel/plugin-transform-react-pure-annotations": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2142,14 +2030,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz", - "integrity": "sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.16.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.16.1" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -2159,15 +2049,15 @@ } }, "node_modules/@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", - "pirates": "^4.0.5", + "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "engines": { @@ -2216,17 +2106,23 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -2242,20 +2138,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { @@ -2263,12 +2159,12 @@ } }, "node_modules/@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, @@ -2282,24 +2178,51 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", - "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/argparse": { @@ -2309,9 +2232,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2323,31 +2246,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2360,15 +2258,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -2381,6 +2270,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -2397,23 +2295,36 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { @@ -2432,15 +2343,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2467,6 +2369,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/console/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/console/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/console/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/core": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", @@ -2515,37 +2487,75 @@ } }, "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/core/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/@jest/core/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/core/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "node_modules/@jest/core/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/core/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@jest/core/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/core/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/create-cache-key-function": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-27.5.1.tgz", @@ -2583,6 +2593,76 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/create-cache-key-function/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/create-cache-key-function/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/create-cache-key-function/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/create-cache-key-function/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/create-cache-key-function/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/environment": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", @@ -2623,15 +2703,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jest/fake-timers": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", @@ -2707,29 +2778,87 @@ } } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jest/reporters/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" }, "engines": { "node": ">=10" @@ -2750,6 +2879,18 @@ "node": ">=10" } }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/reporters/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -2838,6 +2979,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/transform/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/transform/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", @@ -2855,6 +3066,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@jest/types/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@jest/types/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -2894,9 +3175,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -2981,6 +3262,55 @@ "prompts": "^2.4.0" } }, + "node_modules/@react-native-community/cli-clean/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@react-native-community/cli-clean/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3027,6 +3357,15 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-clean/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-clean/node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3087,13 +3426,25 @@ "node": ">=0.10.0" } }, - "node_modules/@react-native-community/cli-clean/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "node_modules/@react-native-community/cli-clean/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "isexe": "^2.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-clean/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" }, "bin": { "which": "bin/which" @@ -3163,6 +3514,55 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-doctor/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-doctor/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@react-native-community/cli-doctor/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3218,6 +3618,15 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-doctor/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-doctor/node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3281,6 +3690,18 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-doctor/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-doctor/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3306,6 +3727,76 @@ "ip": "^1.1.5" } }, + "node_modules/@react-native-community/cli-hermes/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@react-native-community/cli-hermes/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-hermes/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-platform-android": { "version": "9.3.4", "resolved": "https://registry.npmjs.org/@react-native-community/cli-platform-android/-/cli-platform-android-9.3.4.tgz", @@ -3321,6 +3812,55 @@ "slash": "^3.0.0" } }, + "node_modules/@react-native-community/cli-platform-android/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-android/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@react-native-community/cli-platform-android/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3367,6 +3907,15 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli-platform-android/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-platform-android/node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3427,6 +3976,18 @@ "node": ">=0.10.0" } }, + "node_modules/@react-native-community/cli-platform-android/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-platform-android/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3452,6 +4013,55 @@ "ora": "^5.4.1" } }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@react-native-community/cli-platform-ios/node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -3498,10 +4108,19 @@ "node": ">=6" } }, - "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "node_modules/@react-native-community/cli-platform-ios/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3558,6 +4177,18 @@ "node": ">=0.10.0" } }, + "node_modules/@react-native-community/cli-platform-ios/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-platform-ios/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3588,6 +4219,76 @@ "readline": "^1.3.0" } }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-plugin-metro/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-server-api": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@react-native-community/cli-server-api/-/cli-server-api-9.2.1.tgz", @@ -3630,6 +4331,64 @@ "@types/yargs-parser": "*" } }, + "node_modules/@react-native-community/cli-server-api/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@react-native-community/cli-server-api/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-server-api/node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -3645,6 +4404,45 @@ "node": ">= 10" } }, + "node_modules/@react-native-community/cli-server-api/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@react-native-community/cli-server-api/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@react-native-community/cli-server-api/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/@react-native-community/cli-tools": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/@react-native-community/cli-tools/-/cli-tools-9.2.1.tgz", @@ -3662,6 +4460,55 @@ "shell-quote": "^1.7.3" } }, + "node_modules/@react-native-community/cli-tools/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli-tools/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/@react-native-community/cli-tools/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3678,6 +4525,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@react-native-community/cli-tools/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli-tools/node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3693,13 +4549,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" @@ -3708,19 +4564,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@react-native-community/cli-tools/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/@react-native-community/cli-tools/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "p-limit": "^3.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/@react-native-community/cli-types": { @@ -3732,10 +4585,59 @@ "joi": "^17.2.1" } }, - "node_modules/@react-native-community/cli/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/@react-native-community/cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@react-native-community/cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@react-native-community/cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@react-native-community/cli/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "dependencies": { "nice-try": "^1.0.4", @@ -3787,6 +4689,15 @@ "node": ">=6" } }, + "node_modules/@react-native-community/cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli/node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -3838,6 +4749,18 @@ "node": ">=0.10.0" } }, + "node_modules/@react-native-community/cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@react-native-community/cli/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -3926,6 +4849,28 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@testing-library/react-native": { + "version": "12.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.4.3.tgz", + "integrity": "sha512-WLE7VbbR5jZJQl3vfNK7Wt+IHnzhOxyu95Mr56EHmzH3XhC8DkrPVAnUq9asq/QWj4aGnymbinFx6zZys/WZmA==", + "dev": true, + "dependencies": { + "jest-matcher-utils": "^29.7.0", + "pretty-format": "^29.7.0", + "redent": "^3.0.0" + }, + "peerDependencies": { + "jest": ">=28.0.0", + "react": ">=16.8.0", + "react-native": ">=0.59", + "react-test-renderer": ">=16.8.0" + }, + "peerDependenciesMeta": { + "jest": { + "optional": true + } + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3940,9 +4885,9 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" @@ -3959,9 +4904,9 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "dependencies": { "@babel/types": "^7.20.7" @@ -3977,15 +4922,15 @@ } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -4001,43 +4946,196 @@ } }, "node_modules/@types/jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", - "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, "dependencies": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" } }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@types/jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@types/jest/node_modules/diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@types/jest/node_modules/jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/@types/jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/@types/jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", - "dev": true + "version": "20.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.1.tgz", + "integrity": "sha512-DsXojJUES2M+FE8CpptJTKpg+r54moV9ZEncPstni1WHFmTcCzeFLnMFfyhCVS8XNOy/OQG+8lVxRLRrVHmV5A==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "node_modules/@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", "dev": true }, "node_modules/@types/react": { - "version": "18.2.38", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz", - "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==", + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -4046,9 +5144,9 @@ } }, "node_modules/@types/react-native": { - "version": "0.72.7", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.7.tgz", - "integrity": "sha512-LvxJD7VINBiJVcY9UgUVcmPMPiKGO5jHjPM6JrchfP+z1zx0AENL6UOGng1ueaHTRROMTVxZRzO7WVi6DFrMyw==", + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz", + "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==", "dev": true, "dependencies": { "@react-native/virtualized-lists": "^0.72.4", @@ -4056,9 +5154,15 @@ } }, "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "node_modules/@types/stack-utils": { @@ -4068,33 +5172,35 @@ "dev": true }, "node_modules/@types/yargs": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", - "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz", - "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "5.5.0", - "@typescript-eslint/scope-manager": "5.5.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4147,18 +5253,16 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz", - "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4168,41 +5272,41 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", - "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", - "debug": "^4.3.2" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4212,7 +5316,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "*" }, "peerDependenciesMeta": { "typescript": { @@ -4220,27 +5324,10 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz", - "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/types": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz", - "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4251,17 +5338,17 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz", - "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4310,14 +5397,73 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz", - "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.5.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4327,6 +5473,12 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -4359,9 +5511,9 @@ } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -4471,18 +5623,15 @@ } }, "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=4" } }, "node_modules/anymatch": { @@ -4540,12 +5689,6 @@ "node": ">=4" } }, - "node_modules/ast-types/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, "node_modules/astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", @@ -4567,15 +5710,6 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -4606,6 +5740,76 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/babel-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/babel-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/babel-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -4638,13 +5842,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "semver": "^6.3.1" }, "peerDependencies": { @@ -4652,12 +5856,12 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", - "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "core-js-compat": "^3.33.1" }, "peerDependencies": { @@ -4665,12 +5869,12 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.4.4" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -4819,9 +6023,9 @@ } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -4838,9 +6042,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, "bin": { @@ -4962,9 +6166,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true, "funding": [ { @@ -4982,19 +6186,17 @@ ] }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=4" } }, "node_modules/char-regex": { @@ -5049,9 +6251,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "engines": { "node": ">=6" @@ -5061,14 +6263,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone": { @@ -5111,21 +6316,18 @@ "dev": true }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/colorette": { @@ -5203,7 +6405,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/connect": { @@ -5243,12 +6445,12 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.33.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", - "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", + "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", "dev": true, "dependencies": { - "browserslist": "^4.22.1" + "browserslist": "^4.22.2" }, "funding": { "type": "opencollective", @@ -5276,6 +6478,19 @@ "node": ">=4" } }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/cosmiconfig/node_modules/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5289,6 +6504,15 @@ "node": ">=4" } }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/create-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", @@ -5310,35 +6534,105 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/create-jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", - "dev": true - }, - "node_modules/dateformat": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.2.tgz", - "integrity": "sha1-mk30v/FYrC80vGN6vbFUcWB+Flk=", + "node_modules/create-jest/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "*" - } - }, + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/create-jest/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/create-jest/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/create-jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/create-jest/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true + }, + "node_modules/dateformat": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.2.tgz", + "integrity": "sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -5372,10 +6666,18 @@ } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", @@ -5405,9 +6707,9 @@ } }, "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, "dependencies": { "globby": "^11.0.1", @@ -5461,12 +6763,12 @@ } }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-glob": { @@ -5500,9 +6802,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", "dev": true }, "node_modules/emittery": { @@ -5541,27 +6843,6 @@ "once": "^1.4.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/envinfo": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", @@ -5630,49 +6911,49 @@ } }, "node_modules/eslint": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", - "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.0.4", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.1.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -5685,9 +6966,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -5697,15 +6978,15 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "eslint": ">=7.28.0", @@ -5718,58 +6999,83 @@ } }, "node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "estraverse": "^4.1.1" }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/eslint/node_modules/escape-string-regexp": { @@ -5784,58 +7090,71 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10.13.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -5848,44 +7167,50 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/lru-cache": { + "node_modules/eslint/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "p-limit": "^3.0.2" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, @@ -5896,24 +7221,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/espree": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", - "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.6.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -5930,9 +7252,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -5941,6 +7263,15 @@ "node": ">=0.10" } }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -5953,7 +7284,7 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { + "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -5962,6 +7293,15 @@ "node": ">=4.0" } }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -6012,15 +7352,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -6046,15 +7377,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/expect/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -6062,15 +7384,15 @@ "dev": true }, "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -6080,7 +7402,19 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { @@ -6092,13 +7426,13 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -6222,6 +7556,21 @@ "node": ">=6" } }, + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/find-cache-dir/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -6278,12 +7627,13 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -6291,9 +7641,9 @@ } }, "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/flow-parser": { @@ -6331,7 +7681,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/fsevents": { @@ -6357,12 +7707,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -6403,15 +7747,15 @@ } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -6423,15 +7767,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/globals": { @@ -6444,16 +7788,16 @@ } }, "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -6469,25 +7813,31 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { - "node": ">= 0.4.0" + "node": ">=4" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, "node_modules/hermes-estree": { @@ -6558,12 +7908,12 @@ } }, "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=8.12.0" + "node": ">=10.17.0" } }, "node_modules/ieee754": { @@ -6587,9 +7937,9 @@ ] }, "node_modules/ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -6608,14 +7958,26 @@ } }, "node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, "engines": { "node": ">=4" } @@ -6642,7 +8004,7 @@ "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" @@ -6660,7 +8022,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", @@ -6704,16 +8066,16 @@ "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6731,7 +8093,7 @@ "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -6756,9 +8118,9 @@ } }, "node_modules/is-git-dirty": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-git-dirty/-/is-git-dirty-2.0.1.tgz", - "integrity": "sha512-zn3CNLDbSR+y7+VDDw7/SwTRRuECn4OpAyelo5MDN+gVxdzM8SUDd51ZwPIOxhljED44Riu0jiiNtC8w0bcLdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-git-dirty/-/is-git-dirty-2.0.2.tgz", + "integrity": "sha512-U3YCo+GKR/rDsY7r0v/LBICbQwsx859tDQnAT+v0E/zCDeWbQ1TUt1FtyExeyik7VIJlYOLHCIifLdz71HDalg==", "dev": true, "dependencies": { "execa": "^4.0.3", @@ -6806,6 +8168,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-git-dirty/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, "node_modules/is-git-repository": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-git-repository/-/is-git-repository-2.0.0.tgz", @@ -6854,6 +8225,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-git-repository/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -6989,7 +8369,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/isobject": { @@ -7002,9 +8382,9 @@ } }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, "engines": { "node": ">=8" @@ -7040,6 +8420,27 @@ "node": ">=10" } }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-source-maps": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", @@ -7107,21 +8508,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-changed-files/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/jest-circus": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", @@ -7154,65 +8540,74 @@ } }, "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/jest-circus/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-circus/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "node_modules/jest-circus/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/jest-cli": { "version": "29.7.0", @@ -7247,45 +8642,74 @@ } } }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/jest-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=12" + "node": ">=7.0.0" + } + }, + "node_modules/jest-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-config": { @@ -7334,313 +8758,358 @@ } }, "node_modules/jest-config/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "node_modules/jest-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "detect-newline": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-each": { + "node_modules/jest-diff": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-each/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-each/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "node_modules/jest-diff/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/jest-haste-map": { + "node_modules/jest-docblock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", "dev": true, "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" + "detect-newline": "^3.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-html-reporter": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/jest-html-reporter/-/jest-html-reporter-3.10.2.tgz", - "integrity": "sha512-XRBa5ylHPUQoo8aJXEEdKsTruieTdlPbRktMx9WG9evMTxzJEKGFMaw5x+sQxJuClWdNR72GGwbOaz+6HIlksA==", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/test-result": "^29.0.2", - "@jest/types": "^29.0.2", - "dateformat": "3.0.2", - "mkdirp": "^1.0.3", - "strip-ansi": "6.0.1", - "xmlbuilder": "15.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4.8.3" + "node": ">=8" }, - "peerDependencies": { - "jest": "19.x - 29.x", - "typescript": "^3.7.x || ^4.3.x || ^5.x" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-html-reporter/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-html-reporter/node_modules/xmlbuilder": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.0.0.tgz", - "integrity": "sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==", + "node_modules/jest-each/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8.0" + "node": ">=7.0.0" } }, - "node_modules/jest-junit": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.0.0.tgz", - "integrity": "sha512-JSHR+Dhb32FGJaiKkqsB7AR3OqWKtldLd6ZH2+FJ8D4tsweb8Id8zEVReU4+OlrRO1ZluqJLQEETm+Q6/KilBg==", + "node_modules/jest-each/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "mkdirp": "^1.0.4", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2", - "xml": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=10.12.0" + "node": ">=8" } }, - "node_modules/jest-junit/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-junit/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector": { + "node_modules/jest-haste-map": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", "dev": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-html-reporter": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/jest-html-reporter/-/jest-html-reporter-3.10.2.tgz", + "integrity": "sha512-XRBa5ylHPUQoo8aJXEEdKsTruieTdlPbRktMx9WG9evMTxzJEKGFMaw5x+sQxJuClWdNR72GGwbOaz+6HIlksA==", "dev": true, + "dependencies": { + "@jest/test-result": "^29.0.2", + "@jest/types": "^29.0.2", + "dateformat": "3.0.2", + "mkdirp": "^1.0.3", + "strip-ansi": "6.0.1", + "xmlbuilder": "15.0.0" + }, "engines": { - "node": ">=10" + "node": ">=4.8.3" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "jest": "19.x - 29.x", + "typescript": "^3.7.x || ^4.3.x || ^5.x" } }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-junit": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.2.0.tgz", + "integrity": "sha512-B0XNlotl1rdsvFZkFfoa19mc634+rrd8E4Sskb92Bb8MmSXeWV9XJGUyctunZS1W410uAxcyYuPUGVnbcOH8cg==", "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2", + "xml": "^1.0.1" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10.12.0" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { + "node_modules/jest-leak-detector": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/jest-matcher-utils": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", @@ -7657,70 +9126,75 @@ } }, "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/jest-matcher-utils/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-matcher-utils/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-matcher-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/jest-message-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", @@ -7741,38 +9215,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "node_modules/jest-message-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-message-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-mock": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", @@ -7810,40 +9322,110 @@ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-resolve/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "node_modules/jest-resolve/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "node_modules/jest-resolve/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-resolve/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-resolve/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-runner": { @@ -7878,19 +9460,74 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-runner/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "yocto-queue": "^0.1.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runner/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runner/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-runtime": { @@ -7926,6 +9563,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-runtime/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-runtime/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-runtime/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-runtime/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", @@ -7971,48 +9678,61 @@ } }, "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/jest-snapshot/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "node_modules/jest-snapshot/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-snapshot/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-snapshot/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/jest-snapshot/node_modules/lru-cache": { @@ -8027,26 +9747,6 @@ "node": ">=10" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/jest-snapshot/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -8059,7 +9759,19 @@ "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/jest-snapshot/node_modules/yallist": { @@ -8085,6 +9797,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-util/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-util/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-validate": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", @@ -8103,12 +9885,15 @@ } }, "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" @@ -8126,35 +9911,61 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=7.0.0" } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "node_modules/jest-validate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/jest-validate/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-watcher": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", @@ -8174,6 +9985,76 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-watcher/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jest-watcher/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", @@ -8189,6 +10070,15 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -8205,9 +10095,9 @@ } }, "node_modules/jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-2.0.0.tgz", + "integrity": "sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ==", "dev": true, "optional": true, "bin": { @@ -8293,6 +10183,64 @@ "@babel/preset-env": "^7.1.6" } }, + "node_modules/jscodeshift/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jscodeshift/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jscodeshift/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jscodeshift/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/jscodeshift/node_modules/rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -8305,6 +10253,18 @@ "rimraf": "bin.js" } }, + "node_modules/jscodeshift/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/jscodeshift/node_modules/temp": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", @@ -8340,6 +10300,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -8361,7 +10327,7 @@ "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json5": { @@ -8385,6 +10351,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8461,7 +10436,7 @@ "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "node_modules/lodash.merge": { @@ -8492,6 +10467,76 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/logkitty": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/logkitty/-/logkitty-0.7.1.tgz", @@ -8506,6 +10551,21 @@ "logkitty": "bin/logkitty.js" } }, + "node_modules/logkitty/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/logkitty/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -8517,6 +10577,24 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/logkitty/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/logkitty/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/logkitty/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -8818,6 +10896,21 @@ "@types/yargs-parser": "*" } }, + "node_modules/metro-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/metro-config/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -8830,6 +10923,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/metro-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/metro-config/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro-config/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/metro-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/metro-config/node_modules/jest-get-type": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", @@ -8871,6 +11007,24 @@ "node": ">= 10" } }, + "node_modules/metro-config/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/metro-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/metro-core": { "version": "0.72.4", "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.72.4.tgz", @@ -8929,6 +11083,55 @@ "@types/yargs-parser": "*" } }, + "node_modules/metro-file-map/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro-file-map/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/metro-file-map/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro-file-map/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/metro-file-map/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -8938,6 +11141,15 @@ "ms": "2.0.0" } }, + "node_modules/metro-file-map/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/metro-file-map/node_modules/jest-regex-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", @@ -8978,6 +11190,21 @@ "node": ">= 10.13.0" } }, + "node_modules/metro-file-map/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/metro-file-map/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8985,18 +11212,15 @@ "dev": true }, "node_modules/metro-file-map/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/metro-hermes-compiler": { @@ -9020,6 +11244,21 @@ "metro-inspector-proxy": "src/cli.js" } }, + "node_modules/metro-inspector-proxy/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/metro-inspector-proxy/node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -9031,6 +11270,24 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/metro-inspector-proxy/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro-inspector-proxy/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/metro-inspector-proxy/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9060,6 +11317,27 @@ "node": ">=8" } }, + "node_modules/metro-inspector-proxy/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/metro-inspector-proxy/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -9285,6 +11563,37 @@ "nullthrows": "^1.1.1" } }, + "node_modules/metro/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/metro/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/metro/node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -9302,6 +11611,24 @@ "wrap-ansi": "^6.2.0" } }, + "node_modules/metro/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/metro/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/metro/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9322,6 +11649,15 @@ "klaw": "^1.0.0" } }, + "node_modules/metro/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/metro/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -9336,6 +11672,21 @@ "node": ">= 10.13.0" } }, + "node_modules/metro/node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/metro/node_modules/jsonfile": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", @@ -9373,18 +11724,15 @@ } }, "node_modules/metro/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">=8" } }, "node_modules/metro/node_modules/wrap-ansi": { @@ -9401,6 +11749,27 @@ "node": ">=8" } }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/metro/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -9497,6 +11866,15 @@ "node": ">=6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -9519,15 +11897,15 @@ } }, "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, "bin": { "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -9539,7 +11917,13 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "node_modules/negotiator": { @@ -9611,9 +11995,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/node-stream-zip": { @@ -9695,7 +12079,7 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" @@ -9729,17 +12113,17 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -9768,6 +12152,76 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -9787,15 +12241,15 @@ } }, "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9807,10 +12261,25 @@ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { @@ -9888,7 +12357,7 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9976,15 +12445,18 @@ } }, "node_modules/prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -10000,17 +12472,17 @@ } }, "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -10031,15 +12503,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -10073,9 +12536,9 @@ } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -10148,10 +12611,31 @@ "ws": "^7" } }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "node_modules/react-native": { @@ -10204,30 +12688,30 @@ } }, "node_modules/react-native-builder-bob": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/react-native-builder-bob/-/react-native-builder-bob-0.18.2.tgz", - "integrity": "sha512-HA7ryoG99tkWh92s7Qb/619qAAfa3TMAKP4Q5l/smqZQwnJ77z5ESiPgRZl8gQMiCnrmmPVb/c5yUscKOL9GdQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "browserslist": "^4.16.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/react-native-builder-bob/-/react-native-builder-bob-0.18.3.tgz", + "integrity": "sha512-togj+ClsPAsTK3ZFmFZVIftUIkxvN1YxJws0/6sQIlAr14U3rvtBseOQAQM0Pora1GD2aObdBVHDVhKBHWojLA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.5", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-flow": "^7.17.12", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "browserslist": "^4.20.4", + "cosmiconfig": "^7.0.1", "cross-spawn": "^7.0.3", "dedent": "^0.7.0", - "del": "^6.0.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", + "del": "^6.1.1", + "fs-extra": "^10.1.0", + "glob": "^8.0.3", "is-git-dirty": "^2.0.1", - "json5": "^2.1.3", - "prompts": "^2.4.0", + "json5": "^2.2.1", + "kleur": "^4.1.4", + "prompts": "^2.4.2", "which": "^2.0.2", - "yargs": "^16.2.0" + "yargs": "^17.5.1" }, "bin": { "bob": "bin/bob" @@ -10236,13 +12720,22 @@ "node": ">= 10.0.0" }, "optionalDependencies": { - "jetifier": "^1.6.6" + "jetifier": "^2.0.0" + } + }, + "node_modules/react-native-builder-bob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, "node_modules/react-native-builder-bob/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -10255,35 +12748,43 @@ "node": ">=10" } }, + "node_modules/react-native-builder-bob/node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, "node_modules/react-native-builder-bob/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/react-native-builder-bob/node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/react-native-builder-bob/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/react-native-builder-bob/node_modules/jsonfile": { @@ -10298,19 +12799,31 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/react-native-builder-bob/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/react-native-builder-bob/node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" + } + }, + "node_modules/react-native-builder-bob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, "node_modules/react-native-builder-bob/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "engines": { "node": ">= 10.0.0" @@ -10359,6 +12872,76 @@ "@types/yargs-parser": "*" } }, + "node_modules/react-native/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/react-native/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/react-native/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/react-native/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/react-native/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/react-native/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/react-native/node_modules/pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -10374,13 +12957,22 @@ "node": ">= 10" } }, - "node_modules/react-native/node_modules/ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "node_modules/react-native/node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-native/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "async-limiter": "~1.0.0" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/react-refresh": { @@ -10405,6 +12997,20 @@ "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, + "node_modules/react-test-renderer": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", + "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", + "dev": true, + "dependencies": { + "react-is": "^18.1.0", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.22.0" + }, + "peerDependencies": { + "react": "^18.1.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -10440,11 +13046,18 @@ "node": ">= 4" } }, - "node_modules/recast/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/regenerate": { "version": "1.4.2", @@ -10465,9 +13078,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "node_modules/regenerator-transform": { @@ -10479,18 +13092,6 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -10532,7 +13133,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -10545,13 +13146,17 @@ "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10569,7 +13174,7 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -10578,15 +13183,6 @@ "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", @@ -10872,33 +13468,6 @@ "node": ">=6" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10921,7 +13490,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/stack-utils": { @@ -11085,6 +13654,18 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -11104,15 +13685,27 @@ "dev": true }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/temp": { @@ -11154,7 +13747,7 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/throat": { @@ -11206,7 +13799,7 @@ "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, "engines": { "node": ">=4" @@ -11315,19 +13908,10 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/ts-jest/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "node_modules/tsutils": { @@ -11345,6 +13929,12 @@ "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11417,12 +14007,18 @@ "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, "engines": { "node": ">=0.10.0" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -11544,16 +14140,19 @@ "node": ">= 0.4.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } }, "node_modules/v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", @@ -11604,9 +14203,9 @@ "dev": true }, "node_modules/whatwg-fetch": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", "dev": true }, "node_modules/whatwg-url": { @@ -11640,15 +14239,6 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -11666,10 +14256,43 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/write-file-atomic": { @@ -11686,32 +14309,29 @@ } }, "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } + "dependencies": { + "async-limiter": "~1.0.0" } }, "node_modules/xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", "dev": true }, + "node_modules/xmlbuilder": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.0.0.tgz", + "integrity": "sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -11746,30 +14366,30 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -11786,6 +14406,12 @@ } }, "dependencies": { + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, "@ampproject/remapping": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", @@ -11797,89 +14423,37 @@ } }, "@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "requires": { - "@babel/highlight": "^7.22.13", + "@babel/highlight": "^7.23.4", "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/compat-data": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", - "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true }, "@babel/core": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", - "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", "dev": true, "requires": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -11888,12 +14462,12 @@ } }, "@babel/generator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", - "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", "dev": true, "requires": { - "@babel/types": "^7.23.3", + "@babel/types": "^7.23.6", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -11918,30 +14492,30 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.7.tgz", + "integrity": "sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", "semver": "^6.3.1" @@ -11959,9 +14533,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz", + "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.22.6", @@ -12092,9 +14666,9 @@ } }, "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true }, "@babel/helper-validator-identifier": { @@ -12104,9 +14678,9 @@ "dev": true }, "@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true }, "@babel/helper-wrap-function": { @@ -12121,83 +14695,31 @@ } }, "@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", "dev": true, "requires": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" } }, "@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@babel/parser": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", - "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -12221,9 +14743,9 @@ } }, "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", - "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz", + "integrity": "sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", @@ -12422,12 +14944,12 @@ } }, "@babel/plugin-syntax-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.0.tgz", - "integrity": "sha512-8zv2+xiPHwly31RK4RmnEYY5zziuF3O7W2kIDW+07ewWDh6Oi0dRq8kwvulRkFgt6DB97RlKs5c1y068iPlCUg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-logical-assignment-operators": { @@ -12503,12 +15025,12 @@ } }, "@babel/plugin-syntax-typescript": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz", - "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-syntax-unicode-sets-regex": { @@ -12531,9 +15053,9 @@ } }, "@babel/plugin-transform-async-generator-functions": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz", - "integrity": "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.7.tgz", + "integrity": "sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.22.20", @@ -12563,9 +15085,9 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz", - "integrity": "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5" @@ -12582,9 +15104,9 @@ } }, "@babel/plugin-transform-class-static-block": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz", - "integrity": "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, "requires": { "@babel/helper-create-class-features-plugin": "^7.22.15", @@ -12593,16 +15115,15 @@ } }, "@babel/plugin-transform-classes": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz", - "integrity": "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz", + "integrity": "sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", @@ -12648,9 +15169,9 @@ } }, "@babel/plugin-transform-dynamic-import": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz", - "integrity": "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12668,9 +15189,9 @@ } }, "@babel/plugin-transform-export-namespace-from": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz", - "integrity": "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12688,12 +15209,13 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", - "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" } }, "@babel/plugin-transform-function-name": { @@ -12708,9 +15230,9 @@ } }, "@babel/plugin-transform-json-strings": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz", - "integrity": "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12727,9 +15249,9 @@ } }, "@babel/plugin-transform-logical-assignment-operators": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz", - "integrity": "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12808,9 +15330,9 @@ } }, "@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz", - "integrity": "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12818,9 +15340,9 @@ } }, "@babel/plugin-transform-numeric-separator": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz", - "integrity": "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12828,9 +15350,9 @@ } }, "@babel/plugin-transform-object-rest-spread": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz", - "integrity": "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, "requires": { "@babel/compat-data": "^7.23.3", @@ -12851,9 +15373,9 @@ } }, "@babel/plugin-transform-optional-catch-binding": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz", - "integrity": "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12861,9 +15383,9 @@ } }, "@babel/plugin-transform-optional-chaining": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz", - "integrity": "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.22.5", @@ -12891,9 +15413,9 @@ } }, "@babel/plugin-transform-private-property-in-object": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz", - "integrity": "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -12912,34 +15434,34 @@ } }, "@babel/plugin-transform-react-display-name": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.0.tgz", - "integrity": "sha512-FJFdJAqaCpndL+pIf0aeD/qlQwT7QXOvR6Cc8JPvNhKJBi2zc/DPc4g05Y3fbD/0iWAMQFGij4+Xw+4L/BMpTg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz", + "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-react-jsx": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.16.0.tgz", - "integrity": "sha512-rqDgIbukZ44pqq7NIRPGPGNklshPkvlmvqjdx3OZcGPk4zGIenYkxDTvl3LsSL8gqcc3ZzGmXPE6hR/u/voNOw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", + "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-jsx": "^7.16.0", - "@babel/types": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/types": "^7.23.4" } }, "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.0.tgz", - "integrity": "sha512-qq65iSqBRq0Hr3wq57YG2AmW0H6wgTnIzpffTphrUWUgLCOK+zf1f7G0vuOiXrp7dU1qq+fQBoqZ3wCDAkhFzw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", + "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", "dev": true, "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.0" + "@babel/plugin-transform-react-jsx": "^7.22.5" } }, "@babel/plugin-transform-react-jsx-self": { @@ -12961,13 +15483,13 @@ } }, "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.0.tgz", - "integrity": "sha512-NC/Bj2MG+t8Ef5Pdpo34Ay74X4Rt804h5y81PwOpfPtmAK3i6CizmQqwyBQzIepz1Yt8wNr2Z2L7Lu3qBMfZMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz", + "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" } }, "@babel/plugin-transform-regenerator": { @@ -12990,16 +15512,16 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.4.tgz", - "integrity": "sha512-ITwqpb6V4btwUG0YJR82o2QvmWrLgDnx/p2A3CTPYGaRgULkDiC0DRA2C4jlRB9uXGUEfaSS/IGHfVW+ohzYDw==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.23.7.tgz", + "integrity": "sha512-fa0hnfmiXc9fq/weK34MUV0drz2pOL/vfKWvN7Qw127hiUPabFCUMgAbYWcchRzMJit4o5ARsK/s+5h0249pLw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", "semver": "^6.3.1" } }, @@ -13050,14 +15572,15 @@ } }, "@babel/plugin-transform-typescript": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.1.tgz", - "integrity": "sha512-NO4XoryBng06jjw/qWEU2LhcLJr1tWkhpMam/H4eas/CDKMX/b2/Ylb6EI256Y7+FVPCawwSM1rrJNOpDiz+Lg==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", + "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.16.0" + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.23.6", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-typescript": "^7.23.3" } }, "@babel/plugin-transform-unicode-escapes": { @@ -13100,18 +15623,18 @@ } }, "@babel/preset-env": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz", - "integrity": "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.8.tgz", + "integrity": "sha512-lFlpmkApLkEP6woIKprO6DO60RImpatTQKtz4sUcDjVcK8M8mQ4sZsuxaTMNOZf0sqAq/ReYW1ZBHnOQwKpLWA==", "dev": true, "requires": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", + "@babel/helper-validator-option": "^7.23.5", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -13132,25 +15655,25 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.23.3", - "@babel/plugin-transform-async-generator-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.7", "@babel/plugin-transform-async-to-generator": "^7.23.3", "@babel/plugin-transform-block-scoped-functions": "^7.23.3", - "@babel/plugin-transform-block-scoping": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", "@babel/plugin-transform-class-properties": "^7.23.3", - "@babel/plugin-transform-class-static-block": "^7.23.3", - "@babel/plugin-transform-classes": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.8", "@babel/plugin-transform-computed-properties": "^7.23.3", "@babel/plugin-transform-destructuring": "^7.23.3", "@babel/plugin-transform-dotall-regex": "^7.23.3", "@babel/plugin-transform-duplicate-keys": "^7.23.3", - "@babel/plugin-transform-dynamic-import": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", "@babel/plugin-transform-exponentiation-operator": "^7.23.3", - "@babel/plugin-transform-export-namespace-from": "^7.23.3", - "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.6", "@babel/plugin-transform-function-name": "^7.23.3", - "@babel/plugin-transform-json-strings": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", "@babel/plugin-transform-literals": "^7.23.3", - "@babel/plugin-transform-logical-assignment-operators": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", "@babel/plugin-transform-member-expression-literals": "^7.23.3", "@babel/plugin-transform-modules-amd": "^7.23.3", "@babel/plugin-transform-modules-commonjs": "^7.23.3", @@ -13158,15 +15681,15 @@ "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.23.3", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.3", - "@babel/plugin-transform-numeric-separator": "^7.23.3", - "@babel/plugin-transform-object-rest-spread": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", "@babel/plugin-transform-object-super": "^7.23.3", - "@babel/plugin-transform-optional-catch-binding": "^7.23.3", - "@babel/plugin-transform-optional-chaining": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", "@babel/plugin-transform-parameters": "^7.23.3", "@babel/plugin-transform-private-methods": "^7.23.3", - "@babel/plugin-transform-private-property-in-object": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", "@babel/plugin-transform-property-literals": "^7.23.3", "@babel/plugin-transform-regenerator": "^7.23.3", "@babel/plugin-transform-reserved-words": "^7.23.3", @@ -13180,22 +15703,22 @@ "@babel/plugin-transform-unicode-regex": "^7.23.3", "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", + "babel-plugin-polyfill-corejs2": "^0.4.7", + "babel-plugin-polyfill-corejs3": "^0.8.7", + "babel-plugin-polyfill-regenerator": "^0.5.4", "core-js-compat": "^3.31.0", "semver": "^6.3.1" } }, "@babel/preset-flow": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.16.0.tgz", - "integrity": "sha512-e5NE1EoPMpoHFkyFkMSj2h9tu7OolARcUHki8mnBv4NiFK9so+UrhbvT9mV99tMJOUEx8BOj67T6dXvGcTeYeQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz", + "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-flow-strip-types": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-flow-strip-types": "^7.23.3" } }, "@babel/preset-modules": { @@ -13210,40 +15733,42 @@ } }, "@babel/preset-react": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz", - "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz", + "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-react-jsx": "^7.16.0", - "@babel/plugin-transform-react-jsx-development": "^7.16.0", - "@babel/plugin-transform-react-pure-annotations": "^7.16.0" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-transform-react-display-name": "^7.23.3", + "@babel/plugin-transform-react-jsx": "^7.22.15", + "@babel/plugin-transform-react-jsx-development": "^7.22.5", + "@babel/plugin-transform-react-pure-annotations": "^7.23.3" } }, "@babel/preset-typescript": { - "version": "7.16.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.5.tgz", - "integrity": "sha512-lmAWRoJ9iOSvs3DqOndQpj8XqXkzaiQs50VG/zESiI9D3eoZhGriU675xNCr0UwvsuXrhMAGvyk1w+EVWF3u8Q==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", + "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.16.1" + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-syntax-jsx": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-typescript": "^7.23.3" } }, "@babel/register": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", - "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.23.7.tgz", + "integrity": "sha512-EjJeB6+kvpk+Y5DAkEAmbOBEFkh9OASx0huoEkqYTFxAZHzOAX2Oh5uwAUuL2rUddqfM0SA+KPXV2TbzoZ2kvQ==", "dev": true, "requires": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", "make-dir": "^2.1.0", - "pirates": "^4.0.5", + "pirates": "^4.0.6", "source-map-support": "^0.5.16" }, "dependencies": { @@ -13282,12 +15807,20 @@ "dev": true }, "@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz", + "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==", "dev": true, "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + } } }, "@babel/template": { @@ -13302,30 +15835,30 @@ } }, "@babel/traverse": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", - "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", "dev": true, "requires": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.3", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", - "debug": "^4.1.0", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", - "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", "dev": true, "requires": { - "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } @@ -13336,20 +15869,35 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, + "@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.3.0" + } + }, + "@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true + }, "@eslint/eslintrc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.4.tgz", - "integrity": "sha512-h8Vx6MdxwWI2WM8/zREHMoqdgLNXEL4QX3MWSVMdyNJGvXVOs+6lp+m2hc3FnuMHDc4poxFNI20vCk0OmI4G0Q==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.0.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "dependencies": { @@ -13360,30 +15908,14 @@ "dev": true }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -13393,12 +15925,6 @@ "argparse": "^2.0.1" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -13407,6 +15933,12 @@ } } }, + "@eslint/js": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", + "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "dev": true + }, "@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -13423,20 +15955,26 @@ } }, "@humanwhocodes/config-array": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.6.0.tgz", - "integrity": "sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "@istanbuljs/load-nyc-config": { @@ -13450,14 +15988,6 @@ "get-package-type": "^0.1.0", "js-yaml": "^3.13.1", "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } } }, "@istanbuljs/schema": { @@ -13478,6 +16008,57 @@ "jest-message-util": "^29.7.0", "jest-util": "^29.7.0", "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/core": { @@ -13517,27 +16098,53 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -13571,6 +16178,55 @@ "requires": { "@types/yargs-parser": "*" } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -13603,14 +16259,6 @@ "dev": true, "requires": { "jest-get-type": "^29.6.3" - }, - "dependencies": { - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - } } }, "@jest/fake-timers": { @@ -13671,6 +16319,46 @@ "v8-to-istanbul": "^9.0.1" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "istanbul-lib-instrument": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", @@ -13702,6 +16390,15 @@ "lru-cache": "^6.0.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -13775,6 +16472,57 @@ "pirates": "^4.0.4", "slash": "^3.0.0", "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jest/types": { @@ -13789,6 +16537,57 @@ "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@jridgewell/gen-mapping": { @@ -13821,9 +16620,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.21.tgz", + "integrity": "sha512-SRfKmRe1KvYnxjEMtxEr+J4HIeMX5YBg/qhRHpxEIGjhX1rshcHlnFUE9K0GazhVKWM7B+nARSkV8LuvJdJ5/g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", @@ -13881,6 +16680,40 @@ "semver": "^6.3.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -13926,6 +16759,12 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -13962,6 +16801,15 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -13985,6 +16833,40 @@ "prompts": "^2.4.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14022,6 +16904,12 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -14064,6 +16952,15 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14135,6 +17032,40 @@ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14180,6 +17111,12 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -14225,6 +17162,15 @@ "ansi-regex": "^4.1.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14247,6 +17193,57 @@ "chalk": "^4.1.2", "hermes-profile-transformer": "^0.0.6", "ip": "^1.1.5" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@react-native-community/cli-platform-android": { @@ -14264,6 +17261,40 @@ "slash": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14301,6 +17332,12 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -14343,6 +17380,15 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14367,6 +17413,40 @@ "ora": "^5.4.1" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -14404,6 +17484,12 @@ "pump": "^3.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -14446,6 +17532,15 @@ "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -14473,6 +17568,57 @@ "metro-resolver": "0.72.4", "metro-runtime": "0.72.4", "readline": "^1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@react-native-community/cli-server-api": { @@ -14514,6 +17660,46 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -14525,6 +17711,28 @@ "ansi-styles": "^4.0.0", "react-is": "^17.0.1" } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} } } }, @@ -14545,6 +17753,40 @@ "shell-quote": "^1.7.3" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -14555,6 +17797,12 @@ "path-exists": "^4.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -14564,15 +17812,6 @@ "p-locate": "^5.0.0" } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", @@ -14581,6 +17820,15 @@ "requires": { "p-limit": "^3.0.2" } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -14666,6 +17914,17 @@ "@sinonjs/commons": "^3.0.0" } }, + "@testing-library/react-native": { + "version": "12.4.3", + "resolved": "https://registry.npmjs.org/@testing-library/react-native/-/react-native-12.4.3.tgz", + "integrity": "sha512-WLE7VbbR5jZJQl3vfNK7Wt+IHnzhOxyu95Mr56EHmzH3XhC8DkrPVAnUq9asq/QWj4aGnymbinFx6zZys/WZmA==", + "dev": true, + "requires": { + "jest-matcher-utils": "^29.7.0", + "pretty-format": "^29.7.0", + "redent": "^3.0.0" + } + }, "@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -14680,9 +17939,9 @@ } }, "@types/babel__generator": { - "version": "7.6.7", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", - "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -14699,9 +17958,9 @@ } }, "@types/babel__traverse": { - "version": "7.20.4", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", - "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", "dev": true, "requires": { "@babel/types": "^7.20.7" @@ -14717,15 +17976,15 @@ } }, "@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" @@ -14741,43 +18000,158 @@ } }, "@types/jest": { - "version": "27.0.3", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz", - "integrity": "sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==", + "version": "27.5.2", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", + "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", "dev": true, "requires": { - "jest-diff": "^27.0.0", + "jest-matcher-utils": "^27.0.0", "pretty-format": "^27.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "diff-sequences": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", + "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "jest-diff": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", + "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "jest-get-type": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", + "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "dev": true + }, + "jest-matcher-utils": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", + "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.5.1", + "jest-get-type": "^27.5.1", + "pretty-format": "^27.5.1" + } + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/node": { - "version": "16.11.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.12.tgz", - "integrity": "sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw==", - "dev": true + "version": "20.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.1.tgz", + "integrity": "sha512-DsXojJUES2M+FE8CpptJTKpg+r54moV9ZEncPstni1WHFmTcCzeFLnMFfyhCVS8XNOy/OQG+8lVxRLRrVHmV5A==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } }, "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "dev": true }, "@types/prop-types": { - "version": "15.7.4", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", - "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "version": "15.7.11", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", + "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", "dev": true }, "@types/react": { - "version": "18.2.38", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz", - "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==", + "version": "18.2.47", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz", + "integrity": "sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ==", "dev": true, "requires": { "@types/prop-types": "*", @@ -14786,9 +18160,9 @@ } }, "@types/react-native": { - "version": "0.72.7", - "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.7.tgz", - "integrity": "sha512-LvxJD7VINBiJVcY9UgUVcmPMPiKGO5jHjPM6JrchfP+z1zx0AENL6UOGng1ueaHTRROMTVxZRzO7WVi6DFrMyw==", + "version": "0.72.8", + "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.72.8.tgz", + "integrity": "sha512-St6xA7+EoHN5mEYfdWnfYt0e8u6k2FR0P9s2arYgakQGFgU1f9FlPrIEcj0X24pLCF5c5i3WVuLCUdiCYHmOoA==", "dev": true, "requires": { "@react-native/virtualized-lists": "^0.72.4", @@ -14796,9 +18170,15 @@ } }, "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "dev": true + }, + "@types/semver": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", + "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", "dev": true }, "@types/stack-utils": { @@ -14808,33 +18188,35 @@ "dev": true }, "@types/yargs": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", - "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.5.0.tgz", - "integrity": "sha512-4bV6fulqbuaO9UMXU0Ia0o6z6if+kmMRW8rMRyfqXj/eGrZZRGedS4n0adeGNnjr8LKAM495hrQ7Tea52UWmQA==", - "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "5.5.0", - "@typescript-eslint/scope-manager": "5.5.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -14864,78 +18246,58 @@ } } }, - "@typescript-eslint/experimental-utils": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.5.0.tgz", - "integrity": "sha512-kjWeeVU+4lQ1SLYErRKV5yDXbWDPkpbzTUUlfAUifPYvpX0qZlrcCZ96/6oWxt3QxtK5WVhXz+KsnwW9cIW+3A==", + "@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" } }, - "@typescript-eslint/parser": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.5.0.tgz", - "integrity": "sha512-JsXBU+kgQOAgzUn2jPrLA+Rd0Y1dswOlX3hp8MuRO1hQDs6xgHtbCXEiAu7bz5hyVURxbXcA2draasMbNqrhmg==", + "@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.5.0", - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/typescript-estree": "5.5.0", - "debug": "^4.3.2" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" } }, - "@typescript-eslint/scope-manager": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.5.0.tgz", - "integrity": "sha512-0/r656RmRLo7CbN4Mdd+xZyPJ/fPCKhYdU6mnZx+8msAD8nJSP8EyCFkzbd6vNVZzZvWlMYrSNekqGrCBqFQhg==", + "@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.5.0.tgz", - "integrity": "sha512-OaYTqkW3GnuHxqsxxJ6KypIKd5Uw7bFiQJZRyNi1jbMJnK3Hc/DR4KwB6KJj6PBRkJJoaNwzMNv9vtTk87JhOg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.5.0.tgz", - "integrity": "sha512-pVn8btYUiYrjonhMAO0yG8lm7RApzy2L4RC7Td/mC/qFkyf6vRbGyZozoA94+w6D2Y2GRqpMoCWcwx/EUOzyoQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", - "@typescript-eslint/visitor-keys": "5.5.0", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "dependencies": { @@ -14965,16 +18327,64 @@ } } }, + "@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.5.0.tgz", - "integrity": "sha512-4GzJ1kRtsWzHhdM40tv0ZKHNSbkDhF0Woi/TDwVJX6UICwJItvP7ZTXbjTkCdrors7ww0sYe0t+cIKDAJwZ7Kw==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.5.0", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -15001,9 +18411,9 @@ } }, "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-jsx": { @@ -15085,12 +18495,12 @@ "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -15137,14 +18547,6 @@ "dev": true, "requires": { "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } } }, "astral-regex": { @@ -15165,12 +18567,6 @@ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, "babel-core": { "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", @@ -15191,6 +18587,57 @@ "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "babel-plugin-istanbul": { @@ -15219,33 +18666,33 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz", + "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==", "dev": true, "requires": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "semver": "^6.3.1" } }, "babel-plugin-polyfill-corejs3": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", - "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz", + "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3", + "@babel/helper-define-polyfill-provider": "^0.4.4", "core-js-compat": "^3.33.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz", + "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.4.3" + "@babel/helper-define-polyfill-provider": "^0.4.4" } }, "babel-plugin-syntax-trailing-function-commas": { @@ -15362,14 +18809,14 @@ } }, "browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" } }, @@ -15452,19 +18899,20 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001563", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", - "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", "dev": true }, "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "char-regex": { @@ -15501,19 +18949,19 @@ } }, "cli-spinners": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.1.tgz", - "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -15547,18 +18995,18 @@ "dev": true }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "colorette": { @@ -15629,7 +19077,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "connect": { @@ -15668,12 +19116,12 @@ "dev": true }, "core-js-compat": { - "version": "3.33.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.3.tgz", - "integrity": "sha512-cNzGqFsh3Ot+529GIXacjTJ7kegdt5fPXxCBVS1G0iaZpuo/tBz399ymceLJveQhFFZ8qThHiP3fzuoQjKN2ow==", + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.0.tgz", + "integrity": "sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==", "dev": true, "requires": { - "browserslist": "^4.22.1" + "browserslist": "^4.22.2" } }, "core-util-is": { @@ -15694,6 +19142,16 @@ "parse-json": "^4.0.0" }, "dependencies": { + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -15703,6 +19161,12 @@ "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true } } }, @@ -15719,6 +19183,57 @@ "jest-config": "^29.7.0", "jest-util": "^29.7.0", "prompts": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "cross-spawn": { @@ -15733,15 +19248,15 @@ } }, "csstype": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.10.tgz", - "integrity": "sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, "dateformat": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.2.tgz", - "integrity": "sha1-mk30v/FYrC80vGN6vbFUcWB+Flk=", + "integrity": "sha512-EelsCzH0gMC2YmXuMeaZ3c6md1sUJQxyb1XXc4xaisi/K6qKukqZhKPrEQyRkdNIncgYyLoDTReq0nNyuKerTg==", "dev": true }, "dayjs": { @@ -15766,10 +19281,11 @@ "dev": true }, "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "requires": {} }, "deep-is": { "version": "0.1.4", @@ -15793,9 +19309,9 @@ } }, "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, "requires": { "globby": "^11.0.1", @@ -15833,9 +19349,9 @@ "dev": true }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true }, "dir-glob": { @@ -15863,9 +19379,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.588", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", - "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", "dev": true }, "emittery": { @@ -15895,23 +19411,6 @@ "once": "^1.4.0" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } - } - }, "envinfo": { "version": "7.11.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", @@ -15965,97 +19464,138 @@ "dev": true }, "eslint": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.3.0.tgz", - "integrity": "sha512-aIay56Ph6RxOTC7xyr59Kt3ewX185SaGnAr8eWukoPLeriCrvGjvAubxuvaXOfsxhtwV5g0uBOsyhAom4qJdww==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.0.4", - "@humanwhocodes/config-array": "^0.6.0", - "ajv": "^6.10.0", + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.1.0", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { - "is-glob": "^4.0.3" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" } }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "type-fest": "^0.20.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "type-fest": "^0.20.2" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -16065,28 +19605,31 @@ "argparse": "^2.0.1" } }, - "lru-cache": { + "locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "yallist": "^4.0.0" + "p-locate": "^5.0.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "has-flag": "^4.0.0" } }, "type-fest": { @@ -16094,73 +19637,50 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, "eslint-config-prettier": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", - "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, "requires": {} }, "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" } }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "estraverse": "^4.1.1" } }, "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "espree": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.1.0.tgz", - "integrity": "sha512-ZgYLvCS1wxOczBYGcQT9DDWgicXwJ4dbocr9uYN+/eresBAUuBu+O4WzB21ufQ/JqQT8gyp7hJ3z8SHii32mTQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { - "acorn": "^8.6.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -16170,12 +19690,20 @@ "dev": true }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, "requires": { "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "esrecurse": { @@ -16185,12 +19713,20 @@ "dev": true, "requires": { "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { @@ -16226,14 +19762,6 @@ "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - } } }, "exit": { @@ -16253,14 +19781,6 @@ "jest-matcher-utils": "^29.7.0", "jest-message-util": "^29.7.0", "jest-util": "^29.7.0" - }, - "dependencies": { - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - } } }, "fast-deep-equal": { @@ -16270,15 +19790,15 @@ "dev": true }, "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", "dev": true }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -16286,6 +19806,17 @@ "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { @@ -16297,13 +19828,13 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -16408,6 +19939,15 @@ "semver": "^5.6.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -16451,19 +19991,20 @@ } }, "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "requires": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" } }, "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "flow-parser": { @@ -16492,7 +20033,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { @@ -16508,12 +20049,6 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -16539,26 +20074,26 @@ "dev": true }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" } }, "globals": { @@ -16568,16 +20103,16 @@ "dev": true }, "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, @@ -16587,21 +20122,27 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true }, "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, "hermes-estree": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.8.0.tgz", @@ -16661,10 +20202,10 @@ } } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, "ieee754": { @@ -16674,9 +20215,9 @@ "dev": true }, "ignore": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.9.tgz", - "integrity": "sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true }, "image-size": { @@ -16686,13 +20227,21 @@ "dev": true }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } } }, "import-local": { @@ -16708,7 +20257,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { @@ -16720,7 +20269,7 @@ "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -16761,16 +20310,16 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-core-module": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", - "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "is-directory": { @@ -16782,7 +20331,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { @@ -16798,9 +20347,9 @@ "dev": true }, "is-git-dirty": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-git-dirty/-/is-git-dirty-2.0.1.tgz", - "integrity": "sha512-zn3CNLDbSR+y7+VDDw7/SwTRRuECn4OpAyelo5MDN+gVxdzM8SUDd51ZwPIOxhljED44Riu0jiiNtC8w0bcLdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-git-dirty/-/is-git-dirty-2.0.2.tgz", + "integrity": "sha512-U3YCo+GKR/rDsY7r0v/LBICbQwsx859tDQnAT+v0E/zCDeWbQ1TUt1FtyExeyik7VIJlYOLHCIifLdz71HDalg==", "dev": true, "requires": { "execa": "^4.0.3", @@ -16832,6 +20381,12 @@ "requires": { "pump": "^3.0.0" } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true } } }, @@ -16870,6 +20425,12 @@ "requires": { "pump": "^3.0.0" } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true } } }, @@ -16966,7 +20527,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { @@ -16976,9 +20537,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true }, "istanbul-lib-instrument": { @@ -17003,6 +20564,23 @@ "istanbul-lib-coverage": "^3.0.0", "make-dir": "^4.0.0", "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "istanbul-lib-source-maps": { @@ -17047,17 +20625,6 @@ "execa": "^5.0.0", "jest-util": "^29.7.0", "p-limit": "^3.1.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - } } }, "jest-circus": { @@ -17089,43 +20656,53 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": {} + "requires": { + "color-convert": "^2.0.1" + } }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -17148,37 +20725,54 @@ "yargs": "^17.3.1" }, "dependencies": { - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "color-convert": "^2.0.1" } }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -17213,46 +20807,117 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-docblock": { @@ -17278,33 +20943,53 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -17323,9 +21008,9 @@ } }, "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true }, "jest-haste-map": { @@ -17360,46 +21045,18 @@ "mkdirp": "^1.0.3", "strip-ansi": "6.0.1", "xmlbuilder": "15.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "xmlbuilder": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.0.0.tgz", - "integrity": "sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==", - "dev": true - } } }, "jest-junit": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.0.0.tgz", - "integrity": "sha512-JSHR+Dhb32FGJaiKkqsB7AR3OqWKtldLd6ZH2+FJ8D4tsweb8Id8zEVReU4+OlrRO1ZluqJLQEETm+Q6/KilBg==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-13.2.0.tgz", + "integrity": "sha512-B0XNlotl1rdsvFZkFfoa19mc634+rrd8E4Sskb92Bb8MmSXeWV9XJGUyctunZS1W410uAxcyYuPUGVnbcOH8cg==", "dev": true, "requires": { "mkdirp": "^1.0.4", "strip-ansi": "^6.0.1", "uuid": "^8.3.2", "xml": "^1.0.1" - }, - "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - } } }, "jest-leak-detector": { @@ -17410,37 +21067,6 @@ "requires": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true - }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - } } }, "jest-matcher-utils": { @@ -17454,53 +21080,55 @@ "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" } }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "has-flag": "^4.0.0" } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true } } }, @@ -17521,30 +21149,54 @@ "stack-utils": "^2.0.3" }, "dependencies": { - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } + "color-convert": "^2.0.1" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -17587,6 +21239,57 @@ "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-resolve-dependencies": { @@ -17628,13 +21331,53 @@ "source-map-support": "0.5.13" }, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "has-flag": "^4.0.0" } } } @@ -17667,6 +21410,57 @@ "jest-util": "^29.7.0", "slash": "^3.0.0", "strip-bom": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-serializer": { @@ -17708,33 +21502,43 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, - "diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "color-name": "~1.1.4" } }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "lru-cache": { @@ -17746,23 +21550,6 @@ "yallist": "^4.0.0" } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", @@ -17772,6 +21559,15 @@ "lru-cache": "^6.0.0" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -17792,6 +21588,57 @@ "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-validate": { @@ -17809,10 +21656,13 @@ }, "dependencies": { "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } }, "camelcase": { "version": "6.3.0", @@ -17820,28 +21670,45 @@ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, - "jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } }, - "pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "color-name": "~1.1.4" } }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -17859,6 +21726,57 @@ "emittery": "^0.13.1", "jest-util": "^29.7.0", "string-length": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jest-worker": { @@ -17873,6 +21791,12 @@ "supports-color": "^8.0.0" }, "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -17885,9 +21809,9 @@ } }, "jetifier": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-1.6.8.tgz", - "integrity": "sha512-3Zi16h6L5tXDRQJTb221cnRoVG9/9OvreLdLU2/ZjRv/GILL+2Cemt0IKvkowwkDpvouAU1DQPOJ7qaiHeIdrw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jetifier/-/jetifier-2.0.0.tgz", + "integrity": "sha512-J4Au9KuT74te+PCCCHKgAjyLlEa+2VyIAEPNCdE5aNkAJ6FAJcAqcdzEkSnzNksIa9NkGmC4tPiClk2e7tCJuQ==", "dev": true, "optional": true }, @@ -17959,6 +21883,46 @@ "write-file-atomic": "^2.3.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -17968,6 +21932,15 @@ "glob": "^7.1.3" } }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, "temp": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", @@ -17996,6 +21969,12 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -18017,7 +21996,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json5": { @@ -18035,6 +22014,15 @@ "graceful-fs": "^4.1.6" } }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "requires": { + "json-buffer": "3.0.1" + } + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -18096,7 +22084,7 @@ "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, "lodash.merge": { @@ -18119,6 +22107,57 @@ "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "logkitty": { @@ -18132,6 +22171,15 @@ "yargs": "^15.1.0" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -18143,6 +22191,21 @@ "wrap-ansi": "^6.2.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -18336,6 +22399,25 @@ "yargs": "^15.3.1" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -18353,6 +22435,21 @@ "wrap-ansi": "^6.2.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -18373,6 +22470,12 @@ "klaw": "^1.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", @@ -18382,6 +22485,17 @@ "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "jsonfile": { @@ -18415,9 +22529,9 @@ "dev": true }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -18434,6 +22548,13 @@ "strip-ansi": "^6.0.0" } }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} + }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -18546,12 +22667,52 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "jest-get-type": { "version": "26.3.0", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", @@ -18583,6 +22744,21 @@ "ansi-styles": "^4.0.0", "react-is": "^17.0.1" } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -18639,6 +22815,40 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -18648,6 +22858,12 @@ "ms": "2.0.0" } }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "jest-regex-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", @@ -18677,6 +22893,17 @@ "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "ms": { @@ -18686,9 +22913,9 @@ "dev": true }, "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -18714,6 +22941,15 @@ "yargs": "^15.3.1" }, "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -18725,6 +22961,21 @@ "wrap-ansi": "^6.2.0" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -18751,6 +23002,13 @@ "strip-ansi": "^6.0.0" } }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} + }, "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", @@ -18995,6 +23253,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -19011,13 +23275,10 @@ "dev": true }, "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true }, "ms": { "version": "2.1.2", @@ -19028,7 +23289,13 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "negotiator": { @@ -19080,9 +23347,9 @@ "dev": true }, "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node-stream-zip": { @@ -19142,7 +23409,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -19167,17 +23434,17 @@ } }, "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" } }, "ora": { @@ -19195,6 +23462,57 @@ "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "os-tmpdir": { @@ -19210,12 +23528,12 @@ "dev": true }, "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { @@ -19225,6 +23543,17 @@ "dev": true, "requires": { "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + } } }, "p-map": { @@ -19278,7 +23607,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { @@ -19339,9 +23668,9 @@ "dev": true }, "prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "prettier-linter-helpers": { @@ -19354,14 +23683,14 @@ } }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "requires": { - "ansi-regex": "^5.0.1", + "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" }, "dependencies": { "ansi-styles": { @@ -19378,12 +23707,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", @@ -19414,9 +23737,9 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, "pure-rand": { @@ -19454,12 +23777,21 @@ "requires": { "shell-quote": "^1.6.1", "ws": "^7" + }, + "dependencies": { + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "requires": {} + } } }, "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, "react-native": { @@ -19524,6 +23856,55 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, "pretty-format": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", @@ -19536,49 +23917,64 @@ "react-is": "^17.0.1" } }, - "ws": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", - "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "async-limiter": "~1.0.0" + "has-flag": "^4.0.0" } } } }, "react-native-builder-bob": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/react-native-builder-bob/-/react-native-builder-bob-0.18.2.tgz", - "integrity": "sha512-HA7ryoG99tkWh92s7Qb/619qAAfa3TMAKP4Q5l/smqZQwnJ77z5ESiPgRZl8gQMiCnrmmPVb/c5yUscKOL9GdQ==", - "dev": true, - "requires": { - "@babel/core": "^7.12.10", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/preset-env": "^7.12.11", - "@babel/preset-flow": "^7.12.1", - "@babel/preset-react": "^7.12.10", - "@babel/preset-typescript": "^7.12.7", - "browserslist": "^4.16.0", - "chalk": "^4.1.0", - "cosmiconfig": "^7.0.0", + "version": "0.18.3", + "resolved": "https://registry.npmjs.org/react-native-builder-bob/-/react-native-builder-bob-0.18.3.tgz", + "integrity": "sha512-togj+ClsPAsTK3ZFmFZVIftUIkxvN1YxJws0/6sQIlAr14U3rvtBseOQAQM0Pora1GD2aObdBVHDVhKBHWojLA==", + "dev": true, + "requires": { + "@babel/core": "^7.18.5", + "@babel/plugin-proposal-class-properties": "^7.17.12", + "@babel/preset-env": "^7.18.2", + "@babel/preset-flow": "^7.17.12", + "@babel/preset-react": "^7.17.12", + "@babel/preset-typescript": "^7.17.12", + "browserslist": "^4.20.4", + "cosmiconfig": "^7.0.1", "cross-spawn": "^7.0.3", "dedent": "^0.7.0", - "del": "^6.0.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", + "del": "^6.1.1", + "fs-extra": "^10.1.0", + "glob": "^8.0.3", "is-git-dirty": "^2.0.1", - "jetifier": "^1.6.6", - "json5": "^2.1.3", - "prompts": "^2.4.0", + "jetifier": "^2.0.0", + "json5": "^2.2.1", + "kleur": "^4.1.4", + "prompts": "^2.4.2", "which": "^2.0.2", - "yargs": "^16.2.0" + "yargs": "^17.5.1" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -19588,26 +23984,34 @@ "yaml": "^1.10.0" } }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "jsonfile": { @@ -19620,16 +24024,25 @@ "universalify": "^2.0.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true } } @@ -19668,6 +24081,17 @@ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" } }, + "react-test-renderer": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.1.0.tgz", + "integrity": "sha512-OfuueprJFW7h69GN+kr4Ywin7stcuqaYAt1g7airM5cUgP0BoF5G5CXsPGmXeDeEkncb2fqYNECO4y18sSqphg==", + "dev": true, + "requires": { + "react-is": "^18.1.0", + "react-shallow-renderer": "^16.15.0", + "scheduler": "^0.22.0" + } + }, "readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -19695,14 +24119,16 @@ "esprima": "~4.0.0", "source-map": "~0.6.1", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" } }, "regenerate": { @@ -19721,9 +24147,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "regenerator-transform": { @@ -19735,12 +24161,6 @@ "@babel/runtime": "^7.8.4" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, "regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", @@ -19775,7 +24195,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-main-filename": { @@ -19785,13 +24205,14 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -19801,20 +24222,12 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve.exports": { @@ -20032,32 +24445,6 @@ "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - } } }, "source-map": { @@ -20079,7 +24466,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "stack-utils": { @@ -20201,6 +24588,15 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -20214,14 +24610,20 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "temp": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", @@ -20254,7 +24656,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "throat": { @@ -20308,7 +24710,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "to-regex-range": { @@ -20371,19 +24773,13 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true } } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true }, "tsutils": { @@ -20393,6 +24789,14 @@ "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "type-check": { @@ -20443,7 +24847,13 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, "unicode-canonical-property-names-ecmascript": { @@ -20524,16 +24934,16 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-to-istanbul": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", - "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", @@ -20578,9 +24988,9 @@ "dev": true }, "whatwg-fetch": { - "version": "3.6.19", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz", - "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==", + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", "dev": true }, "whatwg-url": { @@ -20608,12 +25018,6 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "dev": true }, - "word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -20623,12 +25027,38 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "write-file-atomic": { @@ -20642,16 +25072,24 @@ } }, "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, - "requires": {} + "requires": { + "async-limiter": "~1.0.0" + } }, "xml": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "integrity": "sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==", + "dev": true + }, + "xmlbuilder": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.0.0.tgz", + "integrity": "sha512-KLu/G0DoWhkncQ9eHSI6s0/w+T4TM7rQaLhtCaL6tORv8jFlJPlnGumsgTcGfYeS1qZ/IHqrvDG7zJZ4d7e+nw==", "dev": true }, "xtend": { @@ -20679,24 +25117,24 @@ "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yocto-queue": { diff --git a/access-checkout-react-native-sdk/package.json b/access-checkout-react-native-sdk/package.json index 0d85e93..a66a617 100644 --- a/access-checkout-react-native-sdk/package.json +++ b/access-checkout-react-native-sdk/package.json @@ -35,6 +35,7 @@ "@babel/core": "^7.20.0", "@babel/preset-env": "^7.20.0", "@babel/preset-typescript": "^7.16.5", + "@testing-library/react-native": "^12.4.3", "@types/jest": "^27.0.3", "@types/react": "^18.0.24", "@types/react-native": "^0.72.6", @@ -51,6 +52,7 @@ "react": "^18.1.0", "react-native": "^0.70.0", "react-native-builder-bob": "^0.18.2", + "react-test-renderer": "18.1.0", "ts-jest": "^29.1.1", "typescript": "4.8.4" }, diff --git a/access-checkout-react-native-sdk/src/AccessCheckout.tsx b/access-checkout-react-native-sdk/src/AccessCheckout.tsx index 832187c..467bd47 100644 --- a/access-checkout-react-native-sdk/src/AccessCheckout.tsx +++ b/access-checkout-react-native-sdk/src/AccessCheckout.tsx @@ -1,52 +1,42 @@ import { AccessCheckoutReactNative } from './AccessCheckoutReactNative'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import CardDetails from './session/CardDetails'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import Sessions from './session/Sessions'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import CardValidationConfig from './validation/CardValidationConfig'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import CvcOnlyValidationConfig from './validation/CvcOnlyValidationConfig'; +import type SessionGenerationConfig from './session/SessionGenerationConfig'; +import type Sessions from './session/Sessions'; +interface InitialiseCardValidationConfig { + panId: string; + expiryDateId: string; + cvcId: string; + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; +} +interface InitialiseCvcOnlyValidationConfig { + cvcId: string; +} export default class AccessCheckout { private readonly ReactNativeSdkVersion = '2.0.1'; static readonly CardValidationEventType = 'AccessCheckoutCardValidationEvent'; - static readonly CvcOnlyValidationEventType = - 'AccessCheckoutCvcOnlyValidationEvent'; + static readonly CvcOnlyValidationEventType = 'AccessCheckoutCvcOnlyValidationEvent'; baseUrl: string; merchantId?: string; - constructor({ - baseUrl, - merchantId, - }: { - baseUrl: string; - merchantId?: string; - }) { + constructor({ baseUrl, merchantId }: { baseUrl: string; merchantId?: string }) { this.baseUrl = baseUrl; this.merchantId = merchantId; } - generateSessions( - cardDetails: CardDetails, - sessionTypes: string[] - ): Promise { + generateSessions(sessionGenerationConfig: SessionGenerationConfig, sessionTypes: string[]): Promise { return new Promise((resolve, reject) => { AccessCheckoutReactNative.generateSessions({ baseUrl: this.baseUrl, merchantId: this.merchantId, - panValue: cardDetails.pan, - expiryDateValue: cardDetails.expiryDate, - cvcValue: cardDetails.cvc, + panId: sessionGenerationConfig.panId, + expiryDateId: sessionGenerationConfig.expiryDateId, + cvcId: sessionGenerationConfig.cvcId, sessionTypes, reactNativeSdkVersion: this.ReactNativeSdkVersion, }) - // eslint-disable-next-line @typescript-eslint/no-explicit-any, prettier/prettier + // eslint-disable-next-line @typescript-eslint/no-explicit-any .then((bridgeSessions: any) => { const sessions: Sessions = {}; if (bridgeSessions.card) { @@ -65,9 +55,7 @@ export default class AccessCheckout { }); } - initialiseCardValidation( - validationConfig: CardValidationConfig - ): Promise { + initialiseCardValidation(validationConfig: InitialiseCardValidationConfig): Promise { return new Promise((resolve, reject) => { AccessCheckoutReactNative.initialiseCardValidation({ baseUrl: this.baseUrl, @@ -87,9 +75,7 @@ export default class AccessCheckout { }); } - initialiseCvcOnlyValidation( - validationConfig: CvcOnlyValidationConfig - ): Promise { + initialiseCvcOnlyValidation(validationConfig: InitialiseCvcOnlyValidationConfig): Promise { return new Promise((resolve, reject) => { AccessCheckoutReactNative.initialiseCvcOnlyValidation({ cvcId: validationConfig.cvcId, diff --git a/access-checkout-react-native-sdk/src/config/MerchantCardConfig.ts b/access-checkout-react-native-sdk/src/config/MerchantCardConfig.ts new file mode 100644 index 0000000..0962a63 --- /dev/null +++ b/access-checkout-react-native-sdk/src/config/MerchantCardConfig.ts @@ -0,0 +1,15 @@ +import type { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig'; + +export default class MerchantCardConfig { + panId: string; + expiryDateId: string; + cvcId: string; + validationConfig?: MerchantCardValidationConfig; + + constructor({ panId, expiryDateId, cvcId, validationConfig }: MerchantCardConfig) { + this.panId = panId; + this.expiryDateId = expiryDateId; + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} diff --git a/access-checkout-react-native-sdk/src/config/MerchantCvcOnlyConfig.ts b/access-checkout-react-native-sdk/src/config/MerchantCvcOnlyConfig.ts new file mode 100644 index 0000000..a6252fe --- /dev/null +++ b/access-checkout-react-native-sdk/src/config/MerchantCvcOnlyConfig.ts @@ -0,0 +1,11 @@ +import type { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig'; + +export default class MerchantCvcOnlyConfig { + cvcId: string; + validationConfig?: MerchantCvcOnlyValidationConfig; + + constructor({ cvcId, validationConfig }: MerchantCvcOnlyConfig) { + this.cvcId = cvcId; + this.validationConfig = validationConfig; + } +} diff --git a/access-checkout-react-native-sdk/src/hooks/useAccessCheckout.ts b/access-checkout-react-native-sdk/src/hooks/useAccessCheckout.ts new file mode 100644 index 0000000..e4bced1 --- /dev/null +++ b/access-checkout-react-native-sdk/src/hooks/useAccessCheckout.ts @@ -0,0 +1,82 @@ +import { + AccessCheckout, + CardConfig, + type CardValidationEventListener, + CvcOnlyConfig, + CvcOnlyValidationEventListener, + Sessions, +} from '../index'; +import { useCardValidation } from './useCardValidation'; +import { useCvcOnlyValidation } from './useCvcOnlyValidation'; + +export interface UseAccessCheckoutExports { + initialiseValidation: () => Promise; + generateSessions: (sessionTypes: string[]) => Promise; +} + +export interface UseAccessCheckout { + baseUrl: string; + checkoutId: string; + config: CardConfig | CvcOnlyConfig; +} + +export const useAccessCheckout = ({ baseUrl, checkoutId, config }: UseAccessCheckout): UseAccessCheckoutExports => { + const accessCheckout = new AccessCheckout({ + baseUrl: baseUrl, + merchantId: checkoutId, + }); + + /** + * Implementation note: Decided to use classes to benefit from instance checking. + * If using interfaces or types a "type guard" could have been used. the trade off being having to check for + * a specific property that would be unique to that interface/type which in theory it introduces another point of + * failure if the property was to be renamed and not updated in the type guard. + */ + if (config instanceof CardConfig) { + const { initialiseCardValidation } = useCardValidation({ + accessCheckout, + cardValidationConfig: { + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId, + enablePanFormatting: config.validationConfig?.enablePanFormatting, + acceptedCardBrands: config.validationConfig?.acceptedCardBrands, + }, + validationListener: config.validationConfig?.validationListener as CardValidationEventListener, + }); + + const generateSessions = (sessionTypes: string[]) => + accessCheckout.generateSessions( + { + panId: config.panId, + expiryDateId: config.expiryDateId, + cvcId: config.cvcId, + }, + sessionTypes + ); + + return { + initialiseValidation: initialiseCardValidation, + generateSessions, + }; + } else { + const { initialiseCvcOnlyValidation } = useCvcOnlyValidation({ + accessCheckout, + cvcOnlyValidationConfig: { cvcId: config.cvcId }, + validationListener: config.validationConfig?.validationListener as CvcOnlyValidationEventListener, + }); + + const generateCvcOnlySession = (sessionTypes: string[]) => + accessCheckout.generateSessions( + { + cvcId: config.cvcId, + }, + sessionTypes + ); + + return { + initialiseValidation: initialiseCvcOnlyValidation, + generateSessions: generateCvcOnlySession, + }; + } +}; diff --git a/access-checkout-react-native-sdk/src/hooks/useCardConfig.ts b/access-checkout-react-native-sdk/src/hooks/useCardConfig.ts new file mode 100644 index 0000000..e45ec52 --- /dev/null +++ b/access-checkout-react-native-sdk/src/hooks/useCardConfig.ts @@ -0,0 +1,33 @@ +import type { CardValidationEventListener } from '../validation/CardValidationEventListener'; +import { MerchantCardValidationConfig } from '../validation/MerchantCardValidationConfig'; +import MerchantCardConfig from '../config/MerchantCardConfig'; + +export interface CardValidationConfig { + acceptedCardBrands?: string[]; + enablePanFormatting?: boolean; + validationListener: CardValidationEventListener; +} +export interface UseCardConfig { + panId: string; + expiryDateId: string; + cvcId: string; + validationConfig?: CardValidationConfig; +} + +export const useCardConfig = (props: UseCardConfig): MerchantCardConfig => { + const cardConfig = new MerchantCardConfig({ + panId: props.panId, + expiryDateId: props.expiryDateId, + cvcId: props.cvcId, + }); + + if (props.validationConfig) { + cardConfig.validationConfig = new MerchantCardValidationConfig({ + acceptedCardBrands: props.validationConfig.acceptedCardBrands, + enablePanFormatting: props.validationConfig.enablePanFormatting, + validationListener: props.validationConfig.validationListener, + }); + } + + return cardConfig; +}; diff --git a/access-checkout-react-native-sdk/src/hooks/useCardValidation.ts b/access-checkout-react-native-sdk/src/hooks/useCardValidation.ts new file mode 100644 index 0000000..1418171 --- /dev/null +++ b/access-checkout-react-native-sdk/src/hooks/useCardValidation.ts @@ -0,0 +1,66 @@ +import { useEffect } from 'react'; +import { NativeEventEmitter } from 'react-native'; +import AccessCheckout from '../AccessCheckout'; +import AccessCheckoutReactNative from '../AccessCheckoutReactNative'; +import { + CardValidationEventListener, + cardValidationNativeEventListenerOf, +} from '../validation/CardValidationEventListener'; +import { ValidationListenerException } from '../validation/ValidationListenerException'; + +export function useCardValidationEventListener(validationListener: CardValidationEventListener) { + useEffect(() => { + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + + const nativeEventListener = cardValidationNativeEventListenerOf(validationListener); + const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); + + const eventSubscription = nativeEventEmitter.addListener( + AccessCheckout.CardValidationEventType, + nativeEventListener + ); + + return () => { + eventSubscription.remove(); + }; + }, []); +} + +interface UseCardValidationHook { + accessCheckout: AccessCheckout; + cardValidationConfig: { + panId: string; + expiryDateId: string; + cvcId: string; + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; + }; + validationListener: CardValidationEventListener; +} + +export function useCardValidation({ accessCheckout, cardValidationConfig, validationListener }: UseCardValidationHook) { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCardValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCardValidationEventListener(validationListener); + + const initialiseCardValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCardValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new ValidationListenerException(); + } + return accessCheckout.initialiseCardValidation(cardValidationConfig); + }; + + return { initialiseCardValidation }; +} diff --git a/access-checkout-react-native-sdk/src/hooks/useCvcOnlyConfig.ts b/access-checkout-react-native-sdk/src/hooks/useCvcOnlyConfig.ts new file mode 100644 index 0000000..3de8e22 --- /dev/null +++ b/access-checkout-react-native-sdk/src/hooks/useCvcOnlyConfig.ts @@ -0,0 +1,25 @@ +import type { CardValidationEventListener } from '../validation/CardValidationEventListener'; +import MerchantCvcOnlyConfig from '../config/MerchantCvcOnlyConfig'; +import { MerchantCvcOnlyValidationConfig } from '../validation/MerchantCvcOnlyValidationConfig'; + +export interface CvcOnlyValidationConfig { + validationListener: CardValidationEventListener; +} +export interface UseCvcOnlyConfig { + cvcId: string; + validationConfig?: CvcOnlyValidationConfig; +} + +export function useCvcOnlyConfig({ cvcId, validationConfig }: UseCvcOnlyConfig) { + const cardConfig = new MerchantCvcOnlyConfig({ + cvcId, + }); + + if (validationConfig) { + cardConfig.validationConfig = new MerchantCvcOnlyValidationConfig({ + validationListener: validationConfig.validationListener, + }); + } + + return cardConfig; +} diff --git a/access-checkout-react-native-sdk/src/hooks/useCvcOnlyValidation.ts b/access-checkout-react-native-sdk/src/hooks/useCvcOnlyValidation.ts new file mode 100644 index 0000000..fb86b2d --- /dev/null +++ b/access-checkout-react-native-sdk/src/hooks/useCvcOnlyValidation.ts @@ -0,0 +1,63 @@ +import { useEffect } from 'react'; +import { NativeEventEmitter } from 'react-native'; +import AccessCheckoutReactNative, { AccessCheckout, CardValidationEventListener } from '../index'; +import type { CvcOnlyValidationEventListener } from '../validation/CvcOnlyValidationEventListener'; +import { cvcOnlyValidationNativeEventListenerOf } from '../validation/CvcOnlyValidationEventListener'; +import { ValidationListenerException } from '../validation/ValidationListenerException'; + +export const useCvcOnlyValidationEventListener = (validationListener: CvcOnlyValidationEventListener) => { + useEffect(() => { + //Safe-guard in the case where no validation listener was configured we avoid registering the native listener + if (!validationListener) { + return; + } + + const nativeEventListener = cvcOnlyValidationNativeEventListenerOf(validationListener); + const nativeEventEmitter = new NativeEventEmitter(AccessCheckoutReactNative); + + const eventSubscription = nativeEventEmitter.addListener( + AccessCheckout.CvcOnlyValidationEventType, + nativeEventListener + ); + + return () => { + eventSubscription.remove(); + }; + }, []); +}; + +interface UseCvcOnlyValidationHook { + accessCheckout: AccessCheckout; + cvcOnlyValidationConfig: { + cvcId: string; + }; + validationListener: CardValidationEventListener; +} + +export const useCvcOnlyValidation = ({ + accessCheckout, + cvcOnlyValidationConfig, + validationListener, +}: UseCvcOnlyValidationHook) => { + /* + Implementation Note: To allow the hook to render and use hooks correctly: + `useCvcOnlyValidationEventListener` has a safe-guard inside its useEffect to check if a validationListener + was provided in order to register the native event. + */ + useCvcOnlyValidationEventListener(validationListener); + const initialiseCvcOnlyValidation = () => { + /* + Implementation Note: Since we do not block the rendering of the hook to allow for `validationConfig` to be optional. + We added a safe-guard that will raise a ValidationListenerException which prevents the + `initialiseCvcOnlyValidation` method from being called when no validationConfig is provided. + This provides the developers with a clear readable error message and enhances their debugging experience. + */ + if (!validationListener) { + throw new ValidationListenerException(); + } + + return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig); + }; + + return { initialiseCvcOnlyValidation }; +}; diff --git a/access-checkout-react-native-sdk/src/index.tsx b/access-checkout-react-native-sdk/src/index.tsx index 5c1a4b6..9e3b7a5 100644 --- a/access-checkout-react-native-sdk/src/index.tsx +++ b/access-checkout-react-native-sdk/src/index.tsx @@ -4,29 +4,31 @@ export default AccessCheckoutReactNative; export { default as AccessCheckout } from './AccessCheckout'; -export { default as CardDetails } from './session/CardDetails'; +export { default as SessionGenerationConfig } from './session/SessionGenerationConfig'; export { default as SessionType, CARD, CVC } from './session/SessionType'; export { default as Sessions } from './session/Sessions'; -export { default as CardValidationConfig } from './validation/CardValidationConfig'; - -export { default as CvcOnlyValidationConfig } from './validation/CvcOnlyValidationConfig'; - export { default as Brand } from './validation/Brand'; export { default as BrandImage } from './validation/BrandImage'; +export { default as CardConfig } from './config/MerchantCardConfig'; +export { default as CvcOnlyConfig } from './config/MerchantCvcOnlyConfig'; -export { - CardValidationEventListener, - cardValidationNativeEventListenerOf, -} from './validation/CardValidationEventListener'; +export { CardValidationEventListener } from './validation/CardValidationEventListener'; +export { CvcOnlyValidationEventListener } from './validation/CvcOnlyValidationEventListener'; -export { - CvcOnlyValidationEventListener, - cvcOnlyValidationNativeEventListenerOf, -} from './validation/CvcOnlyValidationEventListener'; +export { MerchantCvcOnlyValidationConfig } from './validation/MerchantCvcOnlyValidationConfig'; +export { MerchantCardValidationConfig } from './validation/MerchantCardValidationConfig'; -export { useCardValidation } from './validation/CardValidationHooks'; -export { useCvcOnlyValidation } from './validation/CvcOnlyValidationHooks'; +export { useCardConfig, UseCardConfig, CardValidationConfig } from './hooks/useCardConfig'; +export { useCvcOnlyConfig, UseCvcOnlyConfig, CvcOnlyValidationConfig } from './hooks/useCvcOnlyConfig'; + +export { useAccessCheckout, UseAccessCheckout, UseAccessCheckoutExports } from './hooks/useAccessCheckout'; + +export { + AccessCheckoutTextInput, + AccessCheckoutTextInputStyle, + AccessCheckoutTextInputProps, +} from './ui/AccessCheckoutTextInput'; diff --git a/access-checkout-react-native-sdk/src/session/CardDetails.tsx b/access-checkout-react-native-sdk/src/session/CardDetails.tsx deleted file mode 100644 index bb19095..0000000 --- a/access-checkout-react-native-sdk/src/session/CardDetails.tsx +++ /dev/null @@ -1,5 +0,0 @@ -export default interface CardDetails { - pan?: string; - expiryDate?: string; - cvc: string; -} diff --git a/access-checkout-react-native-sdk/src/session/SessionGenerationConfig.ts b/access-checkout-react-native-sdk/src/session/SessionGenerationConfig.ts new file mode 100644 index 0000000..cd62dc3 --- /dev/null +++ b/access-checkout-react-native-sdk/src/session/SessionGenerationConfig.ts @@ -0,0 +1,5 @@ +export default interface SessionGenerationConfig { + panId?: string; + expiryDateId?: string; + cvcId: string; +} diff --git a/access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput.tsx b/access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput.tsx new file mode 100644 index 0000000..21f1968 --- /dev/null +++ b/access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput.tsx @@ -0,0 +1,95 @@ +import React from 'react'; +import { + requireNativeComponent, + type ColorValue, + type StyleProp, + StyleSheet, + type TextStyle, + View, + type ViewStyle, +} from 'react-native'; + +/** + * Composes `AccessCheckoutTextInput`. + * + * - nativeID: string + * - testID: string + * - style: StyleProp; + * - placeholder: string + * - editable: boolean + */ +export interface AccessCheckoutTextInputProps { + nativeID: string; + testID?: string; + style?: StyleProp; + placeholder?: string; + editable?: boolean; +} + +/** + * Note: Not all properties apply styling to both placeholder text and input text. + * textColor: only applies to input text. + * fontFamily: applies to both placeholder text and input text. + * fontSize: applies to both placeholder text and input text. + * fontStyle: applies to both placeholder text and input text. + * fontWeight: applies to both placeholder text and input text. + */ +export interface AccessCheckoutTextInputStyle extends ViewStyle { + color?: ColorValue; + fontFamily?: string; + fontSize?: number; + fontStyle?: 'normal' | 'italic'; + // Specifies font weight. The values 'normal' and 'bold' are supported for most fonts. Not all fonts have a variant for each of the numeric values, in that case the closest one is chosen. + fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; +} + +/** + * Font Changes apply to placeholder text and input text + * + * ## What + * - Rewrites font support for android + * - Adds font weight support for android <28 only 'normal' and 'bold' supported + * - Adds font weight support as units for android >28 + */ +interface RTCAccessCheckoutTextInputFontProps { + fontFamily?: string; + fontSize?: number; + fontStyle?: 'normal' | 'italic'; + fontWeight?: 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900'; +} + +interface RTCAccessCheckoutTextInputProps { + nativeID: string; + testID?: string; + style?: StyleProp; + placeholder?: string; + font?: RTCAccessCheckoutTextInputFontProps; + editable?: boolean; + color?: ColorValue; +} + +const RTCAccessCheckoutTextInput = requireNativeComponent('AccessCheckoutTextInput'); +export const AccessCheckoutTextInput = (props: AccessCheckoutTextInputProps) => { + const { nativeID, testID, style, placeholder, editable } = props; + const { color, fontFamily, fontSize, fontStyle, fontWeight, ...otherStyles } = StyleSheet.flatten([style]); + return ( + + + + ); +}; + +export default AccessCheckoutTextInput; diff --git a/access-checkout-react-native-sdk/src/validation/Brand.ts b/access-checkout-react-native-sdk/src/validation/Brand.ts index 37b0795..adfbe72 100644 --- a/access-checkout-react-native-sdk/src/validation/Brand.ts +++ b/access-checkout-react-native-sdk/src/validation/Brand.ts @@ -1,6 +1,4 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import BrandImage from './BrandImage'; +import type BrandImage from './BrandImage'; export default interface Brand { name: string; diff --git a/access-checkout-react-native-sdk/src/validation/CardValidationConfig.ts b/access-checkout-react-native-sdk/src/validation/CardValidationConfig.ts deleted file mode 100644 index b299036..0000000 --- a/access-checkout-react-native-sdk/src/validation/CardValidationConfig.ts +++ /dev/null @@ -1,29 +0,0 @@ -export default class CardValidationConfig { - panId: string; - expiryDateId: string; - cvcId: string; - enablePanFormatting = false; - acceptedCardBrands: string[] = []; - - constructor({ - panId, - expiryDateId, - cvcId, - enablePanFormatting, - acceptedCardBrands, - }: { - panId: string; - expiryDateId: string; - cvcId: string; - enablePanFormatting?: boolean; - acceptedCardBrands?: string[]; - }) { - this.panId = panId; - this.expiryDateId = expiryDateId; - this.cvcId = cvcId; - this.enablePanFormatting = enablePanFormatting - ? enablePanFormatting - : false; - this.acceptedCardBrands = acceptedCardBrands ? acceptedCardBrands : []; - } -} diff --git a/access-checkout-react-native-sdk/src/validation/CardValidationEventListener.ts b/access-checkout-react-native-sdk/src/validation/CardValidationEventListener.ts index 28306f0..90f065a 100644 --- a/access-checkout-react-native-sdk/src/validation/CardValidationEventListener.ts +++ b/access-checkout-react-native-sdk/src/validation/CardValidationEventListener.ts @@ -14,9 +14,7 @@ export interface CardValidationEventListener { onValidationSuccess?(): void; } -export function cardValidationNativeEventListenerOf( - delegate: CardValidationEventListener -) { +export function cardValidationNativeEventListenerOf(delegate: CardValidationEventListener) { // eslint-disable-next-line @typescript-eslint/no-explicit-any return function (event: any) { if (event.type === 'brand' && delegate.onCardBrandChanged) { diff --git a/access-checkout-react-native-sdk/src/validation/CardValidationHooks.ts b/access-checkout-react-native-sdk/src/validation/CardValidationHooks.ts deleted file mode 100644 index 3cab171..0000000 --- a/access-checkout-react-native-sdk/src/validation/CardValidationHooks.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { useEffect } from 'react'; -import { NativeEventEmitter } from 'react-native'; -import AccessCheckout from '../AccessCheckout'; -import AccessCheckoutReactNative from '../AccessCheckoutReactNative'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import CardValidationConfig from './CardValidationConfig'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { - CardValidationEventListener, - cardValidationNativeEventListenerOf, -} from './CardValidationEventListener'; - -export function useCardValidationEventListener( - merchantListener: CardValidationEventListener -) { - useEffect(() => { - const nativeEventListener = - cardValidationNativeEventListenerOf(merchantListener); - const nativeEventEmitter = new NativeEventEmitter( - AccessCheckoutReactNative - ); - - const eventSubscription = nativeEventEmitter.addListener( - AccessCheckout.CardValidationEventType, - nativeEventListener - ); - - return () => { - eventSubscription.remove(); - }; - }, []); -} - -export function useCardValidation( - accessCheckout: AccessCheckout, - cardValidationConfig: CardValidationConfig, - merchantListener: CardValidationEventListener -) { - useCardValidationEventListener(merchantListener); - - const initialiseCardValidation = () => { - return accessCheckout.initialiseCardValidation(cardValidationConfig); - }; - - return { initialiseCardValidation }; -} diff --git a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationConfig.ts b/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationConfig.ts deleted file mode 100644 index 752e096..0000000 --- a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationConfig.ts +++ /dev/null @@ -1,7 +0,0 @@ -export default class CvcOnlyValidationConfig { - cvcId: string; - - constructor({ cvcId }: { cvcId: string }) { - this.cvcId = cvcId; - } -} diff --git a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationEventListener.ts b/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationEventListener.ts index 2bdd830..2914807 100644 --- a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationEventListener.ts +++ b/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationEventListener.ts @@ -4,9 +4,7 @@ export interface CvcOnlyValidationEventListener { onValidationSuccess?(): void; } -export function cvcOnlyValidationNativeEventListenerOf( - delegate: CvcOnlyValidationEventListener -) { +export function cvcOnlyValidationNativeEventListenerOf(delegate: CvcOnlyValidationEventListener) { // eslint-disable-next-line @typescript-eslint/no-explicit-any return function (event: any) { if (event.type === 'cvc' && delegate.onCvcValidChanged) { diff --git a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationHooks.ts b/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationHooks.ts deleted file mode 100644 index 13c44d3..0000000 --- a/access-checkout-react-native-sdk/src/validation/CvcOnlyValidationHooks.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { useEffect } from 'react'; -import { NativeEventEmitter } from 'react-native'; -import AccessCheckoutReactNative, { - AccessCheckout, - CvcOnlyValidationConfig, - cvcOnlyValidationNativeEventListenerOf, -} from '../index'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import { CvcOnlyValidationEventListener } from './CvcOnlyValidationEventListener'; - -export function useCvcOnlyValidationEventListener( - merchantListener: CvcOnlyValidationEventListener -) { - useEffect(() => { - const nativeEventListener = - cvcOnlyValidationNativeEventListenerOf(merchantListener); - const nativeEventEmitter = new NativeEventEmitter( - AccessCheckoutReactNative - ); - - const eventSubscription = nativeEventEmitter.addListener( - AccessCheckout.CvcOnlyValidationEventType, - nativeEventListener - ); - - return () => { - eventSubscription.remove(); - }; - }, []); -} - -export function useCvcOnlyValidation( - accessCheckout: AccessCheckout, - cvcOnlyValidationConfig: CvcOnlyValidationConfig, - merchantListener: CvcOnlyValidationEventListener -) { - useCvcOnlyValidationEventListener(merchantListener); - - const initialiseCvcOnlyValidation = () => { - return accessCheckout.initialiseCvcOnlyValidation(cvcOnlyValidationConfig); - }; - - return { initialiseCvcOnlyValidation }; -} diff --git a/access-checkout-react-native-sdk/src/validation/MerchantCardValidationConfig.ts b/access-checkout-react-native-sdk/src/validation/MerchantCardValidationConfig.ts new file mode 100644 index 0000000..04c7936 --- /dev/null +++ b/access-checkout-react-native-sdk/src/validation/MerchantCardValidationConfig.ts @@ -0,0 +1,17 @@ +import type { CardValidationEventListener } from '../index'; + +export class MerchantCardValidationConfig { + enablePanFormatting?: boolean; + acceptedCardBrands?: string[]; + validationListener?: CardValidationEventListener; + + constructor({ + validationListener, + enablePanFormatting = false, + acceptedCardBrands = [], + }: MerchantCardValidationConfig) { + this.enablePanFormatting = enablePanFormatting; + this.validationListener = validationListener; + this.acceptedCardBrands = acceptedCardBrands; + } +} diff --git a/access-checkout-react-native-sdk/src/validation/MerchantCvcOnlyValidationConfig.ts b/access-checkout-react-native-sdk/src/validation/MerchantCvcOnlyValidationConfig.ts new file mode 100644 index 0000000..a7a3b5a --- /dev/null +++ b/access-checkout-react-native-sdk/src/validation/MerchantCvcOnlyValidationConfig.ts @@ -0,0 +1,9 @@ +import type { CardValidationEventListener } from '../index'; + +export class MerchantCvcOnlyValidationConfig { + validationListener?: CardValidationEventListener; + + constructor({ validationListener }: MerchantCvcOnlyValidationConfig) { + this.validationListener = validationListener; + } +} diff --git a/access-checkout-react-native-sdk/src/validation/ValidationListenerException.ts b/access-checkout-react-native-sdk/src/validation/ValidationListenerException.ts new file mode 100644 index 0000000..0ee9ad6 --- /dev/null +++ b/access-checkout-react-native-sdk/src/validation/ValidationListenerException.ts @@ -0,0 +1,7 @@ +export class ValidationListenerException extends Error { + constructor() { + super(); + this.name = 'ValidationListenerError'; + this.message = `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.`; + } +} diff --git a/access-checkout-react-native-sdk/test/AccessCheckout.spec.ts b/access-checkout-react-native-sdk/test/AccessCheckout.spec.ts index fa2b21b..e020db7 100644 --- a/access-checkout-react-native-sdk/test/AccessCheckout.spec.ts +++ b/access-checkout-react-native-sdk/test/AccessCheckout.spec.ts @@ -1,12 +1,10 @@ import * as fs from 'fs'; import { NativeModules } from 'react-native'; -import CvcOnlyValidationConfig from '../src/validation/CvcOnlyValidationConfig'; import { AccessCheckout, CVC } from '../src/'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import Sessions from '../src/session/Sessions'; import SessionType from '../src/session/SessionType'; -import CardValidationConfig from '../src/validation/CardValidationConfig'; import { givenGenerateSessionsBridgeFailsWith, givenGenerateSessionsBridgeReturns, @@ -16,12 +14,10 @@ import { givenCvcOnlyValidationBridgeReturns, hasProperty, } from './test-utils'; +import { CardConfig, CvcOnlyConfig } from '../src'; const baseUrl = 'https://access.worldpay.com'; const merchantId = '123'; -const pan = '4444'; -const expiryDate = '12/34'; -const cvc = '123'; const panId = 'panId'; const expiryDateId = 'expiryDateId'; @@ -60,13 +56,18 @@ describe('AccessCheckout', () => { const checkout = new AccessCheckout({ baseUrl, merchantId }); describe('independently of the type of session', () => { - const cardDetails = { pan, expiryDate, cvc }; + const sessionGenerationConfig = new CardConfig({ + panId, + expiryDateId, + cvcId, + }); + const sessionTypes = [SessionType.CARD, SessionType.CVC]; it('passes the SDK version to the React Native bridge', async () => { givenGenerateSessionsBridgeReturns({}); - await checkout.generateSessions(cardDetails, sessionTypes); + await checkout.generateSessions(sessionGenerationConfig, sessionTypes); const bridgeMock = NativeModules.AccessCheckoutReactNative.generateSessions.mock; @@ -80,7 +81,10 @@ describe('AccessCheckout', () => { givenGenerateSessionsBridgeFailsWith(new Error('Failed !')); try { - await checkout.generateSessions(cardDetails, sessionTypes); + await checkout.generateSessions( + sessionGenerationConfig, + sessionTypes + ); } catch (error) { expect(error).toEqual(new Error('Failed !')); } @@ -88,7 +92,11 @@ describe('AccessCheckout', () => { }); describe('for card only', () => { - const cardDetails = { pan, expiryDate, cvc }; + const sessionGenerationConfig = new CardConfig({ + panId, + expiryDateId, + cvcId, + }); const sessionTypes = [SessionType.CARD]; it('returns a resolved promise with a sessions object containing only a card session when bridge successfully generates a session', async () => { @@ -97,7 +105,7 @@ describe('AccessCheckout', () => { }); const result: Sessions = await checkout.generateSessions( - cardDetails, + sessionGenerationConfig, sessionTypes ); @@ -109,13 +117,17 @@ describe('AccessCheckout', () => { }); describe('for card and cvc', () => { - const cardDetails = { pan, expiryDate, cvc }; + const sessionGenerationConfig = new CardConfig({ + panId, + expiryDateId, + cvcId, + }); const sessionTypes = [SessionType.CARD, SessionType.CVC]; it('delegates the generation of sessions to the React Native bridge', async () => { givenGenerateSessionsBridgeReturns({}); - await checkout.generateSessions(cardDetails, sessionTypes); + await checkout.generateSessions(sessionGenerationConfig, sessionTypes); const bridgeMock = NativeModules.AccessCheckoutReactNative.generateSessions.mock; @@ -125,9 +137,9 @@ describe('AccessCheckout', () => { expect(args).toEqual({ baseUrl, merchantId, - panValue: pan, - expiryDateValue: expiryDate, - cvcValue: cvc, + panId: panId, + expiryDateId: expiryDateId, + cvcId: cvcId, sessionTypes: ['CARD', 'CVC'], reactNativeSdkVersion: packageDotJson.version, }); @@ -140,7 +152,7 @@ describe('AccessCheckout', () => { }); const result: Sessions = await checkout.generateSessions( - cardDetails, + sessionGenerationConfig, sessionTypes ); @@ -152,13 +164,15 @@ describe('AccessCheckout', () => { }); describe('for cvc only', () => { - const cardDetails = { cvc }; + const sessionGenerationConfig = new CvcOnlyConfig({ + cvcId, + }); const sessionType = [CVC]; it('delegates the generation of a cvc session to the React Native bridge', async () => { givenGenerateSessionsBridgeReturns({}); - await checkout.generateSessions(cardDetails, sessionType); + await checkout.generateSessions(sessionGenerationConfig, sessionType); const bridgeMock = NativeModules.AccessCheckoutReactNative.generateSessions.mock; @@ -169,7 +183,7 @@ describe('AccessCheckout', () => { expect(args).toEqual({ baseUrl, merchantId, - cvcValue: cvc, + cvcId: cvcId, sessionTypes: ['CVC'], reactNativeSdkVersion: packageDotJson.version, }); @@ -181,7 +195,7 @@ describe('AccessCheckout', () => { }); const result: Sessions = await checkout.generateSessions( - cardDetails, + sessionGenerationConfig, sessionType ); @@ -195,7 +209,7 @@ describe('AccessCheckout', () => { describe('Card validation feature', () => { const checkout = new AccessCheckout({ baseUrl, merchantId }); - const validationConfig = new CardValidationConfig({ + const validationConfig = new CardConfig({ panId, expiryDateId, cvcId, @@ -221,7 +235,7 @@ describe('AccessCheckout', () => { describe('Cvc validation feature', () => { const checkout = new AccessCheckout({ baseUrl, merchantId }); - const validationConfig = new CvcOnlyValidationConfig({ + const validationConfig = new CvcOnlyConfig({ cvcId, }); diff --git a/access-checkout-react-native-sdk/test/__mocks__/react-native.ts b/access-checkout-react-native-sdk/test/__mocks__/react-native.ts index ef3486d..76ae4d8 100644 --- a/access-checkout-react-native-sdk/test/__mocks__/react-native.ts +++ b/access-checkout-react-native-sdk/test/__mocks__/react-native.ts @@ -42,9 +42,7 @@ export const NativeEventEmitter = jest.fn(() => ({ listener: (event: any) => void ): EmitterSubscription { // eslint-disable-next-line prettier/prettier - if ( - !Object.prototype.hasOwnProperty.call(nativeEventListeners, eventType) - ) { + if (!Object.prototype.hasOwnProperty.call(nativeEventListeners, eventType)) { nativeEventListeners[eventType] = []; } @@ -56,10 +54,14 @@ export const NativeEventEmitter = jest.fn(() => ({ }, })); +export const requireNativeComponent = jest.fn(() => { + return false; +}); export default Object.setPrototypeOf( { NativeModules, NativeEventEmitter, + requireNativeComponent, }, ReactNative ); diff --git a/access-checkout-react-native-sdk/test/config/CardConfig.spec.ts b/access-checkout-react-native-sdk/test/config/CardConfig.spec.ts new file mode 100644 index 0000000..ba5c6e7 --- /dev/null +++ b/access-checkout-react-native-sdk/test/config/CardConfig.spec.ts @@ -0,0 +1,192 @@ +import MerchantCardConfig from '../../src/config/MerchantCardConfig'; +import { MerchantCardValidationConfig } from '../../src/validation/MerchantCardValidationConfig'; +import type { CardValidationEventListener } from '../../src'; + +const panId = '4444'; +const expiryDateId = '12/21'; +const cvcId = '123'; + +describe('CardConfig', () => { + describe('can be constructed', () => { + it('with only a panId, an expiryDateId and a cvcId', () => { + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + + expect(config.validationConfig?.enablePanFormatting).toBeUndefined(); + expect(config.validationConfig?.acceptedCardBrands).toBeUndefined(); + }); + + it('with an empty validation config object', () => { + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig: {}, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + + expect(config.validationConfig?.enablePanFormatting).toBeUndefined(); + expect(config.validationConfig?.acceptedCardBrands).toBeUndefined(); + }); + + describe('using a validation config object', () => { + it('with an optional validation config flag to enable card number formatting', () => { + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig: { enablePanFormatting: true }, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.enablePanFormatting).toEqual(true); + expect(config.validationConfig?.acceptedCardBrands).toBeUndefined(); + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + it('with an optional list of card brands to restrict validation to', () => { + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig: { acceptedCardBrands: ['visa', 'mastercard'] }, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.acceptedCardBrands).toEqual(['visa', 'mastercard']); + expect(config.validationConfig?.enablePanFormatting).toBeUndefined(); + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + it('with an optional validation listener', () => { + const validationListenerMock = jest.fn() as CardValidationEventListener; + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig: { validationListener: validationListenerMock }, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.acceptedCardBrands).toBeUndefined(); + expect(config.validationConfig?.enablePanFormatting).toBeUndefined(); + expect(config.validationConfig?.validationListener).toEqual(validationListenerMock); + }); + }); + }); + + describe('using a validation config class (includes defaults)', () => { + it('with an optional validation config flag to enable card number formatting', () => { + const validationConfig = new MerchantCardValidationConfig({ + enablePanFormatting: true, + }); + + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.enablePanFormatting).toEqual(true); + expect(config.validationConfig?.acceptedCardBrands).toEqual([]); + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + it('with an optional list of card brands to restrict validation to', () => { + const validationConfig = new MerchantCardValidationConfig({ + acceptedCardBrands: ['visa', 'mastercard'], + }); + + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.acceptedCardBrands).toEqual(['visa', 'mastercard']); + expect(config.validationConfig?.enablePanFormatting).toEqual(false); + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + it('with an optional validation listener', () => { + const validationListenerMock = jest.fn() as CardValidationEventListener; + const validationConfig = new MerchantCardValidationConfig({ + validationListener: validationListenerMock, + }); + + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig, + }); + + expect(config.panId).toEqual(panId); + expect(config.expiryDateId).toEqual(expiryDateId); + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.acceptedCardBrands).toEqual([]); + expect(config.validationConfig?.enablePanFormatting).toEqual(false); + expect(config.validationConfig?.validationListener).toEqual(validationListenerMock); + }); + }); + + describe('by default', () => { + it('has no validation configuration', () => { + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + }); + + expect(config.validationConfig).toBeUndefined(); + }); + + it('has card number formatting disabled', () => { + const validationConfig = new MerchantCardValidationConfig({}); + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig, + }); + + expect(config.validationConfig?.enablePanFormatting).toEqual(false); + }); + + it('accepts all card brands', () => { + const validationConfig = new MerchantCardValidationConfig({}); + const config: MerchantCardConfig = new MerchantCardConfig({ + panId, + expiryDateId, + cvcId, + validationConfig, + }); + + expect(config.validationConfig?.acceptedCardBrands).toEqual([]); + }); + }); +}); diff --git a/access-checkout-react-native-sdk/test/config/CvcOnlyConfig.spec.ts b/access-checkout-react-native-sdk/test/config/CvcOnlyConfig.spec.ts new file mode 100644 index 0000000..2dc3434 --- /dev/null +++ b/access-checkout-react-native-sdk/test/config/CvcOnlyConfig.spec.ts @@ -0,0 +1,69 @@ +import MerchantCvcOnlyConfig from '../../src/config/MerchantCvcOnlyConfig'; +import { MerchantCvcOnlyValidationConfig } from '../../src/validation/MerchantCvcOnlyValidationConfig'; +import type { CardValidationEventListener } from '../../src'; + +const cvcId = '123'; + +describe('CvcOnlyConfig', () => { + describe('can be constructed', () => { + it('with only a cvcId', () => { + const config: MerchantCvcOnlyConfig = new MerchantCvcOnlyConfig({ + cvcId, + }); + + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + it('with an empty validation config object', () => { + const config: MerchantCvcOnlyConfig = new MerchantCvcOnlyConfig({ + cvcId, + validationConfig: {}, + }); + + expect(config.cvcId).toEqual(cvcId); + + expect(config.validationConfig?.validationListener).toBeUndefined(); + }); + + describe('using a validation config object', () => { + it('with an optional validation listener', () => { + const validationListenerMock = jest.fn() as CardValidationEventListener; + const config: MerchantCvcOnlyConfig = new MerchantCvcOnlyConfig({ + cvcId, + validationConfig: { validationListener: validationListenerMock }, + }); + + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.validationListener).toEqual(validationListenerMock); + }); + }); + }); + + describe('using a validation config class (includes defaults)', () => { + it('with an optional validation listener', () => { + const validationListenerMock = jest.fn() as CardValidationEventListener; + const validationConfig = new MerchantCvcOnlyValidationConfig({ + validationListener: validationListenerMock, + }); + + const config: MerchantCvcOnlyConfig = new MerchantCvcOnlyConfig({ + cvcId, + validationConfig, + }); + + expect(config.cvcId).toEqual(cvcId); + expect(config.validationConfig?.validationListener).toEqual(validationListenerMock); + }); + }); + + describe('by default', () => { + it('has no validation configuration', () => { + const config: MerchantCvcOnlyConfig = new MerchantCvcOnlyConfig({ + cvcId, + }); + + expect(config.validationConfig).toBeUndefined(); + }); + }); +}); diff --git a/access-checkout-react-native-sdk/test/hooks/useAccessCheckout.spec.ts b/access-checkout-react-native-sdk/test/hooks/useAccessCheckout.spec.ts new file mode 100644 index 0000000..6a7720a --- /dev/null +++ b/access-checkout-react-native-sdk/test/hooks/useAccessCheckout.spec.ts @@ -0,0 +1,258 @@ +import { + CardConfig, + CardValidationEventListener, + useAccessCheckout, + type UseAccessCheckoutExports, + AccessCheckout, + type Sessions, + type UseAccessCheckout, + CARD, + CVC, + type CvcOnlyValidationEventListener, + MerchantCardValidationConfig, + useCvcOnlyConfig, + useCardConfig, +} from '../../src'; +import { isArray, isFunction } from '../test-utils'; +import { renderHook, type RenderHookResult } from '@testing-library/react-native'; +describe('useAccessCheckout', () => { + const mockInitialiseCvcOnlyValidation = jest.fn() as () => Promise; + const mockInitialiseCardValidation = jest.fn() as () => Promise; + const mockGenerateSessions = jest.fn() as () => Promise; + + beforeAll(() => { + jest + .spyOn(AccessCheckout.prototype, 'initialiseCvcOnlyValidation') + .mockImplementation(mockInitialiseCvcOnlyValidation); + jest.spyOn(AccessCheckout.prototype, 'initialiseCardValidation').mockImplementation(mockInitialiseCardValidation); + jest.spyOn(AccessCheckout.prototype, 'generateSessions').mockImplementation(mockGenerateSessions); + }); + + afterAll(() => { + jest.restoreAllMocks(); + }); + + describe('using cvc only configuration', () => { + const merchantListener: CvcOnlyValidationEventListener = {}; + + it('should error when trying to use initialiseValidation when no validationConfig was provided', async () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + }), + }) + ); + + const functionReturned = result.current.initialiseValidation; + + expect(() => functionReturned()).toThrowError( + `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.` + ); + expect(mockInitialiseCvcOnlyValidation).not.toHaveBeenCalled(); + }); + + describe('initialiseCardValidation', () => { + it('returns an object with a initialiseValidation property which is a function', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener, + }, + }), + }) + ); + + expect(isArray(result.current)).toEqual(false); + expect(isFunction(result.current.initialiseValidation)).toEqual(true); + }); + + it('function returned is designed to initialise the card validation', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener, + }, + }), + }) + ); + + const functionReturned = result.current.initialiseValidation; + + expect(functionReturned).toBeDefined(); + functionReturned(); + + expect(mockInitialiseCvcOnlyValidation).toHaveBeenCalledWith({ + cvcId: 'cvcInput', + }); + }); + + describe('generateSessions', () => { + it('returns an object with a generateSessions property which is a function', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener, + }, + }), + }) + ); + + expect(isArray(result.current)).toEqual(false); + expect(isFunction(result.current.generateSessions)).toEqual(true); + }); + + it('function returned is designed to generate sessions', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener, + }, + }), + }) + ); + + const functionReturned = result.current.generateSessions; + + functionReturned([CVC]); + + expect(mockGenerateSessions).toHaveBeenCalledWith( + { + cvcId: 'cvcInput', + }, + ['CVC'] + ); + }); + }); + }); + }); + + describe('using card configuration', () => { + const merchantListener: CardValidationEventListener = {}; + + const cardValidationConfig = new MerchantCardValidationConfig({ + validationListener: merchantListener, + }); + const cardConfig = new CardConfig({ + panId: 'panInput', + expiryDateId: 'expiryDateInput', + cvcId: 'cvcInput', + validationConfig: cardValidationConfig, + }); + + it('should error when trying to use initialiseValidation when no validationConfig was provided', async () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: useCardConfig({ + cvcId: 'cvcInput', + panId: 'panId', + expiryDateId: 'expiryDateId', + }), + }) + ); + + const functionReturned = result.current.initialiseValidation; + + expect(() => functionReturned()).toThrowError( + `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.` + ); + + expect(mockInitialiseCardValidation).not.toHaveBeenCalled(); + }); + + describe('initialiseCardValidation', () => { + it('returns an object with a initialiseValidation property which is a function', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: cardConfig, + }) + ); + + expect(isArray(result.current)).toEqual(false); + expect(isFunction(result.current.initialiseValidation)).toEqual(true); + }); + + it('function returned is designed to initialise the card validation', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: cardConfig, + }) + ); + + const functionReturned = result.current.initialiseValidation; + + functionReturned(); + + expect(mockInitialiseCardValidation).toHaveBeenCalledWith({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateInput', + panId: 'panInput', + acceptedCardBrands: [], + enablePanFormatting: false, + }); + }); + }); + + describe('generateSessions', () => { + it('returns an object with a generateSessions property which is a function', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: cardConfig, + }) + ); + + expect(isArray(result.current)).toEqual(false); + expect(isFunction(result.current.generateSessions)).toEqual(true); + }); + + it('function returned is designed to generate sessions', () => { + const { result }: RenderHookResult = renderHook(() => + useAccessCheckout({ + baseUrl: '', + checkoutId: '', + config: cardConfig, + }) + ); + + const functionReturned = result.current.generateSessions; + + functionReturned([CARD]); + + expect(mockGenerateSessions).toHaveBeenCalledWith( + { + cvcId: 'cvcInput', + expiryDateId: 'expiryDateInput', + panId: 'panInput', + }, + ['CARD'] + ); + }); + }); + }); +}); diff --git a/access-checkout-react-native-sdk/test/hooks/useCardConfig.spec.ts b/access-checkout-react-native-sdk/test/hooks/useCardConfig.spec.ts new file mode 100644 index 0000000..a7a48af --- /dev/null +++ b/access-checkout-react-native-sdk/test/hooks/useCardConfig.spec.ts @@ -0,0 +1,117 @@ +import { CardConfig, useCardConfig } from '../../src'; +import type { CardValidationEventListener } from '../../lib/typescript'; + +describe('useCardConfig', () => { + it('creates card config with minimal configuration', () => { + const cardConfig: CardConfig = useCardConfig({ + panId: 'panID', + expiryDateId: 'expiryDateId', + cvcId: 'cvcInput', + }); + + expect(cardConfig).toEqual({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateId', + panId: 'panID', + validationConfig: undefined, + }); + }); + + describe('creates card config with card validation fields', () => { + it('with required validationListener', () => { + const merchantListener = jest.fn(); + const cardConfig: CardConfig = useCardConfig({ + panId: 'panID', + expiryDateId: 'expiryDateId', + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener as CardValidationEventListener, + }, + }); + + expect(cardConfig).toEqual({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateId', + panId: 'panID', + validationConfig: { + acceptedCardBrands: [], + enablePanFormatting: false, + validationListener: merchantListener, + }, + }); + }); + + it('with optional acceptedCardBrands', () => { + const merchantListener = jest.fn(); + const cardConfig: CardConfig = useCardConfig({ + panId: 'panID', + expiryDateId: 'expiryDateId', + cvcId: 'cvcInput', + validationConfig: { + acceptedCardBrands: ['visa', 'mastercard'], + validationListener: merchantListener as CardValidationEventListener, + }, + }); + + expect(cardConfig).toEqual({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateId', + panId: 'panID', + validationConfig: { + acceptedCardBrands: ['visa', 'mastercard'], + enablePanFormatting: false, + validationListener: merchantListener, + }, + }); + }); + + it('with optional enablePanFormatting', () => { + const merchantListener = jest.fn(); + const cardConfig: CardConfig = useCardConfig({ + panId: 'panID', + expiryDateId: 'expiryDateId', + cvcId: 'cvcInput', + validationConfig: { + enablePanFormatting: true, + validationListener: merchantListener as CardValidationEventListener, + }, + }); + + expect(cardConfig).toEqual({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateId', + panId: 'panID', + validationConfig: { + acceptedCardBrands: [], + enablePanFormatting: true, + validationListener: merchantListener, + }, + }); + }); + + it('with all options', () => { + const merchantListener = jest.fn(); + const cardConfig: CardConfig = useCardConfig({ + panId: 'panID', + expiryDateId: 'expiryDateId', + cvcId: 'cvcInput', + validationConfig: { + acceptedCardBrands: ['visa', 'mastercard'], + enablePanFormatting: true, + validationListener: merchantListener as CardValidationEventListener, + }, + }); + + expect(cardConfig).toEqual({ + cvcId: 'cvcInput', + expiryDateId: 'expiryDateId', + panId: 'panID', + validationConfig: { + acceptedCardBrands: ['visa', 'mastercard'], + enablePanFormatting: true, + validationListener: merchantListener, + }, + }); + }); + }); +}); diff --git a/access-checkout-react-native-sdk/test/validation/CardValidationHooks.spec.ts b/access-checkout-react-native-sdk/test/hooks/useCardValidation.spec.ts similarity index 64% rename from access-checkout-react-native-sdk/test/validation/CardValidationHooks.spec.ts rename to access-checkout-react-native-sdk/test/hooks/useCardValidation.spec.ts index 80f0456..52b63df 100644 --- a/access-checkout-react-native-sdk/test/validation/CardValidationHooks.spec.ts +++ b/access-checkout-react-native-sdk/test/hooks/useCardValidation.spec.ts @@ -1,37 +1,27 @@ import React from 'react'; -import { - AccessCheckout, - CardValidationConfig, - CardValidationEventListener, -} from '../../src'; -import { - useCardValidationEventListener, - useCardValidation, -} from '../../src/validation/CardValidationHooks'; -import { - emitNativeEvent, - nativeEventSubscriptionMock, -} from '../__mocks__/react-native'; +import { AccessCheckout, CardConfig, CardValidationEventListener, MerchantCardValidationConfig } from '../../src'; +import { useCardValidationEventListener, useCardValidation } from '../../src/hooks/useCardValidation'; +import { emitNativeEvent, nativeEventSubscriptionMock } from '../__mocks__/react-native'; import { isArray, isFunction } from '../test-utils'; // eslint-disable-next-line @typescript-eslint/no-explicit-any let useEffectCleanUpFunction: any; -jest.spyOn(React, 'useEffect').mockImplementation(f => { +jest.spyOn(React, 'useEffect').mockImplementation((f) => { useEffectCleanUpFunction = f(); }); -describe('CardValidationHooks', function () { +describe('useCardValidation', () => { describe('useCardValidationEventListener', () => { it('registers a NativeEvent listener for "AccessCheckoutCardValidationEvent" event', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any let panValid: any = undefined; - const merchantListener: CardValidationEventListener = { + const validationListener: CardValidationEventListener = { onPanValidChanged(isValid: boolean): void { panValid = isValid; }, }; - useCardValidationEventListener(merchantListener); + useCardValidationEventListener(validationListener); // Emitting a fake native event using the mock in order to check listener is correctly registered emitNativeEvent('AccessCheckoutCardValidationEvent', { @@ -45,8 +35,8 @@ describe('CardValidationHooks', function () { }); it('registers the NativeEvent listener so that it is removed when useEffect cleans up', () => { - const merchantListener: CardValidationEventListener = {}; - useCardValidationEventListener(merchantListener); + const validationListener: CardValidationEventListener = {}; + useCardValidationEventListener(validationListener); // manually calling clean up function returned by useEffect in implementation useEffectCleanUpFunction(); @@ -56,25 +46,29 @@ describe('CardValidationHooks', function () { }); describe('useCardValidation', () => { - const merchantListener: CardValidationEventListener = {}; + const validationListener: CardValidationEventListener = {}; const accessCheckout = new AccessCheckout({ baseUrl: '', merchantId: '', }); - const validationConfig = new CardValidationConfig({ + const cardValidationConfig = new MerchantCardValidationConfig({ + validationListener: validationListener, + }); + const cardConfig = new CardConfig({ panId: 'panInput', expiryDateId: 'expiryDateInput', cvcId: 'cvcInput', + validationConfig: cardValidationConfig, }); it('returns an object with a initialiseCardValidation property which is a function', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hooksValues: any = useCardValidation( + const hooksValues: any = useCardValidation({ accessCheckout, - validationConfig, - merchantListener - ); + cardValidationConfig: cardConfig, + validationListener: validationListener, + }); expect(isArray(hooksValues)).toEqual(false); expect(isFunction(hooksValues.initialiseCardValidation)).toEqual(true); @@ -85,18 +79,16 @@ describe('CardValidationHooks', function () { spy.mockResolvedValue(true); // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hooksValues: any = useCardValidation( + const hooksValues: any = useCardValidation({ accessCheckout, - validationConfig, - merchantListener - ); + cardValidationConfig: cardConfig, + validationListener: validationListener, + }); const functionReturned = hooksValues.initialiseCardValidation; functionReturned(); - expect(accessCheckout.initialiseCardValidation).toHaveBeenCalledWith( - validationConfig - ); + expect(accessCheckout.initialiseCardValidation).toHaveBeenCalledWith(cardConfig); }); }); }); diff --git a/access-checkout-react-native-sdk/test/hooks/useCvcOnlyConfig.spec.ts b/access-checkout-react-native-sdk/test/hooks/useCvcOnlyConfig.spec.ts new file mode 100644 index 0000000..dc65945 --- /dev/null +++ b/access-checkout-react-native-sdk/test/hooks/useCvcOnlyConfig.spec.ts @@ -0,0 +1,34 @@ +import { CvcOnlyConfig, useCvcOnlyConfig } from '../../src'; +import type { CardValidationEventListener } from '../../lib/typescript'; + +describe('useCvcOnlyConfig', () => { + it('creates card config with minimal configuration', () => { + const CvcOnlyConfig: CvcOnlyConfig = useCvcOnlyConfig({ + cvcId: 'cvcInput', + }); + + expect(CvcOnlyConfig).toEqual({ + cvcId: 'cvcInput', + validationConfig: undefined, + }); + }); + + describe('creates card config with card validation fields', () => { + it('with required validationListener', () => { + const merchantListener = jest.fn(); + const CvcOnlyConfig: CvcOnlyConfig = useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener as CardValidationEventListener, + }, + }); + + expect(CvcOnlyConfig).toEqual({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: merchantListener, + }, + }); + }); + }); +}); diff --git a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationHooks.spec.ts b/access-checkout-react-native-sdk/test/hooks/useCvcOnlyValidation.spec.ts similarity index 63% rename from access-checkout-react-native-sdk/test/validation/CvcOnlyValidationHooks.spec.ts rename to access-checkout-react-native-sdk/test/hooks/useCvcOnlyValidation.spec.ts index a7b80f2..c182b82 100644 --- a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationHooks.spec.ts +++ b/access-checkout-react-native-sdk/test/hooks/useCvcOnlyValidation.spec.ts @@ -1,37 +1,32 @@ import React from 'react'; import { AccessCheckout, - CvcOnlyValidationConfig, + CvcOnlyConfig, CvcOnlyValidationEventListener, + MerchantCvcOnlyValidationConfig, } from '../../src'; -import { - useCvcOnlyValidation, - useCvcOnlyValidationEventListener, -} from '../../src/validation/CvcOnlyValidationHooks'; -import { - emitNativeEvent, - nativeEventSubscriptionMock, -} from '../__mocks__/react-native'; -import { isArray, isFunction } from '../test-utils'; // eslint-disable-next-line @typescript-eslint/no-explicit-any +import { useCvcOnlyValidation, useCvcOnlyValidationEventListener } from '../../src/hooks/useCvcOnlyValidation'; +import { emitNativeEvent, nativeEventSubscriptionMock } from '../__mocks__/react-native'; +import { isArray, isFunction } from '../test-utils'; // eslint-disable-next-line @typescript-eslint/no-explicit-any let useEffectCleanUpFunction: any; -jest.spyOn(React, 'useEffect').mockImplementation(f => { +jest.spyOn(React, 'useEffect').mockImplementation((f) => { useEffectCleanUpFunction = f(); }); -describe('CvcOnlyValidationHooks', function () { +describe('useCvcOnlyValidation', () => { describe('useCvcOnlyValidationEventListener', () => { it('registers a NativeEvent listener for "AccessCheckoutCvcOnlyValidationEvent" event', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any let cvcValid: any = undefined; - const merchantListener: CvcOnlyValidationEventListener = { + const validationListener: CvcOnlyValidationEventListener = { onCvcValidChanged(isValid: boolean): void { cvcValid = isValid; }, }; - useCvcOnlyValidationEventListener(merchantListener); + useCvcOnlyValidationEventListener(validationListener); // Emitting a fake native event using the mock in order to check listener is correctly registered emitNativeEvent('AccessCheckoutCvcOnlyValidationEvent', { @@ -45,8 +40,8 @@ describe('CvcOnlyValidationHooks', function () { }); it('registers the NativeEvent listener so that it is removed when useEffect cleans up', () => { - const merchantListener: CvcOnlyValidationEventListener = {}; - useCvcOnlyValidationEventListener(merchantListener); + const validationListener: CvcOnlyValidationEventListener = {}; + useCvcOnlyValidationEventListener(validationListener); // manually calling clean up function returned by useEffect in implementation useEffectCleanUpFunction(); @@ -56,23 +51,27 @@ describe('CvcOnlyValidationHooks', function () { }); describe('useCvcOnlyValidation', () => { - const merchantListener: CvcOnlyValidationEventListener = {}; + const validationListener: CvcOnlyValidationEventListener = {}; const accessCheckout = new AccessCheckout({ baseUrl: '', merchantId: '', }); - const validationConfig = new CvcOnlyValidationConfig({ + const cvcOnlyValidationConfig = new MerchantCvcOnlyValidationConfig({ + validationListener: validationListener, + }); + const cvcOnlyConfig = new CvcOnlyConfig({ cvcId: 'cvcInput', + validationConfig: cvcOnlyValidationConfig, }); it('returns an object with a initialiseCvcOnlyValidation property which is a function', () => { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hooksValues: any = useCvcOnlyValidation( + const hooksValues: any = useCvcOnlyValidation({ accessCheckout, - validationConfig, - merchantListener - ); + cvcOnlyValidationConfig: cvcOnlyConfig, + validationListener: validationListener, + }); expect(isArray(hooksValues)).toEqual(false); expect(isFunction(hooksValues.initialiseCvcOnlyValidation)).toEqual(true); @@ -83,18 +82,16 @@ describe('CvcOnlyValidationHooks', function () { spy.mockResolvedValue(true); // eslint-disable-next-line @typescript-eslint/no-explicit-any - const hooksValues: any = useCvcOnlyValidation( + const hooksValues: any = useCvcOnlyValidation({ accessCheckout, - validationConfig, - merchantListener - ); + cvcOnlyValidationConfig: cvcOnlyConfig, + validationListener: validationListener, + }); const functionReturned = hooksValues.initialiseCvcOnlyValidation; functionReturned(); - expect(accessCheckout.initialiseCvcOnlyValidation).toHaveBeenCalledWith( - validationConfig - ); + expect(accessCheckout.initialiseCvcOnlyValidation).toHaveBeenCalledWith(cvcOnlyConfig); }); }); }); diff --git a/access-checkout-react-native-sdk/test/session/CardDetails.spec.ts b/access-checkout-react-native-sdk/test/session/CardDetails.spec.ts deleted file mode 100644 index 20236cf..0000000 --- a/access-checkout-react-native-sdk/test/session/CardDetails.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import type CardDetails from '../../src/session/CardDetails'; - -describe('CardDetails', () => { - it('can be instantiated by a merchant with a pan, an expiry date and a cvv', () => { - const cardDetails: CardDetails = { - pan: '4444', - expiryDate: '12/21', - cvc: '123', - }; - - expect(cardDetails.pan).toEqual('4444'); - expect(cardDetails.expiryDate).toEqual('12/21'); - expect(cardDetails.cvc).toEqual('123'); - }); - - it('can be instantiated by a merchant with just a cvv', () => { - const cardDetails: CardDetails = { - cvc: '123', - }; - - expect(cardDetails.cvc).toEqual('123'); - }); -}); diff --git a/access-checkout-react-native-sdk/test/session/SessionGenerationConfig.spec.ts b/access-checkout-react-native-sdk/test/session/SessionGenerationConfig.spec.ts new file mode 100644 index 0000000..83d13c8 --- /dev/null +++ b/access-checkout-react-native-sdk/test/session/SessionGenerationConfig.spec.ts @@ -0,0 +1,23 @@ +import type SessionGenerationConfig from '../../src/session/SessionGenerationConfig'; + +describe('SessionGenerationConfig', () => { + it('can be instantiated by a merchant with a pan, an expiry date and a cvv', () => { + const cardDetails: SessionGenerationConfig = { + panId: 'some-pan-id', + expiryDateId: 'some-expiry-id', + cvcId: 'some-cvc-id', + }; + + expect(cardDetails.panId).toEqual('some-pan-id'); + expect(cardDetails.expiryDateId).toEqual('some-expiry-id'); + expect(cardDetails.cvcId).toEqual('some-cvc-id'); + }); + + it('can be instantiated by a merchant with just a cvv', () => { + const cardDetails: SessionGenerationConfig = { + cvcId: 'some-cvc-id', + }; + + expect(cardDetails.cvcId).toEqual('some-cvc-id'); + }); +}); diff --git a/access-checkout-react-native-sdk/test/test-utils.ts b/access-checkout-react-native-sdk/test/test-utils.ts index ca8db82..308fe8f 100644 --- a/access-checkout-react-native-sdk/test/test-utils.ts +++ b/access-checkout-react-native-sdk/test/test-utils.ts @@ -11,7 +11,7 @@ export function givenGenerateSessionsBridgeReturns({ const mock = NativeModules.AccessCheckoutReactNative.generateSessions; mock.mockReturnValueOnce( - new Promise(resolve => { + new Promise((resolve) => { resolve(sessions); }) ); @@ -31,7 +31,7 @@ export function givenGenerateSessionsBridgeFailsWith(error: Error) { export function givenCardValidationBridgeReturns(returnValue: boolean) { const mock = NativeModules.AccessCheckoutReactNative.initialiseCardValidation; mock.mockReturnValueOnce( - new Promise(resolve => { + new Promise((resolve) => { resolve(returnValue); }) ); @@ -52,7 +52,7 @@ export function givenCvcOnlyValidationBridgeReturns(returnValue: boolean) { const mock = NativeModules.AccessCheckoutReactNative.initialiseCvcOnlyValidation; mock.mockReturnValueOnce( - new Promise(resolve => { + new Promise((resolve) => { resolve(returnValue); }) ); @@ -72,7 +72,6 @@ export function givenCvcOnlyValidationBridgeFailsWith(error: Error) { // eslint-disable-next-line @typescript-eslint/no-explicit-any export function isArray(variable: any) { - console.log(Object.prototype.toString.call(variable)); return Object.prototype.toString.call(variable) === '[object Array]'; } diff --git a/access-checkout-react-native-sdk/test/validation/CardValidationConfig.spec.ts b/access-checkout-react-native-sdk/test/validation/CardValidationConfig.spec.ts deleted file mode 100644 index c788cac..0000000 --- a/access-checkout-react-native-sdk/test/validation/CardValidationConfig.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import CardValidationConfig from '../../src/validation/CardValidationConfig'; - -const panId = '4444'; -const expiryDateId = '12/21'; -const cvcId = '123'; - -describe('CardValidationConfig', () => { - describe('can be constructed', () => { - it('with only a panId, an expiryDateId and a cvcId', () => { - const config: CardValidationConfig = new CardValidationConfig({ - panId, - expiryDateId, - cvcId, - }); - - expect(config.panId).toEqual(panId); - expect(config.expiryDateId).toEqual(expiryDateId); - expect(config.cvcId).toEqual(cvcId); - }); - - it('with an optional flag to enable card number formatting', () => { - const config: CardValidationConfig = new CardValidationConfig({ - panId, - expiryDateId, - cvcId, - enablePanFormatting: true, - }); - - expect(config.panId).toEqual(panId); - expect(config.expiryDateId).toEqual(expiryDateId); - expect(config.cvcId).toEqual(cvcId); - expect(config.enablePanFormatting).toEqual(true); - }); - - it('with an optional list of card brands to restrict validation to', () => { - const config: CardValidationConfig = new CardValidationConfig({ - panId, - expiryDateId, - cvcId, - acceptedCardBrands: ['visa', 'mastercard'], - }); - - expect(config.panId).toEqual(panId); - expect(config.expiryDateId).toEqual(expiryDateId); - expect(config.cvcId).toEqual(cvcId); - expect(config.acceptedCardBrands).toEqual(['visa', 'mastercard']); - }); - }); - - describe('by default', () => { - it('has card number formatting disabled', () => { - const config: CardValidationConfig = new CardValidationConfig({ - panId, - expiryDateId, - cvcId, - }); - - expect(config.enablePanFormatting).toEqual(false); - }); - - it('accepts all card brands', () => { - const config: CardValidationConfig = new CardValidationConfig({ - panId, - expiryDateId, - cvcId, - }); - - expect(config.acceptedCardBrands).toEqual([]); - }); - }); -}); diff --git a/access-checkout-react-native-sdk/test/validation/CardValidationEventListener.spec.ts b/access-checkout-react-native-sdk/test/validation/CardValidationEventListener.spec.ts index a63d3d1..0a755b6 100644 --- a/access-checkout-react-native-sdk/test/validation/CardValidationEventListener.spec.ts +++ b/access-checkout-react-native-sdk/test/validation/CardValidationEventListener.spec.ts @@ -1,10 +1,6 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import Brand from '../../src/validation/Brand'; -import { - CardValidationEventListener, - cardValidationNativeEventListenerOf, -} from '../../src'; +import type Brand from '../../src/validation/Brand'; +import type { CardValidationEventListener } from '../../src'; +import { cardValidationNativeEventListenerOf } from '../../src/validation/CardValidationEventListener'; describe('CardValidationEventListener', () => { describe('can be instantiated', () => { diff --git a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationConfig.spec.ts b/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationConfig.spec.ts deleted file mode 100644 index 3c2f1f9..0000000 --- a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationConfig.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import CvcOnlyValidationConfig from '../../src/validation/CvcOnlyValidationConfig'; - -const cvcId = '123'; - -describe('CvcOnlyValidationConfig', () => { - it('can only be constructed with a cvcId', () => { - const config: CvcOnlyValidationConfig = new CvcOnlyValidationConfig({ - cvcId, - }); - - expect(config.cvcId).toEqual(cvcId); - }); -}); diff --git a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationEventListener.spec.ts b/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationEventListener.spec.ts index ce500a9..9467b19 100644 --- a/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationEventListener.spec.ts +++ b/access-checkout-react-native-sdk/test/validation/CvcOnlyValidationEventListener.spec.ts @@ -1,7 +1,5 @@ -import { - CvcOnlyValidationEventListener, - cvcOnlyValidationNativeEventListenerOf, -} from '../../src'; +import type { CvcOnlyValidationEventListener } from '../../src'; +import { cvcOnlyValidationNativeEventListenerOf } from '../../src/validation/CvcOnlyValidationEventListener'; describe('CvcOnlyValidationEventListener', () => { describe('can be instantiated', () => { diff --git a/access-checkout-react-native-sdk/test/validation/ValidationListenerException.spec.ts b/access-checkout-react-native-sdk/test/validation/ValidationListenerException.spec.ts new file mode 100644 index 0000000..869fd95 --- /dev/null +++ b/access-checkout-react-native-sdk/test/validation/ValidationListenerException.spec.ts @@ -0,0 +1,11 @@ +import { ValidationListenerException } from '../../src/validation/ValidationListenerException'; + +describe('ValidationListenerException', () => { + it('by default it should construct error with name and message', () => { + const error = new ValidationListenerException(); + expect(error.name).toEqual('ValidationListenerError'); + expect(error.message).toEqual( + `Validation listener was undefined. When using validation methods such as 'initialiseValidation' a validation listener needs to be provided.` + ); + }); +}); diff --git a/demo-app/.prettierrc.json b/demo-app/.prettierrc.json index 018ca32..6707610 100644 --- a/demo-app/.prettierrc.json +++ b/demo-app/.prettierrc.json @@ -3,7 +3,5 @@ "singleQuote": true, "tabWidth": 2, "trailingComma": "es5", - "useTabs": false, - "arrowParens": "avoid", - "bracketSameLine": true + "useTabs": false } diff --git a/demo-app/bitrise.yml b/demo-app/bitrise.yml index 97ab5aa..00defef 100644 --- a/demo-app/bitrise.yml +++ b/demo-app/bitrise.yml @@ -36,7 +36,7 @@ workflows: - wait-for-android-emulator@1: title: Wait for Android emulator to boot inputs: - - boot_timeout: 600 + - boot_timeout: 450 - script@1.2: title: "Run Detox e2e tests for Android" inputs: @@ -79,13 +79,20 @@ workflows: inputs: - command: ls - workdir: $BITRISE_SOURCE_DIR/demo-app/ + - script@1.2: + title: "Patch Boost podspec" + inputs: + - working_dir: $BITRISE_SOURCE_DIR/demo-app/ + - content: ./scripts/ci/patch-boost-podspec.sh - cocoapods-install@2: title: "Install pods for iOS Bridge SDK" inputs: + - command: update - source_root_path: $BITRISE_SOURCE_DIR/access-checkout-react-native-sdk/ios/ - cocoapods-install@2: title: "Install pods for demo-app" inputs: + - command: update - source_root_path: $BITRISE_SOURCE_DIR/demo-app/ios/ - script@1.2: title: "Build app for Detox" diff --git a/demo-app/e2e/cardFlow.e2e.js b/demo-app/e2e/cardFlow.e2e.js index 90e8593..a316604 100644 --- a/demo-app/e2e/cardFlow.e2e.js +++ b/demo-app/e2e/cardFlow.e2e.js @@ -1,9 +1,7 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const { device, expect } = require('detox'); const { expect: jestExpect } = require('expect'); -const { - sessionRegEx, -} = require('./helpers/RegularExpressions'); +const { sessionRegEx } = require('./helpers/RegularExpressions'); const { CardFlowPO } = require('./page-objects/CardFlowPO'); const { CardFlowStatesPO } = require('./page-objects/CardFlowStatesPO'); /* eslint-enable @typescript-eslint/no-var-requires */ diff --git a/demo-app/e2e/page-objects/TextInputPO.js b/demo-app/e2e/page-objects/AccessCheckoutTextInputPO.js similarity index 54% rename from demo-app/e2e/page-objects/TextInputPO.js rename to demo-app/e2e/page-objects/AccessCheckoutTextInputPO.js index b605855..1d2c6c6 100644 --- a/demo-app/e2e/page-objects/TextInputPO.js +++ b/demo-app/e2e/page-objects/AccessCheckoutTextInputPO.js @@ -1,9 +1,18 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const { UIComponentPO } = require('./UIComponentPO'); -const { expect } = require('detox'); +const { expect, element, by, device } = require('detox'); /* eslint-enable @typescript-eslint/no-var-requires */ -class TextInputPO extends UIComponentPO { +class AccessCheckoutTextInputPO extends UIComponentPO { + component() { + const selector = + device.getPlatform() === 'ios' + ? by.type('UITextField') + : by.type('android.widget.EditText'); + + return element(selector.withAncestor(by.id(this.id))); + } + async type(text, expectedText = '') { await this.component().typeText(text); @@ -18,4 +27,4 @@ class TextInputPO extends UIComponentPO { } } -module.exports = { TextInputPO }; +module.exports = { AccessCheckoutTextInputPO }; diff --git a/demo-app/e2e/page-objects/CardFlowPO.js b/demo-app/e2e/page-objects/CardFlowPO.js index b06369f..7ce0580 100644 --- a/demo-app/e2e/page-objects/CardFlowPO.js +++ b/demo-app/e2e/page-objects/CardFlowPO.js @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const { SessionLabelPO } = require('./SessionLabelPO'); -const { TextInputPO } = require('./TextInputPO'); const { TogglePO } = require('./TogglePO'); const { UIComponentPO } = require('./UIComponentPO'); +const { AccessCheckoutTextInputPO } = require('./AccessCheckoutTextInputPO'); /* eslint-enable @typescript-eslint/no-var-requires */ class CardFlowPO { constructor() { - this.pan = new TextInputPO('panInput'); - this.expiryDate = new TextInputPO('expiryDateInput'); - this.cvc = new TextInputPO('cvcInput'); + this.pan = new AccessCheckoutTextInputPO('panInput'); + this.expiryDate = new AccessCheckoutTextInputPO('expiryDateInput'); + this.cvc = new AccessCheckoutTextInputPO('cvcInput'); this.submitButton = new UIComponentPO('submitButton'); this.cardAndCvcSessionsToggle = new TogglePO('cardAndCvcSessionsToggle'); this.cardSession = new SessionLabelPO('cardSession'); diff --git a/demo-app/e2e/page-objects/CvcOnlyFlowPO.js b/demo-app/e2e/page-objects/CvcOnlyFlowPO.js index 8e741c3..04a44dc 100644 --- a/demo-app/e2e/page-objects/CvcOnlyFlowPO.js +++ b/demo-app/e2e/page-objects/CvcOnlyFlowPO.js @@ -1,13 +1,13 @@ /* eslint-disable @typescript-eslint/no-var-requires */ const { SessionLabelPO } = require('./SessionLabelPO'); -const { TextInputPO } = require('./TextInputPO'); +const { AccessCheckoutTextInputPO } = require('./AccessCheckoutTextInputPO'); const { UIComponentPO } = require('./UIComponentPO'); /* eslint-enable @typescript-eslint/no-var-requires */ class CvcOnlyFlowPO { constructor() { this.cvcOnlyNavItem = new UIComponentPO('nav-cvc'); - this.cvc = new TextInputPO('cvcInput'); + this.cvc = new AccessCheckoutTextInputPO('cvcInput'); this.submitButton = new UIComponentPO('submitButton'); this.cvcSession = new SessionLabelPO('cvcSession'); } diff --git a/demo-app/package-lock.json b/demo-app/package-lock.json index dc23ee7..0d102ff 100644 --- a/demo-app/package-lock.json +++ b/demo-app/package-lock.json @@ -28,6 +28,7 @@ "detox": "^20.13.5", "eslint": "^8.19.0", "eslint-config-prettier": "^8.3.0", + "eslint-plugin-jest": "^27.6.0", "eslint-plugin-prettier": "^4.0.0", "jest": "^29.2.1", "jest-html-reporter": "^3.10.2", @@ -2095,9 +2096,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2124,9 +2125,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2188,9 +2189,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5648,9 +5649,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/node": { @@ -6032,11 +6033,10 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -8227,15 +8227,15 @@ } }, "node_modules/eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -8329,6 +8329,31 @@ "eslint": "^8.1.0" } }, + "node_modules/eslint-plugin-jest": { + "version": "27.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", + "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^5.10.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", + "eslint": "^7.0.0 || ^8.0.0", + "jest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "jest": { + "optional": true + } + } + }, "node_modules/eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", @@ -8727,18 +8752,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -15279,15 +15292,18 @@ } }, "node_modules/prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { @@ -16760,9 +16776,9 @@ } }, "node_modules/terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -16777,18 +16793,6 @@ "node": ">=10" } }, - "node_modules/terser/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -18933,9 +18937,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", - "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -18956,9 +18960,9 @@ "dev": true }, "globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -18998,9 +19002,9 @@ } }, "@eslint/js": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", - "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true }, "@hapi/hoek": { @@ -21667,9 +21671,9 @@ } }, "@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "@types/node": { @@ -21935,11 +21939,10 @@ } }, "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "peer": true + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true }, "acorn-jsx": { "version": "5.3.2", @@ -23579,15 +23582,15 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "8.54.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", - "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.3", - "@eslint/js": "8.54.0", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -23809,6 +23812,15 @@ "string-natural-compare": "^3.0.1" } }, + "eslint-plugin-jest": { + "version": "27.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", + "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^5.10.0" + } + }, "eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", @@ -23919,14 +23931,6 @@ "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" - }, - "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - } } }, "esprima": { @@ -28732,9 +28736,9 @@ "dev": true }, "prettier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.0.tgz", - "integrity": "sha512-FM/zAKgWTxj40rH03VxzIPdXmj39SwSjwG0heUcNFwI+EMZJnY93yAiKXM3dObIKAM5TA88werc8T/EwhB45eg==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, "prettier-linter-helpers": { @@ -29881,9 +29885,9 @@ } }, "terser": { - "version": "5.24.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", - "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", @@ -29892,12 +29896,6 @@ "source-map-support": "~0.5.20" }, "dependencies": { - "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", diff --git a/demo-app/package.json b/demo-app/package.json index 159913e..a235608 100644 --- a/demo-app/package.json +++ b/demo-app/package.json @@ -9,7 +9,8 @@ ], "scripts": { "android": "npm run build:typescript && react-native run-android", - "ios": "npm run build:typescript && react-native run-ios --simulator=\"iphone8-14\"", + "ios": "npm run clean:ios && npm run build:typescript && react-native run-ios", + "clean:ios": "rm -rf ./ios/build", "start": "react-native start", "build:typescript": "tsc", "lint": "eslint \"**/*.{js,ts,tsx}\"", @@ -36,6 +37,7 @@ "@types/react-native": "^0.66.6", "@typescript-eslint/eslint-plugin": "^5.5.0", "@typescript-eslint/parser": "^5.5.0", + "eslint-plugin-jest": "^27.6.0", "babel-jest": "^29.2.1", "babel-plugin-module-resolver": "^5.0.0", "detox": "^20.13.5", diff --git a/demo-app/scripts/ci/patch-boost-podspec.sh b/demo-app/scripts/ci/patch-boost-podspec.sh new file mode 100755 index 0000000..ca4c51a --- /dev/null +++ b/demo-app/scripts/ci/patch-boost-podspec.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +# This script is used to patch an issue during the installation of the Boost pod dependency +# See Boost issue - https://github.com/boostorg/boost/issues/843 +# Temporary workaround proposed by Facebook - https://github.com/facebook/react-native/issues/42180 + +# replacing https://boostorg.jfrog.io/artifactory/main by https://archives.boost.io +# and creating temp file +cat ./node_modules/react-native/third-party-podspecs/boost.podspec | sed s/boostorg.jfrog.io\\/artifactory\\/main/archives.boost.io/ > node_modules/react-native/third-party-podspecs/temp + +# overwrite boost.podspec file +mv node_modules/react-native/third-party-podspecs/temp node_modules/react-native/third-party-podspecs/boost.podspec diff --git a/demo-app/src/App.tsx b/demo-app/src/App.tsx index acbcd7c..00845cc 100644 --- a/demo-app/src/App.tsx +++ b/demo-app/src/App.tsx @@ -5,7 +5,6 @@ import HView from './common/HView'; import VView from './common/VView'; import CvcOnly from './cvc-flow/CvcFlow'; import NavItem from './navigation/NavItem'; - export default function App() { const screens = { card: 'card', @@ -14,11 +13,11 @@ export default function App() { const [screen, setScreen] = useState(screens.card); + const currentScreen = screen === screens.card ? : ; + return ( - - {screen === screens.card ? : } - + {currentScreen} setScreen(screens.cvc)} - > + /> ); diff --git a/demo-app/src/card-flow/CardFlow.tsx b/demo-app/src/card-flow/CardFlow.tsx index 480333b..d03dd1b 100644 --- a/demo-app/src/card-flow/CardFlow.tsx +++ b/demo-app/src/card-flow/CardFlow.tsx @@ -1,16 +1,14 @@ import React, { useState } from 'react'; import { Text } from 'react-native'; import { - AccessCheckout, Brand, CARD, - CardDetails, - CardValidationConfig, CardValidationEventListener, CVC, Sessions, - useCardValidation, -} from '../../../access-checkout-react-native-sdk/src/index'; + useCardConfig, + useAccessCheckout, +} from '../../../access-checkout-react-native-sdk'; import CardBrandImage from '../common/CardBrandImage'; import CvcField from '../common/CvcField'; import ErrorView from '../common/ErrorView'; @@ -31,10 +29,6 @@ export default function CardFlow() { const unknownBrandLogo = 'https://npe.access.worldpay.com/access-checkout/assets/unknown.png'; - const [panValue, setPan] = useState(''); - const [expiryValue, setExpiry] = useState(''); - const [cvcValue, setCvc] = useState(''); - const [brand, setBrand] = useState(''); const [brandLogo, setBrandLogo] = useState(unknownBrandLogo); const [panIsValid, setPanIsValid] = useState(false); @@ -54,18 +48,6 @@ export default function CardFlow() { const [error, setError] = useState(); - const accessCheckout = new AccessCheckout({ - baseUrl: 'https://npe.access.worldpay.com', - merchantId: 'identity', - }); - - const validationConfig = new CardValidationConfig({ - panId: 'panInput', - expiryDateId: 'expiryDateInput', - cvcId: 'cvcInput', - enablePanFormatting: true, - }); - const validationEventListener: CardValidationEventListener = { onCardBrandChanged(brand?: Brand): void { if (!brand) { @@ -108,14 +90,22 @@ export default function CardFlow() { }, }; - const { initialiseCardValidation } = useCardValidation( - accessCheckout, - validationConfig, - validationEventListener, - ); + const { initialiseValidation, generateSessions } = useAccessCheckout({ + baseUrl: 'https://npe.access.worldpay.com', + checkoutId: 'identity', + config: useCardConfig({ + panId: 'panInput', + expiryDateId: 'expiryDateInput', + cvcId: 'cvcInput', + validationConfig: { + enablePanFormatting: true, + validationListener: validationEventListener, + }, + }), + }); const onLayout = () => { - initialiseCardValidation() + initialiseValidation() .then(() => { console.info('Card Validation successfully initialised'); }) @@ -124,23 +114,16 @@ export default function CardFlow() { }); }; - function generateSession() { + function createSession() { const sessionTypes = generateCardAndCvcSessions ? [CARD, CVC] : [CARD]; setShowSpinner(true); setIsEditable(false); setSubmitBtnEnabled(false); - const cardDetails: CardDetails = { - pan: panValue, - expiryDate: expiryValue, - cvc: cvcValue, - }; - - accessCheckout - .generateSessions(cardDetails, sessionTypes) + generateSessions(sessionTypes) .then((sessions: Sessions) => { - console.info(`Successfully generated session(s)`); + console.info('Successfully generated session(s)'); if (sessions.card) { setCardSession(sessions.card); @@ -195,7 +178,6 @@ export default function CardFlow() { @@ -204,13 +186,11 @@ export default function CardFlow() { @@ -226,7 +206,7 @@ export default function CardFlow() { diff --git a/demo-app/src/card-flow/style.js b/demo-app/src/card-flow/style.js index f1701cc..08fd3e7 100644 --- a/demo-app/src/card-flow/style.js +++ b/demo-app/src/card-flow/style.js @@ -9,4 +9,29 @@ export default StyleSheet.create({ }, }), }, + cvc: { + flex: 1, + margin: 12, + borderWidth: 1, + borderRadius: 5, + padding: 10, + height: 40, + }, + pan: { + flex: 8, + margin: 12, + marginRight: 5, + borderWidth: 1, + borderRadius: 5, + padding: 10, + height: 40, + }, + expiry: { + flex: 1, + margin: 12, + borderWidth: 1, + borderRadius: 5, + padding: 10, + height: 40, + }, }); diff --git a/demo-app/src/common/CvcField.tsx b/demo-app/src/common/CvcField.tsx index 7cad67f..72bfa01 100644 --- a/demo-app/src/common/CvcField.tsx +++ b/demo-app/src/common/CvcField.tsx @@ -1,53 +1,41 @@ -import React, { useState } from 'react'; -import { StyleSheet, TextInput } from 'react-native'; - -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import commonStyles from './common-styles.js'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import UIComponentProps from './UIComponentProps'; +import React from 'react'; +import { StyleSheet } from 'react-native'; +import type UIComponentProps from './UIComponentProps'; +import AccessCheckoutTextInput from '../../../access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput'; const styles = StyleSheet.create({ cvc: { flex: 1, + flexDirection: 'row', margin: 12, borderWidth: 1, borderRadius: 5, - padding: 10, height: 40, + paddingHorizontal: 10, }, }); interface CvcFieldProps extends UIComponentProps { isEditable: boolean; isValid: boolean; - onChange(text: string): void; } const CvcField = (props: CvcFieldProps) => { - const [cvcValue, setCvc] = useState(''); + const validationColours = props.isValid ? 'green' : 'red'; + const validationColourStyle = props.isEditable ? validationColours : 'silver'; return ( - { - setCvc(text); - props.onChange(text); - }} editable={props.isEditable} - value={cvcValue} placeholder="CVC" /> ); diff --git a/demo-app/src/common/ExpiryDateField.tsx b/demo-app/src/common/ExpiryDateField.tsx index 54737e1..a9b74dd 100644 --- a/demo-app/src/common/ExpiryDateField.tsx +++ b/demo-app/src/common/ExpiryDateField.tsx @@ -1,53 +1,43 @@ -import React, { useState } from 'react'; -import { StyleSheet, TextInput } from 'react-native'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import commonStyles from './common-styles.js'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import UIComponentProps from './UIComponentProps'; +import React from 'react'; + +import type UIComponentProps from './UIComponentProps'; +import AccessCheckoutTextInput from '../../../access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput'; +import { StyleSheet } from 'react-native'; + +interface ExpiryDateFieldProps extends UIComponentProps { + isEditable: boolean; + isValid: boolean; +} const styles = StyleSheet.create({ expiry: { flex: 1, + flexDirection: 'row', margin: 12, borderWidth: 1, borderRadius: 5, - padding: 10, height: 40, + paddingHorizontal: 10, }, }); -interface ExpiryDateFieldProps extends UIComponentProps { - isEditable: boolean; - isValid: boolean; - - onChange(text: string): void; -} - const ExpiryDateField = (props: ExpiryDateFieldProps) => { - const [expiryValue, setExpiry] = useState(''); + const validationColours = props.isValid ? 'green' : 'red'; + const validationColourStyle = props.isEditable ? validationColours : 'silver'; return ( - { - setExpiry(text); - props.onChange(text); - }} - editable={props.isEditable} - value={expiryValue} - placeholder="MM/YY" /> ); }; diff --git a/demo-app/src/common/PanField.tsx b/demo-app/src/common/PanField.tsx index 540b449..c0ec439 100644 --- a/demo-app/src/common/PanField.tsx +++ b/demo-app/src/common/PanField.tsx @@ -1,20 +1,17 @@ -import React, { useState } from 'react'; -import { StyleSheet, TextInput } from 'react-native'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import commonStyles from './common-styles.js'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import UIComponentProps from './UIComponentProps'; +import React from 'react'; +import { StyleSheet } from 'react-native'; +import AccessCheckoutTextInput from '../../../access-checkout-react-native-sdk/src/ui/AccessCheckoutTextInput'; +import type UIComponentProps from './UIComponentProps'; const styles = StyleSheet.create({ pan: { flex: 8, + flexDirection: 'row', margin: 12, marginRight: 5, borderWidth: 1, borderRadius: 5, - padding: 10, + paddingHorizontal: 10, height: 40, }, }); @@ -22,31 +19,24 @@ const styles = StyleSheet.create({ interface PanFieldProps extends UIComponentProps { isEditable: boolean; isValid: boolean; - onChange(text: string): void; } const PanField = (props: PanFieldProps) => { - const [panValue, setPan] = useState(''); + const validationColours = props.isValid ? 'green' : 'red'; + const validationColourStyle = props.isEditable ? validationColours : 'silver'; return ( - { - setPan(text); - props.onChange(text); - }} editable={props.isEditable} - value={panValue} placeholder="Card Number" /> ); diff --git a/demo-app/src/cvc-flow/CvcFlow.tsx b/demo-app/src/cvc-flow/CvcFlow.tsx index 1e48bca..6ee7cfa 100644 --- a/demo-app/src/cvc-flow/CvcFlow.tsx +++ b/demo-app/src/cvc-flow/CvcFlow.tsx @@ -1,28 +1,23 @@ import React, { useState } from 'react'; +import { Text } from 'react-native'; import { - AccessCheckout, - CardDetails, CVC, - CvcOnlyValidationConfig, CvcOnlyValidationEventListener, Sessions, - useCvcOnlyValidation, -} from '../../../access-checkout-react-native-sdk/src'; + useAccessCheckout, + useCvcOnlyConfig, +} from '../../../access-checkout-react-native-sdk'; +import styles from '../card-flow/style.js'; import CvcField from '../common/CvcField'; +import ErrorView from '../common/ErrorView'; import HView from '../common/HView'; +import SessionLabel from '../common/SessionLabel'; import Spinner from '../common/Spinner'; import SubmitButton from '../common/SubmitButton'; import VView from '../common/VView'; -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import styles from '../card-flow/style.js'; -import { Text } from 'react-native'; -import SessionLabel from '../common/SessionLabel'; import CvcOnlyFlowE2eStates from '../cvc-flow/CvcOnlyFlow.e2e.states'; -import ErrorView from '../common/ErrorView'; export default function CvcFlow() { - const [cvcValue, setCvc] = useState(''); const [cvcIsValid, setCvcIsValid] = useState(false); const [submitBtnEnabled, setSubmitBtnEnabled] = useState(false); @@ -32,16 +27,9 @@ export default function CvcFlow() { const [cvcSession, setCvcSession] = useState(''); const [error, setError] = useState(); - - const accessCheckout = new AccessCheckout({ - baseUrl: 'https://npe.access.worldpay.com', - merchantId: 'identity', - }); - - const cvcOnlyValidationConfig = new CvcOnlyValidationConfig({ - cvcId: 'cvcInput', - }); + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore const cvcOnlyValidationEventListener: CvcOnlyValidationEventListener = { onCvcValidChanged(isValid: boolean): void { setCvcIsValid(isValid); @@ -55,14 +43,19 @@ export default function CvcFlow() { }, }; - const { initialiseCvcOnlyValidation } = useCvcOnlyValidation( - accessCheckout, - cvcOnlyValidationConfig, - cvcOnlyValidationEventListener - ); + const { initialiseValidation, generateSessions } = useAccessCheckout({ + baseUrl: 'https://npe.access.worldpay.com', + checkoutId: 'identity', + config: useCvcOnlyConfig({ + cvcId: 'cvcInput', + validationConfig: { + validationListener: cvcOnlyValidationEventListener, + }, + }), + }); const onLayout = () => { - initialiseCvcOnlyValidation() + initialiseValidation() .then(() => { console.info('Cvc Only Validation successfully initialised'); }) @@ -71,18 +64,11 @@ export default function CvcFlow() { }); }; - function generateSession() { - const sessionTypes = [CVC]; - + function createSession() { setShowSpinner(true); setIsEditable(false); - const cardDetails: CardDetails = { - cvc: cvcValue, - }; - - accessCheckout - .generateSessions(cardDetails, sessionTypes) + generateSessions([CVC]) .then((sessions: Sessions) => { console.info('Successfully generated session(s)'); @@ -116,7 +102,7 @@ export default function CvcFlow() { if (error) { errorComponent = ; } - + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore return ( @@ -128,13 +114,12 @@ export default function CvcFlow() { testID="cvcInput" isEditable={isEditable} isValid={cvcIsValid} - onChange={setCvc} />