From be07e69d1aa63d149b618c7e0b73679111c2b3c9 Mon Sep 17 00:00:00 2001 From: Lucas BENESTON <62059034+Lucasbeneston@users.noreply.github.com> Date: Fri, 26 Jul 2024 10:25:19 +0200 Subject: [PATCH] (PC-30797) feat(tests): Bump msw from 1 to 2 (#6614) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * (BSR) feat: bump msw to latest * wip * wip typing Co-authored-by: bruno ebstein Co-authored-by: Inès Mouandjo Lobé * codemod msw/2/upgrade-recipe Co-authored-by: bruno ebstein Co-authored-by: Inès Mouandjo Lobé * fix tests * fix tests * fix web tests * Fix test apiHelpers * Fix: OfferCTAButton * Temporarily fix proxy tests by keeping msw 1.2.3 (on server) * [DEV_REVIEW]: test -> remove unecessary act * [DEV-REVIEW]: tests -> remove customExportConditions from config * [DEV-REVIEW]: tests -> Replace waitFor by findByText * [DEV_REVIEW]: tests -> remove TextEncoder * [DEV_REVIEW]: tests -> OfferCTAButton * [DEV-REVIEW]: tests -> OfferImageContainer * [DEV_REVIEW]: tests -> ChangePassword * Fix config (j'ai remis le code existant avant les retours sur la pr) + tentative de fix qq tests flaky connus --------- Co-authored-by: Dan Nguyen Co-authored-by: LucasBeneston Co-authored-by: Cédric Le Sausse Co-authored-by: bruno ebstein Co-authored-by: Inès Mouandjo Lobé Co-authored-by: Inès Mouandjo Lobé --- jest.config.js | 1 + package.json | 2 +- server/package.json | 2 +- src/api/apiHelpers.native.test.ts | 5 +- .../auth/pages/login/Login.native.test.tsx | 8 +- .../EmailResendModal.native.test.tsx | 46 +-- .../pages/signup/SignupForm.native.test.tsx | 38 +- .../useOngoingOrEndedBooking.native.test.ts | 22 +- .../video/VideoCarouselModule.native.test.tsx | 14 +- .../OfferCTAButton.native.test.tsx | 74 ++-- .../OfferImageContainer.native.test.tsx | 7 +- .../OfferPreviewModal.web.test.tsx | 3 +- .../ChangePassword.native.test.tsx | 5 +- .../NewEmailSelection.web.test.tsx | 4 +- src/tests/mswServer.ts | 96 ++--- src/tests/setupTests.js | 3 + yarn.lock | 358 +++++++++--------- 17 files changed, 352 insertions(+), 336 deletions(-) diff --git a/jest.config.js b/jest.config.js index 156323c6744..a2170565b6a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,6 +3,7 @@ const { excludeCollectCoverageFrom } = require('./jest.excludeCollectCoverageFro module.exports = { preset: 'react-native', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + testEnvironmentOptions: { customExportConditions: [''] }, moduleNameMapper: { '^api(.*)$': '/src/api$1', '^features(.*)$': '/src/features$1', diff --git a/package.json b/package.json index 38363bd577c..34d6ed663e6 100644 --- a/package.json +++ b/package.json @@ -328,7 +328,7 @@ "metro-react-native-babel-preset": "^0.76.9", "mini-css-extract-plugin": "^1.5.0", "mockdate": "^3.0.2", - "msw": "^1.2.3", + "msw": "^2.3.1", "optimize-css-assets-webpack-plugin": "^5.0.4", "playwright": "^1.28.1", "pnp-webpack-plugin": "^1.6.4", diff --git a/server/package.json b/server/package.json index 5cefcf56797..62fa372bb6a 100644 --- a/server/package.json +++ b/server/package.json @@ -70,4 +70,4 @@ "ts-node": "^10.7.0", "typescript": "^4.3.5" } -} +} \ No newline at end of file diff --git a/src/api/apiHelpers.native.test.ts b/src/api/apiHelpers.native.test.ts index 03fbff393e3..b87fe372644 100644 --- a/src/api/apiHelpers.native.test.ts +++ b/src/api/apiHelpers.native.test.ts @@ -115,8 +115,9 @@ describe('[api] helpers', () => { it('needs authentication response when refresh token fails', async () => { mockServer.postApi('/v1/refresh_access_token', { - requestOptions: { persist: true }, - responseOptions: { statusCode: 400 }, + responseOptions: { + statusCode: 400, + }, }) mockGetTokenStatus.mockReturnValueOnce('expired') diff --git a/src/features/auth/pages/login/Login.native.test.tsx b/src/features/auth/pages/login/Login.native.test.tsx index 0cb9acdc06e..d6374cf2b4d 100644 --- a/src/features/auth/pages/login/Login.native.test.tsx +++ b/src/features/auth/pages/login/Login.native.test.tsx @@ -31,7 +31,7 @@ import { NetworkErrorFixture, UnknownErrorFixture } from 'libs/recaptcha/fixture import { storage } from 'libs/storage' import { mockServer } from 'tests/mswServer' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { fireEvent, render, act, screen, simulateWebviewMessage } from 'tests/utils' +import { act, fireEvent, render, screen, simulateWebviewMessage } from 'tests/utils' import { SUGGESTION_DELAY_IN_MS } from 'ui/components/inputs/EmailInputWithSpellingHelp/useEmailSpellingHelp' import { SNACK_BAR_TIME_OUT_LONG } from 'ui/components/snackBar/SnackBarContext' @@ -804,8 +804,10 @@ function simulateSigninEmailNotValidated() { function simulateSigninNetworkFailure() { mockServer.postApi('/v1/signin', { responseOptions: { - statusCode: 'network-error', - data: 'Network request failed', + data: { + code: 'NETWORK_REQUEST_FAILED', + general: ['Erreur réseau. Tu peux réessayer une fois la connexion réétablie'], + }, }, }) } diff --git a/src/features/auth/pages/signup/SignupConfirmationEmailSent/EmailResendModal.native.test.tsx b/src/features/auth/pages/signup/SignupConfirmationEmailSent/EmailResendModal.native.test.tsx index 28f01242005..85218ed8dfb 100644 --- a/src/features/auth/pages/signup/SignupConfirmationEmailSent/EmailResendModal.native.test.tsx +++ b/src/features/auth/pages/signup/SignupConfirmationEmailSent/EmailResendModal.native.test.tsx @@ -34,9 +34,7 @@ describe('', () => { it('should dismiss modal when close icon is pressed', async () => { renderEmailResendModal({}) - await act(async () => { - fireEvent.press(screen.getByLabelText('Fermer la modale')) - }) + fireEvent.press(screen.getByLabelText('Fermer la modale')) expect(onDismissMock).toHaveBeenCalledTimes(1) }) @@ -68,14 +66,15 @@ describe('', () => { it('should display timer when resend email button is clicked', async () => { renderEmailResendModal({}) + await waitFor(() => { expect(screen.getByText('Demander un nouveau lien')).toBeEnabled() }) - await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) + fireEvent.press(screen.getByText('Demander un nouveau lien')) expect( - screen.getByText( + await screen.findByText( 'Nous t’avons envoyé un nouveau lien. Une autre demande sera possible dans 60s.' ) ).toBeOnTheScreen() @@ -87,10 +86,10 @@ describe('', () => { expect(screen.getByText('Demander un nouveau lien')).toBeEnabled() }) - await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) + fireEvent.press(screen.getByText('Demander un nouveau lien')) expect( - screen.getByText( + await screen.findByText( 'Une erreur s’est produite lors de l’envoi du nouveau lien. Réessaie plus tard.' ) ).toBeOnTheScreen() @@ -102,9 +101,11 @@ describe('', () => { expect(screen.getByText('Demander un nouveau lien')).toBeEnabled() }) - await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) + fireEvent.press(screen.getByText('Demander un nouveau lien')) - expect(screen.getByText('Tu as dépassé le nombre de renvois autorisés.')).toBeOnTheScreen() + expect( + await screen.findByText('Tu as dépassé le nombre de renvois autorisés.') + ).toBeOnTheScreen() }) it('should reset error message when another resend attempt is made', async () => { @@ -118,8 +119,6 @@ describe('', () => { await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) - await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) - expect( screen.queryByText( 'Une erreur s’est produite lors de l’envoi du nouveau lien. Réessaie plus tard.' @@ -132,15 +131,14 @@ describe('', () => { remainingResends: 0, counterResetDatetime: '2023-09-30T12:58:04.065652Z', }) + renderEmailResendModal({}) - await waitFor(() => { - expect( - screen.queryByText( - 'Tu as dépassé le nombre de 3 demandes de lien autorisées. Tu pourras réessayer le 30/09/2023 à 12h58.' - ) - ).not.toBeOnTheScreen() - }) + expect( + screen.queryByText( + 'Tu as dépassé le nombre de 3 demandes de lien autorisées. Tu pourras réessayer le 30/09/2023 à 12h58.' + ) + ).not.toBeOnTheScreen() }) describe('When shouldLogInfo remote config is false', () => { @@ -181,12 +179,14 @@ describe('', () => { expect(screen.getByText('Demander un nouveau lien')).toBeEnabled() }) - await act(async () => fireEvent.press(screen.getByText('Demander un nouveau lien'))) + fireEvent.press(screen.getByText('Demander un nouveau lien')) - expect(eventMonitoring.captureException).toHaveBeenCalledWith( - 'Could not resend validation email: error', - { level: 'info' } - ) + await waitFor(() => { + expect(eventMonitoring.captureException).toHaveBeenCalledWith( + 'Could not resend validation email: error', + { level: 'info' } + ) + }) }) }) }) diff --git a/src/features/auth/pages/signup/SignupForm.native.test.tsx b/src/features/auth/pages/signup/SignupForm.native.test.tsx index 48d52c01c8c..99e5b2c3776 100644 --- a/src/features/auth/pages/signup/SignupForm.native.test.tsx +++ b/src/features/auth/pages/signup/SignupForm.native.test.tsx @@ -24,7 +24,7 @@ import * as useFeatureFlagAPI from 'libs/firebase/firestore/featureFlags/useFeat import { eventMonitoring } from 'libs/monitoring' import { mockServer } from 'tests/mswServer' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { act, fireEvent, render, screen } from 'tests/utils' +import { act, fireEvent, render, screen, waitFor } from 'tests/utils' import { SignupForm } from './SignupForm' @@ -486,6 +486,8 @@ describe('Signup Form', () => { renderSignupForm() + await act(async () => {}) + await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) expect(apiPostGoogleAuthorize).toHaveBeenCalledWith({ @@ -509,6 +511,8 @@ describe('Signup Form', () => { renderSignupForm() + await act(async () => {}) + await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) expect(screen.getByText('Renseigne ton âge')).toBeOnTheScreen() @@ -541,6 +545,7 @@ describe('Signup Form', () => { renderSignupForm() + await act(async () => {}) await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) const datePicker = screen.getByTestId('date-picker-spinner-native') @@ -598,6 +603,7 @@ describe('Signup Form', () => { renderSignupForm() + await act(async () => {}) await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) const datePicker = screen.getByTestId('date-picker-spinner-native') @@ -652,7 +658,13 @@ describe('Signup Form', () => { renderSignupForm() - await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) + const ssoButton = await screen.findByTestId('S’inscrire avec Google') + + await waitFor(async () => { + expect(ssoButton.props.focusable).toBeTruthy() + }) + + await act(async () => fireEvent.press(ssoButton)) const datePicker = screen.getByTestId('date-picker-spinner-native') await act(async () => @@ -798,6 +810,8 @@ describe('Signup Form', () => { renderSignupForm() + const ssoButton = await screen.findByTestId('S’inscrire avec Google') + expect(analytics.logStepperDisplayed).toHaveBeenNthCalledWith( 1, StepperOrigin.HOME, @@ -805,14 +819,20 @@ describe('Signup Form', () => { undefined ) - await act(async () => fireEvent.press(await screen.findByTestId('S’inscrire avec Google'))) + await waitFor(async () => { + expect(ssoButton.props.focusable).toBeTruthy() + }) + + await act(async () => fireEvent.press(ssoButton)) - expect(analytics.logStepperDisplayed).toHaveBeenNthCalledWith( - 2, - StepperOrigin.HOME, - PreValidationSignupStep.Birthday, - 'SSO_signup' - ) + await waitFor(() => { + expect(analytics.logStepperDisplayed).toHaveBeenNthCalledWith( + 2, + StepperOrigin.HOME, + PreValidationSignupStep.Birthday, + 'SSO_signup' + ) + }) const datePicker = screen.getByTestId('date-picker-spinner-native') await act(async () => { diff --git a/src/features/bookings/api/useOngoingOrEndedBooking.native.test.ts b/src/features/bookings/api/useOngoingOrEndedBooking.native.test.ts index 0a87a98461d..a920a41c3a1 100644 --- a/src/features/bookings/api/useOngoingOrEndedBooking.native.test.ts +++ b/src/features/bookings/api/useOngoingOrEndedBooking.native.test.ts @@ -4,7 +4,7 @@ import { bookingsSnap } from 'features/bookings/fixtures/bookingsSnap' import * as useNetInfoContextDefault from 'libs/network/NetInfoWrapper' import { mockServer } from 'tests/mswServer' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { act, renderHook } from 'tests/utils' +import { renderHook, waitFor } from 'tests/utils' jest.mock('libs/react-query/usePersistQuery', () => ({ usePersistQuery: jest.requireActual('react-query').useQuery, @@ -38,10 +38,11 @@ describe('useOngoingOrEndedBooking', () => { const { result } = renderHook(() => useOngoingOrEndedBooking(booking.id), { wrapper: ({ children }) => reactQueryProviderHOC(children), }) - await act(async () => {}) - expect(result.current?.data?.id).toEqual(booking.id) - expect(result.current?.data?.stock.id).toEqual(booking.stock.id) + await waitFor(() => { + expect(result.current?.data?.id).toEqual(booking.id) + expect(result.current?.data?.stock.id).toEqual(booking.stock.id) + }) }) it('should return ended_bookings when there is one', async () => { @@ -49,10 +50,11 @@ describe('useOngoingOrEndedBooking', () => { const { result } = renderHook(() => useOngoingOrEndedBooking(booking.id), { wrapper: ({ children }) => reactQueryProviderHOC(children), }) - await act(async () => {}) - expect(result.current?.data?.id).toEqual(booking.id) - expect(result.current?.data?.stock.id).toEqual(booking.stock.id) + await waitFor(() => { + expect(result.current?.data?.id).toEqual(booking.id) + expect(result.current?.data?.stock.id).toEqual(booking.stock.id) + }) }) it('should return null if no ongoing nor ended booking can be found', async () => { @@ -61,8 +63,8 @@ describe('useOngoingOrEndedBooking', () => { wrapper: ({ children }) => reactQueryProviderHOC(children), }) - await act(async () => {}) - - expect(result.current.data).toBeNull() + await waitFor(() => { + expect(result.current.data).toBeNull() + }) }) }) diff --git a/src/features/home/components/modules/video/VideoCarouselModule.native.test.tsx b/src/features/home/components/modules/video/VideoCarouselModule.native.test.tsx index eeba0a1414c..2d3b6dddd06 100644 --- a/src/features/home/components/modules/video/VideoCarouselModule.native.test.tsx +++ b/src/features/home/components/modules/video/VideoCarouselModule.native.test.tsx @@ -17,7 +17,7 @@ import { analytics } from 'libs/analytics' import { ContentTypes } from 'libs/contentful/types' import * as useFeatureFlagAPI from 'libs/firebase/firestore/featureFlags/useFeatureFlag' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { act, fireEvent, render, screen } from 'tests/utils' +import { act, fireEvent, render, screen, waitFor } from 'tests/utils' jest.mock('libs/firebase/analytics/analytics') @@ -181,11 +181,13 @@ describe('', () => { }) await act(async () => fireEvent.press(nextVideoButton)) - expect(analytics.logConsultVideo).toHaveBeenNthCalledWith(1, { - from: 'video_carousel_block', - moduleId: videoCarouselModuleFixture.id, - homeEntryId: videoCarouselModuleFixture.homeEntryId, - youtubeId: videoCarouselModuleFixture.items[2].youtubeVideoId, + await waitFor(() => { + expect(analytics.logConsultVideo).toHaveBeenNthCalledWith(1, { + from: 'video_carousel_block', + moduleId: videoCarouselModuleFixture.id, + homeEntryId: videoCarouselModuleFixture.homeEntryId, + youtubeId: videoCarouselModuleFixture.items[2].youtubeVideoId, + }) }) }) diff --git a/src/features/offer/components/OfferCTAButton/OfferCTAButton.native.test.tsx b/src/features/offer/components/OfferCTAButton/OfferCTAButton.native.test.tsx index eea608ab7f0..3ae836f1e14 100644 --- a/src/features/offer/components/OfferCTAButton/OfferCTAButton.native.test.tsx +++ b/src/features/offer/components/OfferCTAButton/OfferCTAButton.native.test.tsx @@ -13,7 +13,7 @@ import * as useFeatureFlagAPI from 'libs/firebase/firestore/featureFlags/useFeat import { mockAuthContextWithoutUser, mockAuthContextWithUser } from 'tests/AuthContextUtils' import { mockServer } from 'tests/mswServer' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { act, fireEvent, render, screen } from 'tests/utils' +import { act, fireEvent, render, screen, waitFor } from 'tests/utils' import { SNACK_BAR_TIME_OUT } from 'ui/components/snackBar/SnackBarContext' jest.mock('libs/network/NetInfoWrapper') @@ -75,7 +75,6 @@ describe('', () => { it('should open booking modal when login after booking attempt', async () => { mockServer.getApi(`/v1/bookings`, {}) mockServer.getApi(`/v2/offer/${offerResponseSnap.id}`, { - requestOptions: { persist: true }, responseOptions: { data: offerResponseSnap }, }) @@ -85,7 +84,7 @@ describe('', () => { useRoute.mockReturnValueOnce({ params: { fromOfferId, openModalOnNavigation } }) renderOfferCTAButton(offerNotEventCTAButtonProps) - await act(async () => {}) + await screen.findByText('Réserver l’offre') expect(await screen.findByText('Valider la date')).toBeOnTheScreen() }) @@ -93,10 +92,7 @@ describe('', () => { it('should display authentication modal when clicking on "Réserver l’offre"', async () => { renderOfferCTAButton(offerNotEventCTAButtonProps) - const bookingOfferButton = await screen.findByText('Réserver l’offre') - await act(async () => { - fireEvent.press(bookingOfferButton) - }) + fireEvent.press(await screen.findByText('Réserver l’offre')) expect(screen.getByText('Identifie-toi pour réserver l’offre')).toBeOnTheScreen() }) @@ -104,10 +100,7 @@ describe('', () => { it('should log analytics when display authentication modal', async () => { renderOfferCTAButton(offerNotEventCTAButtonProps) - const bookingOfferButton = await screen.findByText('Réserver l’offre') - await act(async () => { - fireEvent.press(bookingOfferButton) - }) + fireEvent.press(await screen.findByText('Réserver l’offre')) expect(analytics.logConsultAuthenticationModal).toHaveBeenNthCalledWith(1, offerId) }) @@ -115,7 +108,6 @@ describe('', () => { it('should display reservation impossible when user has already booked the offer', async () => { mockAuthContextWithUser(beneficiaryUser, { persist: true }) mockServer.getApi(`/v2/offer/${offerResponseSnap.id}`, { - requestOptions: { persist: true }, responseOptions: { data: offerResponseSnap }, }) @@ -144,9 +136,7 @@ describe('', () => { fireEvent.press(screen.getByText('Réserver l’offre')) - await act(async () => {}) - - expect(screen.getByText('Réservation impossible')).toBeOnTheScreen() + expect(await screen.findByText('Réservation impossible')).toBeOnTheScreen() }) describe('When offer is digital and free and not already booked', () => { @@ -185,14 +175,14 @@ describe('', () => { subcategory: mockSubcategoryNotEvent, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - expect(mockedOpenUrl).toHaveBeenNthCalledWith(1, 'https://www.google.fr/') + await waitFor(() => { + expect(mockedOpenUrl).toHaveBeenNthCalledWith(1, 'https://www.google.fr/') + }) }) - it('should open when pressing button to book the offer if offer is Event', async () => { + it('should open when pressing button to book the offer if offer is Event', async () => { mockAuthContextWithUser(beneficiaryUser, { persist: true }) renderOfferCTAButton({ @@ -201,44 +191,44 @@ describe('', () => { subcategory: mockSubcategoryNotEvent, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - expect(mockedOpenUrl).toHaveBeenNthCalledWith(1, 'https://www.google.fr/') + await waitFor(() => { + expect(mockedOpenUrl).toHaveBeenNthCalledWith(1, 'https://www.google.fr/') + }) }) it('should log BookingConfirmation when pressing button to book the offer', async () => { - mockAuthContextWithUser(beneficiaryUser, { persist: true }) + mockAuthContextWithUser(beneficiaryUser) renderOfferCTAButton({ ...offerNotEventCTAButtonProps, offer: { ...offerResponseSnap, ...offerDigitalAndFree }, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - expect(analytics.logBookingConfirmation).toHaveBeenNthCalledWith(1, { - bookingId: 123, - offerId: 116656, + await waitFor(() => { + expect(analytics.logBookingConfirmation).toHaveBeenNthCalledWith(1, { + bookingId: 123, + offerId: 116656, + }) }) }) it('should not display an error message when pressing button to book the offer', async () => { - mockAuthContextWithUser(beneficiaryUser, { persist: true }) + mockAuthContextWithUser(beneficiaryUser) renderOfferCTAButton({ ...offerNotEventCTAButtonProps, offer: { ...offerResponseSnap, ...offerDigitalAndFree }, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(await screen.findByText('Accéder à l’offre en ligne')) - expect(mockShowErrorSnackBar).not.toHaveBeenCalled() + await waitFor(() => { + expect(mockShowErrorSnackBar).not.toHaveBeenCalled() + }) }) }) @@ -257,31 +247,27 @@ describe('', () => { }) it('should not direclty redirect to the offer when pressing button to book the offer', async () => { - mockAuthContextWithUser(beneficiaryUser, { persist: true }) + mockAuthContextWithUser(beneficiaryUser) renderOfferCTAButton({ ...offerNotEventCTAButtonProps, offer: { ...offerResponseSnap, ...offerDigitalAndFree }, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(await screen.findByText('Accéder à l’offre en ligne')) expect(mockedOpenUrl).not.toHaveBeenCalled() }) it('should not log BookingConfirmation when pressing button to book the offer', async () => { - mockAuthContextWithUser(beneficiaryUser, { persist: true }) + mockAuthContextWithUser(beneficiaryUser) renderOfferCTAButton({ ...offerNotEventCTAButtonProps, offer: { ...offerResponseSnap, ...offerDigitalAndFree }, }) - await act(async () => { - fireEvent.press(screen.getByText('Accéder à l’offre en ligne')) - }) + fireEvent.press(await screen.findByText('Accéder à l’offre en ligne')) expect(analytics.logBookingConfirmation).not.toHaveBeenCalled() }) diff --git a/src/features/offer/components/OfferImageContainer/OfferImageContainer.native.test.tsx b/src/features/offer/components/OfferImageContainer/OfferImageContainer.native.test.tsx index 8d3231cfb09..21d35ff132b 100644 --- a/src/features/offer/components/OfferImageContainer/OfferImageContainer.native.test.tsx +++ b/src/features/offer/components/OfferImageContainer/OfferImageContainer.native.test.tsx @@ -3,7 +3,7 @@ import React from 'react' import { CategoryIdEnum } from 'api/gen' import { OfferImageContainer } from 'features/offer/components/OfferImageContainer/OfferImageContainer' import * as useFeatureFlagAPI from 'libs/firebase/firestore/featureFlags/useFeatureFlag' -import { render, screen, waitFor } from 'tests/utils' +import { render, screen } from 'tests/utils' jest.mock('libs/subcategories/useCategoryId') @@ -74,9 +74,7 @@ describe('', () => { /> ) - await waitFor(() => { - expect(screen.getByTestId('offerImageContainerCarousel')).toBeOnTheScreen() - }) + expect(await screen.findByTestId('offerImageContainerCarousel')).toBeOnTheScreen() }) it('should display carousel dots when offer has several images', async () => { @@ -87,6 +85,7 @@ describe('', () => { onPress={jest.fn()} /> ) + await screen.findByTestId('offerImageContainerCarousel') expect(await screen.findByTestId('onlyDotsContainer')).toBeOnTheScreen() }) diff --git a/src/features/offer/components/OfferPreviewModal/OfferPreviewModal.web.test.tsx b/src/features/offer/components/OfferPreviewModal/OfferPreviewModal.web.test.tsx index 6b8880df90a..83211ecc057 100644 --- a/src/features/offer/components/OfferPreviewModal/OfferPreviewModal.web.test.tsx +++ b/src/features/offer/components/OfferPreviewModal/OfferPreviewModal.web.test.tsx @@ -75,8 +75,7 @@ describe('', () => { /> ) - const previousButton = await screen.findByTestId('Image précédente') - fireEvent.click(previousButton) + await act(() => fireEvent.click(screen.getByTestId('Image précédente'))) await waitFor(() => expect(screen.getByText('2/3')).toBeInTheDocument()) }) diff --git a/src/features/profile/pages/ChangePassword/ChangePassword.native.test.tsx b/src/features/profile/pages/ChangePassword/ChangePassword.native.test.tsx index 5db251862d5..acf5e8a2f98 100644 --- a/src/features/profile/pages/ChangePassword/ChangePassword.native.test.tsx +++ b/src/features/profile/pages/ChangePassword/ChangePassword.native.test.tsx @@ -91,7 +91,6 @@ describe('ChangePassword', () => { it('should display success snackbar and navigate to Profile when the password is updated', async () => { mockServer.postApi('/v1/change_password', { responseOptions: { data: {} }, - requestOptions: { persist: true }, }) mockedUseSnackBarContext.mockImplementationOnce(() => ({ showSuccessSnackBar, @@ -149,6 +148,8 @@ describe('ChangePassword', () => { fireEvent.press(continueButton) }) - expect(screen.getByText('Mot de passe incorrect')).toBeOnTheScreen() + await waitFor(() => { + expect(screen.getByText('Mot de passe incorrect')).toBeOnTheScreen() + }) }) }) diff --git a/src/features/profile/pages/NewEmailSelection/NewEmailSelection.web.test.tsx b/src/features/profile/pages/NewEmailSelection/NewEmailSelection.web.test.tsx index 47da125853f..64a5ef06173 100644 --- a/src/features/profile/pages/NewEmailSelection/NewEmailSelection.web.test.tsx +++ b/src/features/profile/pages/NewEmailSelection/NewEmailSelection.web.test.tsx @@ -2,7 +2,7 @@ import React from 'react' import { NewEmailSelection } from 'features/profile/pages/NewEmailSelection/NewEmailSelection' import { reactQueryProviderHOC } from 'tests/reactQueryProviderHOC' -import { act, checkAccessibilityFor, render } from 'tests/utils/web' +import { checkAccessibilityFor, render, waitFor } from 'tests/utils/web' // Fix the error "IDs used in ARIA and labels must be unique (duplicate-id-aria)" because the UUIDV4 mock returns "testUuidV4" jest.mock('uuid', () => { @@ -18,7 +18,7 @@ describe('', () => { it('should not have basic accessibility issues', async () => { const { container } = render(reactQueryProviderHOC()) - await act(async () => { + await waitFor(async () => { const results = await checkAccessibilityFor(container) expect(results).toHaveNoViolations() diff --git a/src/tests/mswServer.ts b/src/tests/mswServer.ts index 2502c0986f7..c1b363129b5 100644 --- a/src/tests/mswServer.ts +++ b/src/tests/mswServer.ts @@ -1,12 +1,13 @@ -import type { +import { DefaultBodyType, - PathParams, - ResponseComposition, + delay as delayFunction, + http, + HttpResponse, + passthrough, ResponseResolver, - RestContext, - RestRequest, + type PathParams, } from 'msw' -import { rest } from 'msw' +import { type HttpRequestResolverExtras } from 'msw/lib/core/handlers/HttpHandler' import { setupServer } from 'msw/node' import { env } from 'libs/environment' @@ -57,11 +58,13 @@ class MswMockServer handler.method ) + const once = !handler.options?.requestOptions?.persist + const matching = { - GET: () => rest.get(url, generatedHandler), - DELETE: () => rest.delete(url, generatedHandler), - POST: () => rest.post(url, generatedHandler), - PUT: () => rest.put(url, generatedHandler), + GET: () => http.get(url, generatedHandler, { once }), + DELETE: () => http.delete(url, generatedHandler, { once }), + POST: () => http.post(url, generatedHandler, { once }), + PUT: () => http.put(url, generatedHandler, { once }), } const mockByMethod = matching[handler.method] @@ -87,7 +90,7 @@ class MswMockServer let unhandledRequests: string[] = [] - this.mswServer.events.on('request:unhandled', (request) => { + this.mswServer.events.on('request:unhandled', ({ request }) => { unhandledRequests.push(request.method + ' ' + request.url.toString()) }) @@ -119,11 +122,11 @@ class MswMockServer afterAll(() => this.mswServer.close()) } - private areParamsMatching = (url: string, req: RestRequest): boolean => { + private areParamsMatching = (url: string, req: Request): boolean => { const params = url.split('?')[1] if (params) { const paramsArray = params.split('&') - const reqParams = req.url.searchParams + const reqParams = new URL(req.url).searchParams for (const param of paramsArray) { if (!param) return false const [key, value] = param.split('=') @@ -135,7 +138,7 @@ class MswMockServer return true } - private areAllHeadersMatching = (headers: Record, req: RestRequest): boolean => { + private areAllHeadersMatching = (headers: Record, req: Request): boolean => { const reqHeaders = req.headers for (const [key, value] of Object.entries(headers)) { if (reqHeaders.get(key) !== value) { @@ -145,7 +148,7 @@ class MswMockServer return true } - private isOneHeaderMatching = (matchHeader: [string, string], req: RestRequest): boolean => { + private isOneHeaderMatching = (matchHeader: [string, string], req: Request): boolean => { const [key, value] = matchHeader if (req.headers.get(key) !== value) { return false @@ -157,11 +160,7 @@ class MswMockServer fullUrl: string, options: MockOptions, method: SupportedMethod - ): ResponseResolver< - RestRequest>, - RestContext, - DefaultBodyType - > => { + ): ResponseResolver, Record> => { const { persist, headers = undefined, @@ -181,53 +180,54 @@ class MswMockServer } if (!persist) this.currentRequests.push(debugObject) - return async ( - req: RestRequest>, - res: ResponseComposition, - ctx: RestContext - ) => { - if (statusCode === 'network-error') return res.networkError('Unable to connect') + return async ({ request }: { request: Request }) => { + if (statusCode === 'network-error') return HttpResponse.error() - if (!this.areParamsMatching(fullUrl, req)) { + if (!this.areParamsMatching(fullUrl, request)) { this.matchingErrors.push( - req.url.toString() + '\nRequested header ' + fullUrl + ' got ' + req.params + request.url.toString() + + '\nRequested header ' + + fullUrl + + ' got ' + + new URL(request.url).searchParams ) - return req.passthrough() + return passthrough() } - if (matchHeader && !this.isOneHeaderMatching(matchHeader, req)) { + if (matchHeader && !this.isOneHeaderMatching(matchHeader, request)) { this.matchingErrors.push( - req.url.toString() + '\nRequested header ' + matchHeader + ' got ' + req.headers + request.url + '\nRequested header ' + matchHeader + ' got ' + request.headers ) - return req.passthrough() + return passthrough() } - if (headers && !this.areAllHeadersMatching(headers, req)) { + if (headers && !this.areAllHeadersMatching(headers, request)) { this.matchingErrors.push( - req.url.toString() + '\nRequested headers ' + headers + ' got ' + req.headers + request.url.toString() + '\nRequested headers ' + headers + ' got ' + request.headers ) - return req.passthrough() + return passthrough() } if (matchData) { - const requestData = await req.json() + const requestData = await request.json() if (JSON.stringify(requestData) !== JSON.stringify(matchData)) { this.matchingErrors.push( - req.url.toString() + + request.url + '\nRequested Data ' + JSON.stringify(matchData) + ' got ' + JSON.stringify(requestData) ) - return req.passthrough() + return passthrough() } } if (persist) { - return res(ctx.status(statusCode), ctx.json(data), ctx.delay(delay)) + await delayFunction(delay) + return HttpResponse.json(data, { status: statusCode }) } this.currentRequests.splice(this.currentRequests.indexOf(debugObject), 1) - return res.once(ctx.status(statusCode), ctx.json(data)) + return HttpResponse.json(data, { status: statusCode }) } } @@ -244,10 +244,10 @@ class MswMockServer ): MockReturnType { const urlWithoutParams = url.split('?')[0] ?? url if (this.isMockOptions(options)) { - const handler = rest.get(urlWithoutParams, this.generateMockHandler(url, options, 'GET')) + const handler = http.get(urlWithoutParams, this.generateMockHandler(url, options, 'GET')) this.mswServer.use(handler) } else { - const handler = rest.get( + const handler = http.get( url, this.generateMockHandler( urlWithoutParams, @@ -273,10 +273,10 @@ class MswMockServer ): MockReturnType { const urlWithoutParams = url.split('?')[0] ?? url if (this.isMockOptions(options)) { - const handler = rest.post(urlWithoutParams, this.generateMockHandler(url, options, 'POST')) + const handler = http.post(urlWithoutParams, this.generateMockHandler(url, options, 'POST')) this.mswServer.use(handler) } else { - const handler = rest.post( + const handler = http.post( url, this.generateMockHandler(url, { responseOptions: { data: options as TResponse } }, 'POST') ) @@ -298,13 +298,13 @@ class MswMockServer ): MockReturnType { const urlWithoutParams = url.split('?')[0] ?? url if (this.isMockOptions(options)) { - const handler = rest.delete( + const handler = http.delete( urlWithoutParams, this.generateMockHandler(url, options, 'DELETE') ) this.mswServer.use(handler) } else { - const handler = rest.delete( + const handler = http.delete( url, this.generateMockHandler(url, { responseOptions: { data: options as TResponse } }, 'DELETE') ) @@ -326,10 +326,10 @@ class MswMockServer ): MockReturnType { const urlWithoutParams = url.split('?')[0] ?? url if (this.isMockOptions(options)) { - const handler = rest.put(urlWithoutParams, this.generateMockHandler(url, options, 'PUT')) + const handler = http.put(urlWithoutParams, this.generateMockHandler(url, options, 'PUT')) this.mswServer.use(handler) } else { - const handler = rest.put( + const handler = http.put( url, this.generateMockHandler(url, { responseOptions: { data: options as TResponse } }, 'PUT') ) diff --git a/src/tests/setupTests.js b/src/tests/setupTests.js index e060564152e..6f1de699b05 100644 --- a/src/tests/setupTests.js +++ b/src/tests/setupTests.js @@ -1,5 +1,7 @@ import '@testing-library/jest-native/extend-expect' +import { TextEncoder } from 'util' + import * as consoleFailTestModule from 'console-fail-test' import { toHaveNoViolations } from 'jest-axe' import { configure } from 'reassure' @@ -15,6 +17,7 @@ jest.mock('@gorhom/bottom-sheet', () => ({ })) global.expect.extend(toHaveNoViolations) +global.TextEncoder = TextEncoder consoleFailTestModule.cft({ testFramework: 'jest', diff --git a/yarn.lock b/yarn.lock index df513b7c73e..6db7136173b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4397,6 +4397,20 @@ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== +"@bundled-es-modules/cookie@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz#c3b82703969a61cf6a46e959a012b2c257f6b164" + integrity sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw== + dependencies: + cookie "^0.5.0" + +"@bundled-es-modules/statuses@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz#761d10f44e51a94902c4da48675b71a76cc98872" + integrity sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg== + dependencies: + statuses "^2.0.1" + "@callstack/reassure-cli@0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@callstack/reassure-cli/-/reassure-cli-0.7.0.tgz#6a66afcca3bdb1d7f3b906dd22a05b2effbb1156" @@ -5165,6 +5179,43 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== +"@inquirer/confirm@^3.0.0": + version "3.1.10" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-3.1.10.tgz#8e8b36b1e41d6736d6ac90d1221c9e1ec948eb7a" + integrity sha512-/aAHu83Njy6yf44T+ZrRPUkMcUqprrOiIKsyMvf9jOV+vF5BNb2ja1aLP33MK36W8eaf91MTL/mU/e6METuENg== + dependencies: + "@inquirer/core" "^8.2.3" + "@inquirer/type" "^1.3.3" + +"@inquirer/core@^8.2.3": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-8.2.3.tgz#e1986ae0e7de4c1dee72d34dcf0f9a3587709eff" + integrity sha512-WrpDVPAaxJQjHid3Ra4FhUO70YBzkHSYVyW5X48L5zHYdudoPISJqTRRWSeamHfaXda7PNNaC5Py5MEo7QwBNA== + dependencies: + "@inquirer/figures" "^1.0.3" + "@inquirer/type" "^1.3.3" + "@types/mute-stream" "^0.0.4" + "@types/node" "^20.14.6" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + chalk "^4.1.2" + cli-spinners "^2.9.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + +"@inquirer/figures@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.3.tgz#1227cc980f88e6d6ab85abadbf164f5038041edd" + integrity sha512-ErXXzENMH5pJt5/ssXV0DfWUZqly8nGzf0UcBV9xTnP+KyffE2mqyxIMBrZ8ijQck2nU0TQm40EQB53YreyWHw== + +"@inquirer/type@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.3.3.tgz#26b2628630fd2381c7fa1e3ab396feb9bbc575da" + integrity sha512-xTUt0NulylX27/zMx04ZYar/kr1raaiFTVvQ5feljQsiAgdm0WPj4S73/ye0fbslh+15QrIuDvfCXTek7pMY5A== + "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" @@ -5754,27 +5805,22 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@mswjs/cookies@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-0.2.2.tgz#b4e207bf6989e5d5427539c2443380a33ebb922b" - integrity sha512-mlN83YSrcFgk7Dm1Mys40DLssI1KdJji2CMKN8eOlBqsTADYzj2+jWzsANsUTFbxDMWPD5e9bfA1RGqBpS3O1g== - dependencies: - "@types/set-cookie-parser" "^2.4.0" - set-cookie-parser "^2.4.6" - -"@mswjs/interceptors@^0.17.10": - version "0.17.10" - resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.17.10.tgz#857b41f30e2b92345ed9a4e2b1d0a08b8b6fcad4" - integrity sha512-N8x7eSLGcmUFNWZRxT1vsHvypzIRgQYdG0rJey/rZCy6zT/30qDt8Joj7FxzGNLSwXbeZqJOMqDurp7ra4hgbw== - dependencies: - "@open-draft/until" "^1.0.3" - "@types/debug" "^4.1.7" - "@xmldom/xmldom" "^0.8.3" - debug "^4.3.3" - headers-polyfill "3.2.5" +"@mswjs/cookies@^1.1.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@mswjs/cookies/-/cookies-1.1.1.tgz#8b519e2bd8f1577c530beed44a25578eb9a6e72c" + integrity sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA== + +"@mswjs/interceptors@^0.29.0": + version "0.29.1" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.29.1.tgz#e77fc58b5188569041d0440b25c9e9ebb1ccd60a" + integrity sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" outvariant "^1.2.1" - strict-event-emitter "^0.2.4" - web-encoding "^1.1.5" + strict-event-emitter "^0.5.1" "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" @@ -5926,10 +5972,23 @@ dependencies: "@octokit/openapi-types" "^12.11.0" -"@open-draft/until@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-1.0.3.tgz#db9cc719191a62e7d9200f6e7bab21c5b848adca" - integrity sha512-Aq58f5HiWdyDlFffbbSjAlv596h/cOnt2DO1w3DOC7OJ5EHs0hd/nycJfiu9RJbT6Yk6F1knnRRXNSpxoIVZ9Q== +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0", "@open-draft/until@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== "@openspacelabs/react-native-zoomable-view@^2.1.5": version "2.1.5" @@ -8076,17 +8135,10 @@ resolved "https://registry.yarnpkg.com/@types/contentful-resolve-response/-/contentful-resolve-response-0.1.31.tgz#72042d6b6d6504d29200f82eb7bc6ecc0b226d2d" integrity sha512-WyMmbgTTaj7PX2sqYCD/Vswk8Xr+q+AP/9BQk4Nhc1q9P3utDo37F3WeNQsH8UAKJGPrrIwhnEI19GPmsBb/qA== -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/debug@^4.1.7": - version "4.1.7" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.7.tgz#7cc0ea761509124709b8b2d1090d8f6c17aadb82" - integrity sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg== - dependencies: - "@types/ms" "*" +"@types/cookie@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5" + integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA== "@types/dom-speech-recognition@^0.0.1": version "0.0.1" @@ -8293,11 +8345,6 @@ expect "^29.0.0" pretty-format "^29.0.0" -"@types/js-levenshtein@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/js-levenshtein/-/js-levenshtein-1.1.1.tgz#ba05426a43f9e4e30b631941e0aa17bf0c890ed5" - integrity sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g== - "@types/jsdom@^20.0.0": version "20.0.1" resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" @@ -8364,10 +8411,12 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== -"@types/ms@*": - version "0.7.31" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" - integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" "@types/node-fetch@^2.5.0": version "2.6.4" @@ -8405,6 +8454,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.36.tgz#9ab9f8276987132ed2b225cace2218ba794fc751" integrity sha512-FR5QJe+TaoZ2GsMHkjuwoNabr+UrJNRr2HNOo+r/7vhcuntM6Ee/pRPOnRhhL2XE9OOvX9VLEq+BcXl3VjNoWA== +"@types/node@^20.14.6": + version "20.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.9.tgz#12e8e765ab27f8c421a1820c99f5f313a933b420" + integrity sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg== + dependencies: + undici-types "~5.26.4" + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -8563,13 +8619,6 @@ "@types/mime" "^1" "@types/node" "*" -"@types/set-cookie-parser@^2.4.0": - version "2.4.2" - resolved "https://registry.yarnpkg.com/@types/set-cookie-parser/-/set-cookie-parser-2.4.2.tgz#b6a955219b54151bfebd4521170723df5e13caad" - integrity sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w== - dependencies: - "@types/node" "*" - "@types/source-list-map@*": version "0.1.2" resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" @@ -8580,6 +8629,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/statuses@^2.0.4": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/statuses/-/statuses-2.0.5.tgz#f61ab46d5352fd73c863a1ea4e1cef3b0b51ae63" + integrity sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A== + "@types/styled-components-react-native@^5.1.3": version "5.1.3" resolved "https://registry.yarnpkg.com/@types/styled-components-react-native/-/styled-components-react-native-5.1.3.tgz#a340208914a2bbb73f05abd6c8b8accffa9c7412" @@ -8690,6 +8744,11 @@ anymatch "^3.0.0" source-map "^0.6.0" +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + "@types/xdate@*": version "0.8.32" resolved "https://registry.yarnpkg.com/@types/xdate/-/xdate-0.8.32.tgz#52f1bc426cc6929474034e5e3b83f82f43e25dcd" @@ -9231,11 +9290,6 @@ resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.7.tgz#8b1e39c547013941974d83ad5e9cf5042071a9a0" integrity sha512-sI1Ly2cODlWStkINzqGrZ8K6n+MTSbAeQnAipGyL+KZCXuHaRlj2gyyy8B/9MvsFFqN7XHryQnB2QwhzvJXovg== -"@xmldom/xmldom@^0.8.3": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440" - integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg== - "@xmldom/xmldom@~0.7.0": version "0.7.9" resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.7.9.tgz#7f9278a50e737920e21b297b8a35286e9942c056" @@ -9261,11 +9315,6 @@ resolved "https://registry.yarnpkg.com/@zootools/email-spell-checker/-/email-spell-checker-1.11.0.tgz#122983ac54246a5c5722d530a96a29781f3b6986" integrity sha512-zC09W3xQrb+Sy2CUf6EG0x8JXhDCuBbQzAoTgD/6CdVUQip1jLy6V+Ky4Rp9S51UPJNc2vsME5gfA4yOVYRk/w== -"@zxing/text-encoding@0.9.0": - version "0.9.0" - resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" - integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== - abab@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" @@ -9518,7 +9567,7 @@ ansi-colors@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== -ansi-escapes@^4.2.1: +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== @@ -11366,6 +11415,11 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.2.tgz#aaf5df9d8b5bf12634dc8b3040806a0c07120d2a" @@ -11389,6 +11443,11 @@ cli-width@^3.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -11836,10 +11895,10 @@ cookie@0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== -cookie@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== +cookie@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== cookiejar@^2.1.2, cookiejar@^2.1.4: version "2.1.4" @@ -12512,7 +12571,7 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6. dependencies: ms "2.0.0" -debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -13946,7 +14005,7 @@ eventemitter3@^4.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0, events@^3.2.0, events@^3.3.0: +events@^3.0.0, events@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -15680,10 +15739,10 @@ he@1.2.0, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -headers-polyfill@3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-3.2.5.tgz#6e67d392c9d113d37448fe45014e0afdd168faed" - integrity sha512-tUCGvt191vNSQgttSyJoibR+VO+I6+iCHIUdhzEMJKE+EAL8BwCN7fUOZlY4ofOelNHsK+gEjxB/B+9N3EWtdA== +headers-polyfill@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/headers-polyfill/-/headers-polyfill-4.0.3.tgz#922a0155de30ecc1f785bcf04be77844ca95ad07" + integrity sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ== hermes-estree@0.12.0: version "0.12.0" @@ -16275,27 +16334,6 @@ inquirer@8.2.0, inquirer@^8.1.5: strip-ansi "^6.0.0" through "^2.3.6" -inquirer@^8.2.0: - version "8.2.5" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.5.tgz#d8654a7542c35a9b9e069d27e2df4858784d54f8" - integrity sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.1" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.21" - mute-stream "0.0.8" - ora "^5.4.1" - run-async "^2.4.0" - rxjs "^7.5.5" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - wrap-ansi "^7.0.0" - inspectpack@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/inspectpack/-/inspectpack-4.7.1.tgz#baf081bae0b5b31bbedd534424e658f32d60f97a" @@ -16690,7 +16728,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-generator-function@^1.0.10, is-generator-function@^1.0.7: +is-generator-function@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== @@ -16908,7 +16946,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.3: +is-typed-array@^1.1.10: version "1.1.10" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== @@ -18010,11 +18048,6 @@ joi@^17.2.1: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -js-levenshtein@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - js-sha3@0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" @@ -19710,30 +19743,28 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -msw@^1.2.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/msw/-/msw-1.3.3.tgz#0b6f173db07292e1cf096b435878932dcf78f208" - integrity sha512-CiPyRFiYJCXYyH/vwxT7m+sa4VZHuUH6cGwRBj0kaTjBGpsk4EnL47YzhoA859htVCF2vzqZuOsomIUlFqg9GQ== - dependencies: - "@mswjs/cookies" "^0.2.2" - "@mswjs/interceptors" "^0.17.10" - "@open-draft/until" "^1.0.3" - "@types/cookie" "^0.4.1" - "@types/js-levenshtein" "^1.1.1" - chalk "^4.1.1" - chokidar "^3.4.2" - cookie "^0.4.2" +msw@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/msw/-/msw-2.3.1.tgz#bfc73e256ffc2c74ec4381b604abb258df35f32b" + integrity sha512-ocgvBCLn/5l3jpl1lssIb3cniuACJLoOfZu01e3n5dbJrpA5PeeWn28jCLgQDNt6d7QT8tF2fYRzm9JoEHtiig== + dependencies: + "@bundled-es-modules/cookie" "^2.0.0" + "@bundled-es-modules/statuses" "^1.0.1" + "@inquirer/confirm" "^3.0.0" + "@mswjs/cookies" "^1.1.0" + "@mswjs/interceptors" "^0.29.0" + "@open-draft/until" "^2.1.0" + "@types/cookie" "^0.6.0" + "@types/statuses" "^2.0.4" + chalk "^4.1.2" graphql "^16.8.1" - headers-polyfill "3.2.5" - inquirer "^8.2.0" + headers-polyfill "^4.0.2" is-node-process "^1.2.0" - js-levenshtein "^1.1.6" - node-fetch "^2.6.7" - outvariant "^1.4.0" + outvariant "^1.4.2" path-to-regexp "^6.2.0" - strict-event-emitter "^0.4.3" - type-fest "^2.19.0" - yargs "^17.3.1" + strict-event-emitter "^0.5.1" + type-fest "^4.9.0" + yargs "^17.7.2" multicast-dns-service-types@^1.1.0: version "1.1.0" @@ -19753,6 +19784,11 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + nan@^2.12.1: version "2.15.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" @@ -20360,7 +20396,7 @@ outvariant@^1.2.1: resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.3.0.tgz#c39723b1d2cba729c930b74bf962317a81b9b1c9" integrity sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ== -outvariant@^1.4.0: +outvariant@^1.4.0, outvariant@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.2.tgz#f54f19240eeb7f15b28263d5147405752d8e2066" integrity sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ== @@ -23551,13 +23587,6 @@ rxjs@^7.2.0: dependencies: tslib "~2.1.0" -rxjs@^7.5.5: - version "7.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== - dependencies: - tslib "^2.1.0" - safe-array-concat@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" @@ -23884,11 +23913,6 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -set-cookie-parser@^2.4.6: - version "2.5.1" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.5.1.tgz#ddd3e9a566b0e8e0862aca974a6ac0e01349430b" - integrity sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ== - set-function-length@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" @@ -24020,6 +24044,11 @@ signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + simple-git@^3.16.0: version "3.17.0" resolved "https://registry.yarnpkg.com/simple-git/-/simple-git-3.17.0.tgz#1a961fa43f697b4e2391cf34c8a0554ef84fed8e" @@ -24392,7 +24421,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -statuses@2.0.1: +statuses@2.0.1, statuses@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== @@ -24444,17 +24473,10 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -strict-event-emitter@^0.2.4: - version "0.2.8" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.2.8.tgz#b4e768927c67273c14c13d20e19d5e6c934b47ca" - integrity sha512-KDf/ujU8Zud3YaLtMCcTI4xkZlZVIYxTLr+XIULexP+77EEVWixeXroLUXQXiVtH4XH2W7jr/3PT1v3zBuvc3A== - dependencies: - events "^3.3.0" - -strict-event-emitter@^0.4.3: - version "0.4.6" - resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.4.6.tgz#ff347c8162b3e931e3ff5f02cfce6772c3b07eb3" - integrity sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg== +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== strict-uri-encode@^2.0.0: version "2.0.0" @@ -25428,7 +25450,7 @@ type-fest@^1.0.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.13.0, type-fest@^2.19.0: +type-fest@^2.13.0: version "2.19.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== @@ -25438,6 +25460,11 @@ type-fest@^4.15.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.15.0.tgz#21da206b89c15774cc718c4f2d693e13a1a14a43" integrity sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA== +type-fest@^4.9.0: + version "4.20.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.20.1.tgz#d97bb1e923bf524e5b4b43421d586760fb2ee8be" + integrity sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -25570,6 +25597,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unfetch@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" @@ -25919,17 +25951,6 @@ util@^0.11.0: dependencies: inherits "2.0.3" -util@^0.12.3: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -26120,15 +26141,6 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" -web-encoding@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/web-encoding/-/web-encoding-1.1.5.tgz#fc810cf7667364a6335c939913f5051d3e0c4864" - integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== - dependencies: - util "^0.12.3" - optionalDependencies: - "@zxing/text-encoding" "0.9.0" - web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" @@ -26504,18 +26516,6 @@ which-typed-array@^1.1.11, which-typed-array@^1.1.13: gopd "^1.0.1" has-tostringtag "^1.0.0" -which-typed-array@^1.1.2: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which-typed-array@^1.1.9: version "1.1.11" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"